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.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§

source§

impl Catalog for Theme

source§

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