summaryrefslogtreecommitdiffstats
path: root/style/src
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2022-06-01 02:40:42 +0200
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2022-06-01 02:40:42 +0200
commit77dc9dc2cb4ac092ce88c2700253fbfc54292e2b (patch)
treeff0754b29e7703de1ab48b4867e0ab058990d55b /style/src
parente4ca779e436561bf48e5d34cdf554292fd4761e4 (diff)
downloadiced-77dc9dc2cb4ac092ce88c2700253fbfc54292e2b.tar.gz
iced-77dc9dc2cb4ac092ce88c2700253fbfc54292e2b.tar.bz2
iced-77dc9dc2cb4ac092ce88c2700253fbfc54292e2b.zip
Implement theme styling for `ProgressBar`
Diffstat (limited to 'style/src')
-rw-r--r--style/src/progress_bar.rs33
-rw-r--r--style/src/theme.rs39
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)]