cosmic::iced_widget::button

Trait Catalog

source
pub trait Catalog {
    type Class<'a>;

    // Required methods
    fn default<'a>() -> Self::Class<'a>;
    fn style(&self, class: &Self::Class<'_>, status: Status) -> Style;
}
Expand description

The theme catalog of a Button.

All themes that can be used with Button must implement this trait.

§Example

#[derive(Debug, Default)]
pub enum ButtonClass {
    #[default]
    Primary,
    Secondary,
    Danger
}

impl Catalog for MyTheme {
    type Class<'a> = ButtonClass;
     
    fn default<'a>() -> Self::Class<'a> {
        ButtonClass::default()
    }
     

    fn style(&self, class: &Self::Class<'_>, status: Status) -> Style {
        let mut style = Style::default();

        match class {
            ButtonClass::Primary => {
                style.background = Some(Background::Color(Color::from_rgb(0.529, 0.808, 0.921)));
            },
            ButtonClass::Secondary => {
                style.background = Some(Background::Color(Color::WHITE));
            },
            ButtonClass::Danger => {
                style.background = Some(Background::Color(Color::from_rgb(0.941, 0.502, 0.502)));
            },
        }

        style
    }
}

Although, in order to use Button::style with MyTheme, Catalog::Class must implement From<StyleFn<'_, MyTheme>>.

Required Associated Types§

source

type Class<'a>

The item class of the Catalog.

Required Methods§

source

fn default<'a>() -> Self::Class<'a>

The default class produced by the Catalog.

source

fn style(&self, class: &Self::Class<'_>, status: Status) -> Style

The Style of a class with the given status.

Object Safety§

This trait is not object safe.

Implementors§

source§

impl Catalog for cosmic::iced_winit::graphics::core::Theme

source§

type Class<'a> = Box<dyn Fn(&Theme, Status) -> Style + 'a>

source§

impl Catalog for cosmic::Theme