summaryrefslogtreecommitdiffstats
path: root/style/src
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2022-05-26 00:40:27 +0200
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2022-05-26 00:40:27 +0200
commit3a820b45f336398c48f8bedf7b8c4b8af876efff (patch)
tree44d7597820aabe1f7b0fc9db053357170e25aeec /style/src
parent03eda9b162012c503ead649e5ccb95b7ef1d10ed (diff)
downloadiced-3a820b45f336398c48f8bedf7b8c4b8af876efff.tar.gz
iced-3a820b45f336398c48f8bedf7b8c4b8af876efff.tar.bz2
iced-3a820b45f336398c48f8bedf7b8c4b8af876efff.zip
Implement theme styling for `Slider`
Diffstat (limited to 'style/src')
-rw-r--r--style/src/slider.rs66
-rw-r--r--style/src/theme.rs54
-rw-r--r--style/src/theme/palette.rs2
3 files changed, 61 insertions, 61 deletions
diff --git a/style/src/slider.rs b/style/src/slider.rs
index 1bb28b09..2bf0de73 100644
--- a/style/src/slider.rs
+++ b/style/src/slider.rs
@@ -26,70 +26,14 @@ pub enum HandleShape {
/// A set of rules that dictate the style of a slider.
pub trait StyleSheet {
+ type Variant: Default + Copy;
+
/// Produces the style of an active slider.
- fn active(&self) -> Style;
+ fn active(&self, variant: Self::Variant) -> Style;
/// Produces the style of an hovered slider.
- fn hovered(&self) -> Style;
+ fn hovered(&self, variant: Self::Variant) -> Style;
/// Produces the style of a slider that is being dragged.
- fn dragging(&self) -> Style;
-}
-
-struct Default;
-
-impl StyleSheet for Default {
- fn active(&self) -> Style {
- Style {
- rail_colors: ([0.6, 0.6, 0.6, 0.5].into(), Color::WHITE),
- handle: Handle {
- shape: HandleShape::Rectangle {
- width: 8,
- border_radius: 4.0,
- },
- color: Color::from_rgb(0.95, 0.95, 0.95),
- border_color: Color::from_rgb(0.6, 0.6, 0.6),
- border_width: 1.0,
- },
- }
- }
-
- fn hovered(&self) -> Style {
- let active = self.active();
-
- Style {
- handle: Handle {
- color: Color::from_rgb(0.90, 0.90, 0.90),
- ..active.handle
- },
- ..active
- }
- }
-
- fn dragging(&self) -> Style {
- let active = self.active();
-
- Style {
- handle: Handle {
- color: Color::from_rgb(0.85, 0.85, 0.85),
- ..active.handle
- },
- ..active
- }
- }
-}
-
-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 dragging(&self, variant: Self::Variant) -> Style;
}
diff --git a/style/src/theme.rs b/style/src/theme.rs
index 16f24923..e3c0efc6 100644
--- a/style/src/theme.rs
+++ b/style/src/theme.rs
@@ -3,6 +3,7 @@ mod palette;
pub use self::palette::Palette;
use crate::button;
+use crate::slider;
use iced_core::{Background, Color};
@@ -118,3 +119,56 @@ impl button::StyleSheet for Theme {
}
}
}
+
+impl slider::StyleSheet for Theme {
+ type Variant = ();
+
+ fn active(&self, _variant: Self::Variant) -> slider::Style {
+ let palette = self.extended_palette();
+
+ let handle = slider::Handle {
+ shape: slider::HandleShape::Rectangle {
+ width: 8,
+ border_radius: 4.0,
+ },
+ color: Color::WHITE,
+ border_color: Color::WHITE,
+ border_width: 1.0,
+ };
+
+ slider::Style {
+ rail_colors: (palette.background.strong, palette.background.base),
+ handle: slider::Handle {
+ color: palette.background.base,
+ border_color: palette.border,
+ ..handle
+ },
+ }
+ }
+
+ fn hovered(&self, variant: Self::Variant) -> slider::Style {
+ let active = self.active(variant);
+ let palette = self.extended_palette();
+
+ slider::Style {
+ handle: slider::Handle {
+ color: palette.background.weak,
+ ..active.handle
+ },
+ ..active
+ }
+ }
+
+ fn dragging(&self, variant: Self::Variant) -> slider::Style {
+ let active = self.active(variant);
+ let palette = self.extended_palette();
+
+ slider::Style {
+ handle: slider::Handle {
+ color: palette.background.strong,
+ ..active.handle
+ },
+ ..active
+ }
+ }
+}
diff --git a/style/src/theme/palette.rs b/style/src/theme/palette.rs
index 74139e6b..bbb122ef 100644
--- a/style/src/theme/palette.rs
+++ b/style/src/theme/palette.rs
@@ -59,6 +59,7 @@ pub struct Extended {
pub primary: Group,
pub success: Group,
pub danger: Group,
+ pub border: Color,
}
lazy_static! {
@@ -86,6 +87,7 @@ impl Extended {
palette.background,
palette.text,
),
+ border: mix(palette.background, palette.text, 0.7),
}
}
}