diff options
| author | 2022-06-07 01:11:35 +0200 | |
|---|---|---|
| committer | 2022-06-07 01:11:35 +0200 | |
| commit | ce53d3933c860cd958636cce415ac97c04aee746 (patch) | |
| tree | f52e2719af65c21ed0d1acc6764ac44e1bba9d65 /style | |
| parent | 835877fc636d71c1faaa4826cbfde8e09b3c82ba (diff) | |
| download | iced-ce53d3933c860cd958636cce415ac97c04aee746.tar.gz iced-ce53d3933c860cd958636cce415ac97c04aee746.tar.bz2 iced-ce53d3933c860cd958636cce415ac97c04aee746.zip | |
Implement theme styling for `TextInput`
Diffstat (limited to '')
| -rw-r--r-- | style/src/text_input.rs | 76 | ||||
| -rw-r--r-- | style/src/theme.rs | 85 | ||||
| -rw-r--r-- | style/src/theme/palette.rs | 2 | 
3 files changed, 83 insertions, 80 deletions
| diff --git a/style/src/text_input.rs b/style/src/text_input.rs index 3d5817cc..af86617b 100644 --- a/style/src/text_input.rs +++ b/style/src/text_input.rs @@ -3,87 +3,31 @@ use iced_core::{Background, Color};  /// The appearance of a text input.  #[derive(Debug, Clone, Copy)] -pub struct Style { +pub struct Appearance {      pub background: Background,      pub border_radius: f32,      pub border_width: f32,      pub border_color: Color,  } -impl std::default::Default for Style { -    fn default() -> Self { -        Self { -            background: Background::Color(Color::WHITE), -            border_radius: 0.0, -            border_width: 0.0, -            border_color: Color::TRANSPARENT, -        } -    } -} -  /// A set of rules that dictate the style of a text input.  pub trait StyleSheet { +    type Style: Default + Copy; +      /// Produces the style of an active text input. -    fn active(&self) -> Style; +    fn active(&self, style: Self::Style) -> Appearance;      /// Produces the style of a focused text input. -    fn focused(&self) -> Style; +    fn focused(&self, style: Self::Style) -> Appearance; -    fn placeholder_color(&self) -> Color; +    fn placeholder_color(&self, style: Self::Style) -> Color; -    fn value_color(&self) -> Color; +    fn value_color(&self, style: Self::Style) -> Color; -    fn selection_color(&self) -> Color; +    fn selection_color(&self, style: Self::Style) -> Color;      /// Produces the style of an hovered text input. -    fn hovered(&self) -> Style { -        self.focused() -    } -} - -struct Default; - -impl StyleSheet for Default { -    fn active(&self) -> Style { -        Style { -            background: Background::Color(Color::WHITE), -            border_radius: 5.0, -            border_width: 1.0, -            border_color: Color::from_rgb(0.7, 0.7, 0.7), -        } -    } - -    fn focused(&self) -> Style { -        Style { -            border_color: Color::from_rgb(0.5, 0.5, 0.5), -            ..self.active() -        } -    } - -    fn placeholder_color(&self) -> Color { -        Color::from_rgb(0.7, 0.7, 0.7) -    } - -    fn value_color(&self) -> Color { -        Color::from_rgb(0.3, 0.3, 0.3) -    } - -    fn selection_color(&self) -> Color { -        Color::from_rgb(0.8, 0.8, 1.0) -    } -} - -impl<'a> std::default::Default for Box<dyn StyleSheet + 'a> { -    fn default() -> Self { -        Box::new(Default) -    } -} - -impl<'a, T> From<T> for Box<dyn StyleSheet + 'a> -where -    T: StyleSheet + 'a, -{ -    fn from(style_sheet: T) -> Self { -        Box::new(style_sheet) +    fn hovered(&self, style: Self::Style) -> Appearance { +        self.focused(style)      }  } diff --git a/style/src/theme.rs b/style/src/theme.rs index b0846c0e..e1ac719e 100644 --- a/style/src/theme.rs +++ b/style/src/theme.rs @@ -10,6 +10,7 @@ use crate::progress_bar;  use crate::radio;  use crate::rule;  use crate::slider; +use crate::text_input;  use crate::toggler;  use iced_core::{Background, Color}; @@ -152,22 +153,22 @@ impl checkbox::StyleSheet for Theme {          match style {              Checkbox::Primary => checkbox_appearance( -                palette.background.weak, +                palette.background.base,                  palette.primary.strong,                  is_checked,              ),              Checkbox::Secondary => checkbox_appearance( -                palette.background.weak, +                palette.background.base,                  palette.background.base,                  is_checked,              ),              Checkbox::Success => checkbox_appearance( -                palette.background.weak, +                palette.background.base,                  palette.success.base,                  is_checked,              ),              Checkbox::Danger => checkbox_appearance( -                palette.background.weak, +                palette.background.base,                  palette.danger.base,                  is_checked,              ), @@ -183,23 +184,23 @@ impl checkbox::StyleSheet for Theme {          match style {              Checkbox::Primary => checkbox_appearance( -                palette.background.strong, -                palette.primary.strong, +                palette.background.weak, +                palette.primary.base,                  is_checked,              ),              Checkbox::Secondary => checkbox_appearance( -                palette.background.strong, -                palette.background.strong, +                palette.background.weak, +                palette.background.base,                  is_checked,              ),              Checkbox::Success => checkbox_appearance( -                palette.background.strong, -                palette.success.strong, +                palette.background.weak, +                palette.success.base,                  is_checked,              ),              Checkbox::Danger => checkbox_appearance( -                palette.background.strong, -                palette.danger.strong, +                palette.background.weak, +                palette.danger.base,                  is_checked,              ),          } @@ -410,7 +411,7 @@ impl progress_bar::StyleSheet for Theme {          let palette = self.extended_palette();          let from_palette = |bar: Color| progress_bar::Appearance { -            background: palette.background.weak.color.into(), +            background: palette.background.strong.color.into(),              bar: bar.into(),              border_radius: 2.0,          }; @@ -456,3 +457,61 @@ impl rule::StyleSheet for Theme {          }      }  } + +/* + * Text Input + */ +impl text_input::StyleSheet for Theme { +    type Style = (); + +    fn active(&self, _style: Self::Style) -> text_input::Appearance { +        let palette = self.extended_palette(); + +        text_input::Appearance { +            background: palette.background.base.color.into(), +            border_radius: 2.0, +            border_width: 1.0, +            border_color: palette.background.strong.color, +        } +    } + +    fn hovered(&self, _style: Self::Style) -> text_input::Appearance { +        let palette = self.extended_palette(); + +        text_input::Appearance { +            background: palette.background.base.color.into(), +            border_radius: 2.0, +            border_width: 1.0, +            border_color: palette.background.base.text, +        } +    } + +    fn focused(&self, _style: Self::Style) -> text_input::Appearance { +        let palette = self.extended_palette(); + +        text_input::Appearance { +            background: palette.background.base.color.into(), +            border_radius: 2.0, +            border_width: 1.0, +            border_color: palette.primary.strong.color, +        } +    } + +    fn placeholder_color(&self, _style: Self::Style) -> Color { +        let palette = self.extended_palette(); + +        palette.background.strong.color +    } + +    fn value_color(&self, _style: Self::Style) -> Color { +        let palette = self.extended_palette(); + +        palette.background.base.text +    } + +    fn selection_color(&self, _style: Self::Style) -> Color { +        let palette = self.extended_palette(); + +        palette.primary.weak.color +    } +} diff --git a/style/src/theme/palette.rs b/style/src/theme/palette.rs index 3d1ca097..fb23bb42 100644 --- a/style/src/theme/palette.rs +++ b/style/src/theme/palette.rs @@ -120,7 +120,7 @@ pub struct Background {  impl Background {      pub fn new(base: Color, text: Color) -> Self {          let weak = mix(base, text, 0.15); -        let strong = mix(base, text, 0.25); +        let strong = mix(base, text, 0.40);          Self {              base: Pair::new(base, text), | 
