diff options
author | 2022-06-01 02:40:42 +0200 | |
---|---|---|
committer | 2022-06-01 02:40:42 +0200 | |
commit | 77dc9dc2cb4ac092ce88c2700253fbfc54292e2b (patch) | |
tree | ff0754b29e7703de1ab48b4867e0ab058990d55b /style | |
parent | e4ca779e436561bf48e5d34cdf554292fd4761e4 (diff) | |
download | iced-77dc9dc2cb4ac092ce88c2700253fbfc54292e2b.tar.gz iced-77dc9dc2cb4ac092ce88c2700253fbfc54292e2b.tar.bz2 iced-77dc9dc2cb4ac092ce88c2700253fbfc54292e2b.zip |
Implement theme styling for `ProgressBar`
Diffstat (limited to 'style')
-rw-r--r-- | style/src/progress_bar.rs | 33 | ||||
-rw-r--r-- | style/src/theme.rs | 39 |
2 files changed, 43 insertions, 29 deletions
diff --git a/style/src/progress_bar.rs b/style/src/progress_bar.rs index a0195c7a..768e7c9c 100644 --- a/style/src/progress_bar.rs +++ b/style/src/progress_bar.rs @@ -1,9 +1,9 @@ //! Provide progress feedback to your users. -use iced_core::{Background, Color}; +use iced_core::Background; /// The appearance of a progress bar. #[derive(Debug, Clone, Copy)] -pub struct Style { +pub struct Appearance { pub background: Background, pub bar: Background, pub border_radius: f32, @@ -11,32 +11,7 @@ pub struct Style { /// A set of rules that dictate the style of a progress bar. pub trait StyleSheet { - fn style(&self) -> Style; -} - -struct Default; - -impl StyleSheet for Default { - fn style(&self) -> Style { - Style { - background: Background::Color(Color::from_rgb(0.6, 0.6, 0.6)), - bar: Background::Color(Color::from_rgb(0.3, 0.9, 0.3)), - border_radius: 5.0, - } - } -} - -impl<'a> std::default::Default for Box<dyn StyleSheet + 'a> { - fn default() -> Self { - Box::new(Default) - } -} + type Style: Default + Copy; -impl<'a, T> From<T> for Box<dyn StyleSheet + 'a> -where - T: 'a + StyleSheet, -{ - fn from(style: T) -> Self { - Box::new(style) - } + fn appearance(&self, style: Self::Style) -> Appearance; } diff --git a/style/src/theme.rs b/style/src/theme.rs index 71a25dbe..ca780457 100644 --- a/style/src/theme.rs +++ b/style/src/theme.rs @@ -5,6 +5,7 @@ pub use self::palette::Palette; use crate::application; use crate::button; use crate::pane_grid; +use crate::progress_bar; use crate::radio; use crate::rule; use crate::slider; @@ -282,6 +283,44 @@ impl pane_grid::StyleSheet for Theme { } /* + * Progress Bar + */ +#[derive(Clone, Copy)] +pub enum ProgressBar { + Primary, + Success, + Danger, + Custom(fn(&Theme) -> progress_bar::Appearance), +} + +impl Default for ProgressBar { + fn default() -> Self { + Self::Primary + } +} + +impl progress_bar::StyleSheet for Theme { + type Style = ProgressBar; + + fn appearance(&self, style: Self::Style) -> progress_bar::Appearance { + let palette = self.extended_palette(); + + let from_palette = |bar: Color| progress_bar::Appearance { + background: palette.background.weak.color.into(), + bar: bar.into(), + border_radius: 2.0, + }; + + match style { + ProgressBar::Primary => from_palette(palette.primary.base.color), + ProgressBar::Success => from_palette(palette.success.base.color), + ProgressBar::Danger => from_palette(palette.danger.base.color), + ProgressBar::Custom(f) => f(self), + } + } +} + +/* * Rule */ #[derive(Clone, Copy)] |