Skip to content

Commit

Permalink
Update button Catalog and Style documentation (#2590)
Browse files Browse the repository at this point in the history
* Update button Catalog and Style documentation

* Clarified button documentation

* fix code typo

* Run `cargo fmt`

* Fixed docs to pass tests

---------

Co-authored-by: Héctor Ramón Jiménez <[email protected]>
  • Loading branch information
MichelleGranat and hecrj authored Oct 17, 2024
1 parent 4e0a630 commit ab2adb1
Showing 1 changed file with 51 additions and 0 deletions.
51 changes: 51 additions & 0 deletions widget/src/button.rs
Original file line number Diff line number Diff line change
Expand Up @@ -471,6 +471,9 @@ pub enum Status {
}

/// The style of a button.
///
/// If not specified with [`Button::style`]
/// the theme will provide the style.
#[derive(Debug, Clone, Copy, PartialEq)]
pub struct Style {
/// The [`Background`] of the button.
Expand Down Expand Up @@ -505,6 +508,54 @@ impl Default for Style {
}

/// The theme catalog of a [`Button`].
///
/// All themes that can be used with [`Button`]
/// must implement this trait.
///
/// # Example
/// ```no_run
/// # use iced_widget::core::{Color, Background};
/// # use iced_widget::button::{Catalog, Status, Style};
/// # struct MyTheme;
/// #[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>>`.
pub trait Catalog {
/// The item class of the [`Catalog`].
type Class<'a>;
Expand Down

0 comments on commit ab2adb1

Please sign in to comment.