summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--examples/scrollable/src/main.rs2
-rw-r--r--examples/scrollable/src/style.rs4
-rw-r--r--examples/styling/src/main.rs6
-rw-r--r--native/src/widget/scrollable.rs9
-rw-r--r--style/src/scrollable.rs13
-rw-r--r--web/src/widget/scrollable.rs12
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
}