diff options
| author | 2024-01-12 14:41:40 +0100 | |
|---|---|---|
| committer | 2024-01-12 14:41:40 +0100 | |
| commit | 50c310fd9f692eafb2350827636ffbd6d7b6c9b9 (patch) | |
| tree | 0f1ab4182a0cce7469e01881c095e0c3988b3f9a /style/src | |
| parent | 63e9adac56e9a4f21ec82137329d7c455fbf630b (diff) | |
| parent | 11474bdc3e1a43e6c167d7b98f22d87933dbd2b6 (diff) | |
| download | iced-50c310fd9f692eafb2350827636ffbd6d7b6c9b9.tar.gz iced-50c310fd9f692eafb2350827636ffbd6d7b6c9b9.tar.bz2 iced-50c310fd9f692eafb2350827636ffbd6d7b6c9b9.zip | |
Merge pull request #2192 from iced-rs/fix/layout-inconsistencies
Layout consistency
Diffstat (limited to '')
| -rw-r--r-- | style/src/container.rs | 26 | ||||
| -rw-r--r-- | style/src/theme.rs | 42 | ||||
| -rw-r--r-- | style/src/theme/palette.rs | 3 | 
3 files changed, 64 insertions, 7 deletions
| diff --git a/style/src/container.rs b/style/src/container.rs index ec543ae4..490a9dab 100644 --- a/style/src/container.rs +++ b/style/src/container.rs @@ -1,5 +1,5 @@  //! Change the appearance of a container. -use iced_core::{Background, BorderRadius, Color}; +use crate::core::{Background, BorderRadius, Color, Pixels};  /// The appearance of a container.  #[derive(Debug, Clone, Copy)] @@ -16,6 +16,30 @@ pub struct Appearance {      pub border_color: Color,  } +impl Appearance { +    /// Derives a new [`Appearance`] with a border of the given [`Color`] and +    /// `width`. +    pub fn with_border( +        self, +        color: impl Into<Color>, +        width: impl Into<Pixels>, +    ) -> Self { +        Self { +            border_color: color.into(), +            border_width: width.into().0, +            ..self +        } +    } + +    /// Derives a new [`Appearance`] with the given [`Background`]. +    pub fn with_background(self, background: impl Into<Background>) -> Self { +        Self { +            background: Some(background.into()), +            ..self +        } +    } +} +  impl std::default::Default for Appearance {      fn default() -> Self {          Self { diff --git a/style/src/theme.rs b/style/src/theme.rs index 47010728..deccf455 100644 --- a/style/src/theme.rs +++ b/style/src/theme.rs @@ -23,6 +23,7 @@ use crate::toggler;  use iced_core::{Background, Color, Vector}; +use std::fmt;  use std::rc::Rc;  /// A built-in theme. @@ -38,18 +39,22 @@ pub enum Theme {  }  impl Theme { +    /// A list with all the defined themes. +    pub const ALL: &'static [Self] = &[Self::Light, Self::Dark]; +      /// Creates a new custom [`Theme`] from the given [`Palette`]. -    pub fn custom(palette: Palette) -> Self { -        Self::custom_with_fn(palette, palette::Extended::generate) +    pub fn custom(name: String, palette: Palette) -> Self { +        Self::custom_with_fn(name, palette, palette::Extended::generate)      }      /// Creates a new custom [`Theme`] from the given [`Palette`], with      /// a custom generator of a [`palette::Extended`].      pub fn custom_with_fn( +        name: String,          palette: Palette,          generate: impl FnOnce(Palette) -> palette::Extended,      ) -> Self { -        Self::Custom(Box::new(Custom::with_fn(palette, generate))) +        Self::Custom(Box::new(Custom::with_fn(name, palette, generate)))      }      /// Returns the [`Palette`] of the [`Theme`]. @@ -71,32 +76,51 @@ impl Theme {      }  } +impl fmt::Display for Theme { +    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { +        match self { +            Self::Light => write!(f, "Light"), +            Self::Dark => write!(f, "Dark"), +            Self::Custom(custom) => custom.fmt(f), +        } +    } +} +  /// A [`Theme`] with a customized [`Palette`]. -#[derive(Debug, Clone, Copy, PartialEq)] +#[derive(Debug, Clone, PartialEq)]  pub struct Custom { +    name: String,      palette: Palette,      extended: palette::Extended,  }  impl Custom {      /// Creates a [`Custom`] theme from the given [`Palette`]. -    pub fn new(palette: Palette) -> Self { -        Self::with_fn(palette, palette::Extended::generate) +    pub fn new(name: String, palette: Palette) -> Self { +        Self::with_fn(name, palette, palette::Extended::generate)      }      /// Creates a [`Custom`] theme from the given [`Palette`] with      /// a custom generator of a [`palette::Extended`].      pub fn with_fn( +        name: String,          palette: Palette,          generate: impl FnOnce(Palette) -> palette::Extended,      ) -> Self {          Self { +            name,              palette,              extended: generate(palette),          }      }  } +impl fmt::Display for Custom { +    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { +        write!(f, "{}", self.name) +    } +} +  /// The style of an application.  #[derive(Default)]  pub enum Application { @@ -383,6 +407,12 @@ pub enum Container {      Custom(Box<dyn container::StyleSheet<Style = Theme>>),  } +impl From<container::Appearance> for Container { +    fn from(appearance: container::Appearance) -> Self { +        Self::Custom(Box::new(move |_: &_| appearance)) +    } +} +  impl<T: Fn(&Theme) -> container::Appearance + 'static> From<T> for Container {      fn from(f: T) -> Self {          Self::Custom(Box::new(f)) diff --git a/style/src/theme/palette.rs b/style/src/theme/palette.rs index aaeb799d..76977a29 100644 --- a/style/src/theme/palette.rs +++ b/style/src/theme/palette.rs @@ -82,6 +82,8 @@ pub struct Extended {      pub success: Success,      /// The set of danger colors.      pub danger: Danger, +    /// Whether the palette is dark or not. +    pub is_dark: bool,  }  /// The built-in light variant of an [`Extended`] palette. @@ -113,6 +115,7 @@ impl Extended {                  palette.background,                  palette.text,              ), +            is_dark: is_dark(palette.background),          }      }  } | 
