use iced_widget::core::{Background, border}; use iced_widget::pick_list::{Catalog, Status, Style, StyleFn}; use super::Theme; use crate::utils::{disabled_container, disabled_text}; impl Catalog for Theme { type Class<'a> = StyleFn<'a, Self>; fn default<'a>() -> ::Class<'a> { Box::new(default) } fn style( &self, class: &::Class<'_>, status: Status, ) -> Style { class(self, status) } } pub fn default(theme: &Theme, status: Status) -> Style { let surface = theme.colors().surface; let active = Style { text_color: surface.text, placeholder_color: surface.text_variant, handle_color: surface.text_variant, background: Background::Color(surface.container.high), border: border::rounded(4), }; match status { Status::Active => active, Status::Hovered => Style { background: Background::Color(surface.container.highest), ..active }, Status::Opened { .. } => Style { background: Background::Color(surface.container.highest), border: border::rounded(4), ..active }, Status::Disabled => Style { text_color: disabled_text(surface.text), background: disabled_container(surface.text).into(), ..active }, } }