summaryrefslogtreecommitdiffstats
path: root/style/src/theme.rs
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector@hecrj.dev>2024-03-04 03:57:03 +0100
committerLibravatar Héctor Ramón Jiménez <hector@hecrj.dev>2024-03-04 03:57:03 +0100
commitce309db37b8eb9860ae1f1be1710fb39e7a9edea (patch)
treea28ef6659f6235ec7bc2a7403cfef467a71fb2bf /style/src/theme.rs
parent1bb5a1b9a23e1c4739430ac87ca33b06c2f4d9df (diff)
downloadiced-ce309db37b8eb9860ae1f1be1710fb39e7a9edea.tar.gz
iced-ce309db37b8eb9860ae1f1be1710fb39e7a9edea.tar.bz2
iced-ce309db37b8eb9860ae1f1be1710fb39e7a9edea.zip
Try new approach to theming for `Slider`
Diffstat (limited to '')
-rw-r--r--style/src/theme.rs108
1 files changed, 30 insertions, 78 deletions
diff --git a/style/src/theme.rs b/style/src/theme.rs
index 0b56e101..656d6bf9 100644
--- a/style/src/theme.rs
+++ b/style/src/theme.rs
@@ -608,88 +608,40 @@ impl<T: Fn(&Theme) -> container::Appearance> container::StyleSheet for T {
}
}
-/// The style of a slider.
-#[derive(Default)]
-pub enum Slider {
- /// The default style.
- #[default]
- Default,
- /// A custom style.
- Custom(Box<dyn slider::StyleSheet<Style = Theme>>),
-}
-
impl slider::StyleSheet for Theme {
- type Style = Slider;
-
- fn active(&self, style: &Self::Style) -> slider::Appearance {
- match style {
- Slider::Default => {
- let palette = self.extended_palette();
-
- let handle = slider::Handle {
- shape: slider::HandleShape::Rectangle {
- width: 8,
- border_radius: 4.0.into(),
- },
- color: Color::WHITE,
- border_color: Color::WHITE,
- border_width: 1.0,
- };
-
- slider::Appearance {
- rail: slider::Rail {
- colors: (
- palette.primary.base.color,
- palette.secondary.base.color,
- ),
- width: 4.0,
- border_radius: 2.0.into(),
- },
- handle: slider::Handle {
- color: palette.background.base.color,
- border_color: palette.primary.base.color,
- ..handle
- },
- }
- }
- Slider::Custom(custom) => custom.active(self),
- }
- }
-
- fn hovered(&self, style: &Self::Style) -> slider::Appearance {
- match style {
- Slider::Default => {
- let active = self.active(style);
- let palette = self.extended_palette();
-
- slider::Appearance {
- handle: slider::Handle {
- color: palette.primary.weak.color,
- ..active.handle
- },
- ..active
- }
- }
- Slider::Custom(custom) => custom.hovered(self),
- }
+ fn default() -> fn(&Self, slider::Status) -> slider::Appearance {
+ slider
}
+}
- fn dragging(&self, style: &Self::Style) -> slider::Appearance {
- match style {
- Slider::Default => {
- let active = self.active(style);
- let palette = self.extended_palette();
+pub fn slider(theme: &Theme, status: slider::Status) -> slider::Appearance {
+ let palette = theme.extended_palette();
- slider::Appearance {
- handle: slider::Handle {
- color: palette.primary.base.color,
- ..active.handle
- },
- ..active
- }
- }
- Slider::Custom(custom) => custom.dragging(self),
- }
+ let handle = slider::Handle {
+ shape: slider::HandleShape::Rectangle {
+ width: 8,
+ border_radius: 4.0.into(),
+ },
+ color: Color::WHITE,
+ border_color: Color::WHITE,
+ border_width: 1.0,
+ };
+
+ slider::Appearance {
+ rail: slider::Rail {
+ colors: (palette.primary.base.color, palette.secondary.base.color),
+ width: 4.0,
+ border_radius: 2.0.into(),
+ },
+ handle: slider::Handle {
+ color: match status {
+ slider::Status::Active => palette.background.base.color,
+ slider::Status::Hovered => palette.primary.weak.color,
+ slider::Status::Dragging => palette.primary.base.color,
+ },
+ border_color: palette.primary.base.color,
+ ..handle
+ },
}
}