summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Michelle Granat <139873465+MichelleGranat@users.noreply.github.com>2024-10-17 07:29:31 +0300
committerLibravatar GitHub <noreply@github.com>2024-10-17 04:29:31 +0000
commitab2adb11be28a3e44aa77daf41bbf7d86233d4ea (patch)
tree81cc1e5bc411f7d5b787675e36b83071ec751129
parent4e0a63091cf1b5dbff0271200eac49d1b65e77e7 (diff)
downloadiced-ab2adb11be28a3e44aa77daf41bbf7d86233d4ea.tar.gz
iced-ab2adb11be28a3e44aa77daf41bbf7d86233d4ea.tar.bz2
iced-ab2adb11be28a3e44aa77daf41bbf7d86233d4ea.zip
Update button Catalog and Style documentation (#2590)
* 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 <hector@hecrj.dev>
-rw-r--r--widget/src/button.rs51
1 files changed, 51 insertions, 0 deletions
diff --git a/widget/src/button.rs b/widget/src/button.rs
index 552298bb..a3394a01 100644
--- a/widget/src/button.rs
+++ b/widget/src/button.rs
@@ -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.
@@ -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>;