diff options
author | 2024-03-12 15:45:21 +0100 | |
---|---|---|
committer | 2024-03-12 15:47:34 +0100 | |
commit | 7a5f5b0be779e5128de05fa779693fe65e81c1e6 (patch) | |
tree | 53172740bd36a2d440d9c0b5682890cf63a60ad6 /widget | |
parent | fd7a23ca47b556ad82f2a8a9e3f849deb9f72f1b (diff) | |
download | iced-7a5f5b0be779e5128de05fa779693fe65e81c1e6.tar.gz iced-7a5f5b0be779e5128de05fa779693fe65e81c1e6.tar.bz2 iced-7a5f5b0be779e5128de05fa779693fe65e81c1e6.zip |
Use closures for `ProgressBar::style`
Diffstat (limited to 'widget')
-rw-r--r-- | widget/src/helpers.rs | 6 | ||||
-rw-r--r-- | widget/src/progress_bar.rs | 36 |
2 files changed, 21 insertions, 21 deletions
diff --git a/widget/src/helpers.rs b/widget/src/helpers.rs index 2606826d..b23e3cb9 100644 --- a/widget/src/helpers.rs +++ b/widget/src/helpers.rs @@ -340,12 +340,12 @@ where /// * the current value of the [`ProgressBar`]. /// /// [`ProgressBar`]: crate::ProgressBar -pub fn progress_bar<Theme>( +pub fn progress_bar<'a, Theme>( range: RangeInclusive<f32>, value: f32, -) -> ProgressBar<Theme> +) -> ProgressBar<'a, Theme> where - Theme: progress_bar::DefaultStyle, + Theme: progress_bar::DefaultStyle + 'a, { ProgressBar::new(range, value) } diff --git a/widget/src/progress_bar.rs b/widget/src/progress_bar.rs index 7b0ea63f..38d8da85 100644 --- a/widget/src/progress_bar.rs +++ b/widget/src/progress_bar.rs @@ -13,7 +13,7 @@ use std::ops::RangeInclusive; /// /// # Example /// ```no_run -/// # type ProgressBar = iced_widget::ProgressBar; +/// # type ProgressBar<'a> = iced_widget::ProgressBar<'a>; /// # /// let value = 50.0; /// @@ -22,15 +22,15 @@ use std::ops::RangeInclusive; /// ///  #[allow(missing_debug_implementations)] -pub struct ProgressBar<Theme = crate::Theme> { +pub struct ProgressBar<'a, Theme = crate::Theme> { range: RangeInclusive<f32>, value: f32, width: Length, height: Option<Length>, - style: Style<Theme>, + style: Style<'a, Theme>, } -impl<Theme> ProgressBar<Theme> { +impl<'a, Theme> ProgressBar<'a, Theme> { /// The default height of a [`ProgressBar`]. pub const DEFAULT_HEIGHT: f32 = 30.0; @@ -41,14 +41,14 @@ impl<Theme> ProgressBar<Theme> { /// * the current value of the [`ProgressBar`] pub fn new(range: RangeInclusive<f32>, value: f32) -> Self where - Theme: DefaultStyle, + Theme: DefaultStyle + 'a, { ProgressBar { value: value.clamp(*range.start(), *range.end()), range, width: Length::Fill, height: None, - style: Theme::default_style(), + style: Box::new(Theme::default_style), } } @@ -65,14 +65,14 @@ impl<Theme> ProgressBar<Theme> { } /// Sets the style of the [`ProgressBar`]. - pub fn style(mut self, style: fn(&Theme) -> Appearance) -> Self { - self.style = style.into(); + pub fn style(mut self, style: impl Fn(&Theme) -> Appearance + 'a) -> Self { + self.style = Box::new(style); self } } -impl<Message, Theme, Renderer> Widget<Message, Theme, Renderer> - for ProgressBar<Theme> +impl<'a, Message, Theme, Renderer> Widget<Message, Theme, Renderer> + for ProgressBar<'a, Theme> where Renderer: crate::core::Renderer, { @@ -143,7 +143,7 @@ where } } -impl<'a, Message, Theme, Renderer> From<ProgressBar<Theme>> +impl<'a, Message, Theme, Renderer> From<ProgressBar<'a, Theme>> for Element<'a, Message, Theme, Renderer> where Message: 'a, @@ -151,7 +151,7 @@ where Renderer: 'a + crate::core::Renderer, { fn from( - progress_bar: ProgressBar<Theme>, + progress_bar: ProgressBar<'a, Theme>, ) -> Element<'a, Message, Theme, Renderer> { Element::new(progress_bar) } @@ -169,23 +169,23 @@ pub struct Appearance { } /// The style of a [`ProgressBar`]. -pub type Style<Theme> = fn(&Theme) -> Appearance; +pub type Style<'a, Theme> = Box<dyn Fn(&Theme) -> Appearance + 'a>; /// The default style of a [`ProgressBar`]. pub trait DefaultStyle { /// Returns the default style of a [`ProgressBar`]. - fn default_style() -> Style<Self>; + fn default_style(&self) -> Appearance; } impl DefaultStyle for Theme { - fn default_style() -> Style<Self> { - primary + fn default_style(&self) -> Appearance { + primary(self) } } impl DefaultStyle for Appearance { - fn default_style() -> Style<Self> { - |appearance| *appearance + fn default_style(&self) -> Appearance { + *self } } |