diff options
Diffstat (limited to '')
| -rw-r--r-- | style/src/radio.rs | 42 | ||||
| -rw-r--r-- | style/src/theme.rs | 28 | 
2 files changed, 32 insertions, 38 deletions
diff --git a/style/src/radio.rs b/style/src/radio.rs index dab76ad8..a4d4a83b 100644 --- a/style/src/radio.rs +++ b/style/src/radio.rs @@ -3,7 +3,7 @@ use iced_core::{Background, Color};  /// The appearance of a radio button.  #[derive(Debug, Clone, Copy)] -pub struct Style { +pub struct Appearance {      pub background: Background,      pub dot_color: Color,      pub border_width: f32, @@ -13,43 +13,9 @@ pub struct Style {  /// A set of rules that dictate the style of a radio button.  pub trait StyleSheet { -    fn active(&self) -> Style; +    type Style: Default + Copy; -    fn hovered(&self) -> Style; -} - -struct Default; - -impl StyleSheet for Default { -    fn active(&self) -> Style { -        Style { -            background: Background::Color(Color::from_rgb(0.95, 0.95, 0.95)), -            dot_color: Color::from_rgb(0.3, 0.3, 0.3), -            border_width: 1.0, -            border_color: Color::from_rgb(0.6, 0.6, 0.6), -            text_color: None, -        } -    } - -    fn hovered(&self) -> Style { -        Style { -            background: Background::Color(Color::from_rgb(0.90, 0.90, 0.90)), -            ..self.active() -        } -    } -} - -impl<'a> std::default::Default for Box<dyn StyleSheet + 'a> { -    fn default() -> Self { -        Box::new(Default) -    } -} +    fn active(&self, style: Self::Style) -> Appearance; -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;  } diff --git a/style/src/theme.rs b/style/src/theme.rs index c9fae3c2..e3b151aa 100644 --- a/style/src/theme.rs +++ b/style/src/theme.rs @@ -4,6 +4,7 @@ pub use self::palette::Palette;  use crate::application;  use crate::button; +use crate::radio;  use crate::slider;  use iced_core::{Background, Color}; @@ -165,3 +166,30 @@ impl slider::StyleSheet for Theme {          }      }  } + +impl radio::StyleSheet for Theme { +    type Style = (); + +    fn active(&self, _style: Self::Style) -> radio::Appearance { +        let palette = self.extended_palette(); + +        radio::Appearance { +            background: Color::TRANSPARENT.into(), +            dot_color: palette.primary.strong.color.into(), +            border_width: 1.0, +            border_color: palette.primary.strong.color, +            text_color: None, +        } +    } + +    fn hovered(&self, style: Self::Style) -> radio::Appearance { +        let active = self.active(style); +        let palette = self.extended_palette(); + +        radio::Appearance { +            dot_color: palette.primary.weak.text.into(), +            background: palette.primary.weak.color.into(), +            ..active +        } +    } +}  | 
