pub struct Style {
pub divider_color: iced_core::Color,
pub divider_width: f32,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Status {
Idle,
Hovering,
Dragging,
}
pub trait Catalog {
type Class<'a>;
fn default<'a>() -> Self::Class<'a>;
fn style(&self, class: &Self::Class<'_>, status: Status) -> Style;
}
pub type StyleFn<'a, Theme> = Box<dyn Fn(&Theme, Status) -> Style + 'a>;
impl Catalog for iced_core::Theme {
type Class<'a> = StyleFn<'a, Self>;
fn default<'a>() -> Self::Class<'a> {
Box::new(default_style)
}
fn style(&self, class: &Self::Class<'_>, status: Status) -> Style {
class(self, status)
}
}
fn default_style(theme: &iced_core::Theme, status: Status) -> Style {
let palette = theme.extended_palette();
match status {
Status::Idle => Style {
divider_color: palette.background.strong.color,
divider_width: 1.0,
},
Status::Hovering => Style {
divider_color: palette.primary.weak.color,
divider_width: 1.0,
},
Status::Dragging => Style {
divider_color: palette.primary.strong.color,
divider_width: 1.0,
},
}
}