diff options
author | 2024-03-12 14:54:28 +0100 | |
---|---|---|
committer | 2024-03-12 14:54:28 +0100 | |
commit | d0a1da194a7311d599bda0884c973e8eed6c15d8 (patch) | |
tree | f0fc2a8d4dbee0b4ae5df24e2c83b7aeedcd975b /widget/src | |
parent | 67416302180ce27c81418b71798d02b52c44e625 (diff) | |
download | iced-d0a1da194a7311d599bda0884c973e8eed6c15d8.tar.gz iced-d0a1da194a7311d599bda0884c973e8eed6c15d8.tar.bz2 iced-d0a1da194a7311d599bda0884c973e8eed6c15d8.zip |
Use closures for `Toggler::style`
Diffstat (limited to 'widget/src')
-rw-r--r-- | widget/src/helpers.rs | 2 | ||||
-rw-r--r-- | widget/src/toggler.rs | 25 |
2 files changed, 15 insertions, 12 deletions
diff --git a/widget/src/helpers.rs b/widget/src/helpers.rs index b2673607..dde6a207 100644 --- a/widget/src/helpers.rs +++ b/widget/src/helpers.rs @@ -194,7 +194,7 @@ pub fn toggler<'a, Message, Theme, Renderer>( f: impl Fn(bool) -> Message + 'a, ) -> Toggler<'a, Message, Theme, Renderer> where - Theme: toggler::DefaultStyle, + Theme: toggler::DefaultStyle + 'a, Renderer: core::text::Renderer, { Toggler::new(label, is_checked, f) diff --git a/widget/src/toggler.rs b/widget/src/toggler.rs index 9e81ba33..fc9e06e1 100644 --- a/widget/src/toggler.rs +++ b/widget/src/toggler.rs @@ -48,7 +48,7 @@ pub struct Toggler< text_shaping: text::Shaping, spacing: f32, font: Option<Renderer::Font>, - style: Style<Theme>, + style: Style<'a, Theme>, } impl<'a, Message, Theme, Renderer> Toggler<'a, Message, Theme, Renderer> @@ -72,7 +72,7 @@ where f: F, ) -> Self where - Theme: DefaultStyle, + Theme: 'a + DefaultStyle, F: 'a + Fn(bool) -> Message, { Toggler { @@ -87,7 +87,7 @@ where text_shaping: text::Shaping::Basic, spacing: Self::DEFAULT_SIZE / 2.0, font: None, - style: Theme::default_style(), + style: Box::new(Theme::default_style), } } @@ -145,8 +145,11 @@ where } /// Sets the style of the [`Toggler`]. - 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 } } @@ -398,23 +401,23 @@ pub struct Appearance { } /// The style of a [`Toggler`]. -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 [`Toggler`]. pub trait DefaultStyle { /// Returns the default style of a [`Toggler`]. - 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 } } |