diff options
author | 2022-05-26 00:40:27 +0200 | |
---|---|---|
committer | 2022-05-26 00:40:27 +0200 | |
commit | 3a820b45f336398c48f8bedf7b8c4b8af876efff (patch) | |
tree | 44d7597820aabe1f7b0fc9db053357170e25aeec /pure | |
parent | 03eda9b162012c503ead649e5ccb95b7ef1d10ed (diff) | |
download | iced-3a820b45f336398c48f8bedf7b8c4b8af876efff.tar.gz iced-3a820b45f336398c48f8bedf7b8c4b8af876efff.tar.bz2 iced-3a820b45f336398c48f8bedf7b8c4b8af876efff.zip |
Implement theme styling for `Slider`
Diffstat (limited to 'pure')
-rw-r--r-- | pure/src/helpers.rs | 8 | ||||
-rw-r--r-- | pure/src/widget/slider.rs | 31 |
2 files changed, 26 insertions, 13 deletions
diff --git a/pure/src/helpers.rs b/pure/src/helpers.rs index ad6f10b1..71ae7635 100644 --- a/pure/src/helpers.rs +++ b/pure/src/helpers.rs @@ -147,14 +147,16 @@ where /// Creates a new [`Slider`]. /// /// [`Slider`]: widget::Slider -pub fn slider<'a, Message, T>( +pub fn slider<'a, T, Message, Renderer>( range: std::ops::RangeInclusive<T>, value: T, on_change: impl Fn(T) -> Message + 'a, -) -> widget::Slider<'a, T, Message> +) -> widget::Slider<'a, T, Message, Renderer> where - Message: Clone, T: Copy + From<u8> + std::cmp::PartialOrd, + Message: Clone, + Renderer: iced_native::Renderer, + Renderer::Theme: widget::slider::StyleSheet, { widget::Slider::new(range, value, on_change) } diff --git a/pure/src/widget/slider.rs b/pure/src/widget/slider.rs index 2f934a48..a6deda41 100644 --- a/pure/src/widget/slider.rs +++ b/pure/src/widget/slider.rs @@ -37,7 +37,11 @@ pub use iced_style::slider::{Handle, HandleShape, Style, StyleSheet}; /// ///  #[allow(missing_debug_implementations)] -pub struct Slider<'a, T, Message> { +pub struct Slider<'a, T, Message, Renderer> +where + Renderer: iced_native::Renderer, + Renderer::Theme: StyleSheet, +{ range: RangeInclusive<T>, step: T, value: T, @@ -45,13 +49,15 @@ pub struct Slider<'a, T, Message> { on_release: Option<Message>, width: Length, height: u16, - style_sheet: Box<dyn StyleSheet + 'a>, + variant: <Renderer::Theme as StyleSheet>::Variant, } -impl<'a, T, Message> Slider<'a, T, Message> +impl<'a, T, Message, Renderer> Slider<'a, T, Message, Renderer> where T: Copy + From<u8> + std::cmp::PartialOrd, Message: Clone, + Renderer: iced_native::Renderer, + Renderer::Theme: StyleSheet, { /// The default height of a [`Slider`]. pub const DEFAULT_HEIGHT: u16 = 22; @@ -88,7 +94,7 @@ where on_release: None, width: Length::Fill, height: Self::DEFAULT_HEIGHT, - style_sheet: Default::default(), + variant: Default::default(), } } @@ -118,9 +124,9 @@ where /// Sets the style of the [`Slider`]. pub fn style( mut self, - style_sheet: impl Into<Box<dyn StyleSheet + 'a>>, + variant: impl Into<<Renderer::Theme as StyleSheet>::Variant>, ) -> Self { - self.style_sheet = style_sheet.into(); + self.variant = variant.into(); self } @@ -132,11 +138,12 @@ where } impl<'a, T, Message, Renderer> Widget<Message, Renderer> - for Slider<'a, T, Message> + for Slider<'a, T, Message, Renderer> where T: Copy + Into<f64> + num_traits::FromPrimitive, Message: Clone, Renderer: iced_native::Renderer, + Renderer::Theme: StyleSheet, { fn tag(&self) -> tree::Tag { tree::Tag::of::<slider::State>() @@ -208,7 +215,8 @@ where tree.state.downcast_ref::<slider::State>(), self.value, &self.range, - self.style_sheet.as_ref(), + theme, + self.variant, ) } @@ -228,14 +236,17 @@ where } } -impl<'a, T, Message, Renderer> From<Slider<'a, T, Message>> +impl<'a, T, Message, Renderer> From<Slider<'a, T, Message, Renderer>> for Element<'a, Message, Renderer> where T: 'a + Copy + Into<f64> + num_traits::FromPrimitive, Message: 'a + Clone, Renderer: 'a + iced_native::Renderer, + Renderer::Theme: StyleSheet, { - fn from(slider: Slider<'a, T, Message>) -> Element<'a, Message, Renderer> { + fn from( + slider: Slider<'a, T, Message, Renderer>, + ) -> Element<'a, Message, Renderer> { Element::new(slider) } } |