diff options
author | 2021-10-31 17:39:24 +0700 | |
---|---|---|
committer | 2021-10-31 17:39:24 +0700 | |
commit | eed19dcf81334d0849744f1918ba880d5a7acc1c (patch) | |
tree | 56be76de94193b083692a5910d5a4d93e024e5b2 | |
parent | 48490c3d878da1e2760c7701e80586c3653d5bd8 (diff) | |
download | iced-eed19dcf81334d0849744f1918ba880d5a7acc1c.tar.gz iced-eed19dcf81334d0849744f1918ba880d5a7acc1c.tar.bz2 iced-eed19dcf81334d0849744f1918ba880d5a7acc1c.zip |
Reintroduce `Box` for `style_sheet` in `Scrollable`
-rw-r--r-- | examples/scrollable/src/main.rs | 2 | ||||
-rw-r--r-- | examples/scrollable/src/style.rs | 4 | ||||
-rw-r--r-- | examples/styling/src/main.rs | 6 | ||||
-rw-r--r-- | native/src/widget/scrollable.rs | 9 | ||||
-rw-r--r-- | style/src/scrollable.rs | 13 | ||||
-rw-r--r-- | web/src/widget/scrollable.rs | 12 |
6 files changed, 29 insertions, 17 deletions
diff --git a/examples/scrollable/src/main.rs b/examples/scrollable/src/main.rs index 272f0ce2..3416b83d 100644 --- a/examples/scrollable/src/main.rs +++ b/examples/scrollable/src/main.rs @@ -95,7 +95,7 @@ impl Sandbox for ScrollableDemo { .on_scroll(move |offset| { Message::Scrolled(i, offset) }) - .style(theme.clone().into()) + .style(*theme) .push(Text::new(variant.title)) .push( Button::new( diff --git a/examples/scrollable/src/style.rs b/examples/scrollable/src/style.rs index 3c8e5234..ec1f13db 100644 --- a/examples/scrollable/src/style.rs +++ b/examples/scrollable/src/style.rs @@ -34,11 +34,11 @@ impl<'a> From<Theme> for Box<dyn radio::StyleSheet + 'a> { } } -impl From<Theme> for &'static dyn scrollable::StyleSheet { +impl<'a> From<Theme> for Box<dyn scrollable::StyleSheet + 'a> { fn from(theme: Theme) -> Self { match theme { Theme::Light => Default::default(), - Theme::Dark => &dark::Scrollable, + Theme::Dark => dark::Scrollable.into(), } } } diff --git a/examples/styling/src/main.rs b/examples/styling/src/main.rs index 73f965d9..a0ba2607 100644 --- a/examples/styling/src/main.rs +++ b/examples/styling/src/main.rs @@ -98,7 +98,7 @@ impl Sandbox for Styling { let scrollable = Scrollable::new(&mut self.scroll) .width(Length::Fill) .height(Length::Units(100)) - .style(self.theme.into()) + .style(self.theme) .push(Text::new("Scroll me!")) .push(Space::with_height(Length::Units(800))) .push(Text::new("You did it!")); @@ -212,11 +212,11 @@ mod style { } } - impl From<Theme> for &'static dyn scrollable::StyleSheet { + impl<'a> From<Theme> for Box<dyn scrollable::StyleSheet + 'a> { fn from(theme: Theme) -> Self { match theme { Theme::Light => Default::default(), - Theme::Dark => &dark::Scrollable, + Theme::Dark => dark::Scrollable.into(), } } } diff --git a/native/src/widget/scrollable.rs b/native/src/widget/scrollable.rs index 781fe73e..05e9b347 100644 --- a/native/src/widget/scrollable.rs +++ b/native/src/widget/scrollable.rs @@ -27,7 +27,7 @@ pub struct Scrollable<'a, Message, Renderer> { scroller_width: u16, content: Column<'a, Message, Renderer>, on_scroll: Option<Box<dyn Fn(f32) -> Message>>, - style_sheet: &'a dyn StyleSheet, + style_sheet: Box<dyn StyleSheet + 'a>, } impl<'a, Message, Renderer: crate::Renderer> Scrollable<'a, Message, Renderer> { @@ -123,8 +123,11 @@ impl<'a, Message, Renderer: crate::Renderer> Scrollable<'a, Message, Renderer> { } /// Sets the style of the [`Scrollable`] . - pub fn style(mut self, style_sheet: &'a dyn StyleSheet) -> Self { - self.style_sheet = style_sheet; + pub fn style( + mut self, + style_sheet: impl Into<Box<dyn StyleSheet + 'a>>, + ) -> Self { + self.style_sheet = style_sheet.into(); self } diff --git a/style/src/scrollable.rs b/style/src/scrollable.rs index 741d9d39..9de72add 100644 --- a/style/src/scrollable.rs +++ b/style/src/scrollable.rs @@ -60,8 +60,17 @@ impl StyleSheet for Default { } } -impl std::default::Default for &'static dyn StyleSheet { +impl std::default::Default for Box<dyn StyleSheet> { fn default() -> Self { - &Default + 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) } } diff --git a/web/src/widget/scrollable.rs b/web/src/widget/scrollable.rs index 595eb26e..22cb61be 100644 --- a/web/src/widget/scrollable.rs +++ b/web/src/widget/scrollable.rs @@ -14,7 +14,7 @@ pub struct Scrollable<'a, Message> { max_height: u32, content: Column<'a, Message>, #[allow(dead_code)] - style_sheet: &'a dyn StyleSheet, + style_sheet: Box<dyn StyleSheet + 'a>, } impl<'a, Message> Scrollable<'a, Message> { @@ -78,11 +78,11 @@ impl<'a, Message> Scrollable<'a, Message> { } /// Sets the style of the [`Scrollable`] . - pub fn style<'b>(mut self, style_sheet: &'b dyn StyleSheet) -> Self - where - 'b: 'a, - { - self.style_sheet = style_sheet; + pub fn style( + mut self, + style_sheet: impl Into<Box<dyn StyleSheet + 'a>>, + ) -> Self { + self.style_sheet = style_sheet.into(); self } |