diff options
Diffstat (limited to '')
| -rw-r--r-- | widget/src/helpers.rs | 4 | ||||
| -rw-r--r-- | widget/src/slider.rs | 25 | ||||
| -rw-r--r-- | widget/src/vertical_slider.rs | 13 | 
3 files changed, 24 insertions, 18 deletions
| diff --git a/widget/src/helpers.rs b/widget/src/helpers.rs index 896e2c13..c3801b09 100644 --- a/widget/src/helpers.rs +++ b/widget/src/helpers.rs @@ -240,7 +240,7 @@ pub fn slider<'a, T, Message, Theme>(  where      T: Copy + From<u8> + std::cmp::PartialOrd,      Message: Clone, -    Theme: slider::DefaultStyle, +    Theme: slider::DefaultStyle + 'a,  {      Slider::new(range, value, on_change)  } @@ -256,7 +256,7 @@ pub fn vertical_slider<'a, T, Message, Theme>(  where      T: Copy + From<u8> + std::cmp::PartialOrd,      Message: Clone, -    Theme: vertical_slider::DefaultStyle, +    Theme: vertical_slider::DefaultStyle + 'a,  {      VerticalSlider::new(range, value, on_change)  } diff --git a/widget/src/slider.rs b/widget/src/slider.rs index f3ea9bfd..d3b46a98 100644 --- a/widget/src/slider.rs +++ b/widget/src/slider.rs @@ -49,7 +49,7 @@ pub struct Slider<'a, T, Message, Theme = crate::Theme> {      on_release: Option<Message>,      width: Length,      height: f32, -    style: Style<Theme>, +    style: Style<'a, Theme>,  }  impl<'a, T, Message, Theme> Slider<'a, T, Message, Theme> @@ -70,7 +70,7 @@ where      ///   `Message`.      pub fn new<F>(range: RangeInclusive<T>, value: T, on_change: F) -> Self      where -        Theme: DefaultStyle, +        Theme: DefaultStyle + 'a,          F: 'a + Fn(T) -> Message,      {          let value = if value >= *range.start() { @@ -95,7 +95,7 @@ where              on_release: None,              width: Length::Fill,              height: Self::DEFAULT_HEIGHT, -            style: Theme::default_style(), +            style: Box::new(Theme::default_style),          }      } @@ -131,8 +131,11 @@ where      }      /// Sets the style of the [`Slider`]. -    pub fn style(mut self, style: fn(&Theme, Status) -> Appearance) -> Self { -        self.style = style.into(); +    pub fn style( +        mut self, +        style: impl Fn(&Theme, Status) -> Appearance + 'a, +    ) -> Self { +        self.style = Box::new(style);          self      } @@ -547,23 +550,23 @@ pub enum HandleShape {  }  /// The style of a [`Slider`]. -pub type Style<Theme> = fn(&Theme, Status) -> Appearance; +pub type Style<'a, Theme> = Box<dyn Fn(&Theme, Status) -> Appearance + 'a>;  /// The default style of a [`Slider`].  pub trait DefaultStyle {      /// Returns the default style of a [`Slider`]. -    fn default_style() -> Style<Self>; +    fn default_style(&self, status: Status) -> Appearance;  }  impl DefaultStyle for Theme { -    fn default_style() -> Style<Self> { -        default +    fn default_style(&self, status: Status) -> Appearance { +        default(self, status)      }  }  impl DefaultStyle for Appearance { -    fn default_style() -> Style<Self> { -        |appearance, _status| *appearance +    fn default_style(&self, _status: Status) -> Appearance { +        *self      }  } diff --git a/widget/src/vertical_slider.rs b/widget/src/vertical_slider.rs index f7030584..2aa8f4d1 100644 --- a/widget/src/vertical_slider.rs +++ b/widget/src/vertical_slider.rs @@ -51,7 +51,7 @@ pub struct VerticalSlider<'a, T, Message, Theme = crate::Theme> {      on_release: Option<Message>,      width: f32,      height: Length, -    style: Style<Theme>, +    style: Style<'a, Theme>,  }  impl<'a, T, Message, Theme> VerticalSlider<'a, T, Message, Theme> @@ -72,7 +72,7 @@ where      ///   `Message`.      pub fn new<F>(range: RangeInclusive<T>, value: T, on_change: F) -> Self      where -        Theme: DefaultStyle, +        Theme: DefaultStyle + 'a,          F: 'a + Fn(T) -> Message,      {          let value = if value >= *range.start() { @@ -97,7 +97,7 @@ where              on_release: None,              width: Self::DEFAULT_WIDTH,              height: Length::Fill, -            style: Theme::default_style(), +            style: Box::new(Theme::default_style),          }      } @@ -133,8 +133,11 @@ where      }      /// Sets the style of the [`VerticalSlider`]. -    pub fn style(mut self, style: fn(&Theme, Status) -> Appearance) -> Self { -        self.style = style.into(); +    pub fn style( +        mut self, +        style: impl Fn(&Theme, Status) -> Appearance + 'a, +    ) -> Self { +        self.style = Box::new(style);          self      } | 
