Reintroduce Box for style_sheet in Scrollable
This commit is contained in:
parent
48490c3d87
commit
eed19dcf81
6 changed files with 29 additions and 17 deletions
|
|
@ -95,7 +95,7 @@ impl Sandbox for ScrollableDemo {
|
||||||
.on_scroll(move |offset| {
|
.on_scroll(move |offset| {
|
||||||
Message::Scrolled(i, offset)
|
Message::Scrolled(i, offset)
|
||||||
})
|
})
|
||||||
.style(theme.clone().into())
|
.style(*theme)
|
||||||
.push(Text::new(variant.title))
|
.push(Text::new(variant.title))
|
||||||
.push(
|
.push(
|
||||||
Button::new(
|
Button::new(
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
fn from(theme: Theme) -> Self {
|
||||||
match theme {
|
match theme {
|
||||||
Theme::Light => Default::default(),
|
Theme::Light => Default::default(),
|
||||||
Theme::Dark => &dark::Scrollable,
|
Theme::Dark => dark::Scrollable.into(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -98,7 +98,7 @@ impl Sandbox for Styling {
|
||||||
let scrollable = Scrollable::new(&mut self.scroll)
|
let scrollable = Scrollable::new(&mut self.scroll)
|
||||||
.width(Length::Fill)
|
.width(Length::Fill)
|
||||||
.height(Length::Units(100))
|
.height(Length::Units(100))
|
||||||
.style(self.theme.into())
|
.style(self.theme)
|
||||||
.push(Text::new("Scroll me!"))
|
.push(Text::new("Scroll me!"))
|
||||||
.push(Space::with_height(Length::Units(800)))
|
.push(Space::with_height(Length::Units(800)))
|
||||||
.push(Text::new("You did it!"));
|
.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 {
|
fn from(theme: Theme) -> Self {
|
||||||
match theme {
|
match theme {
|
||||||
Theme::Light => Default::default(),
|
Theme::Light => Default::default(),
|
||||||
Theme::Dark => &dark::Scrollable,
|
Theme::Dark => dark::Scrollable.into(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ pub struct Scrollable<'a, Message, Renderer> {
|
||||||
scroller_width: u16,
|
scroller_width: u16,
|
||||||
content: Column<'a, Message, Renderer>,
|
content: Column<'a, Message, Renderer>,
|
||||||
on_scroll: Option<Box<dyn Fn(f32) -> Message>>,
|
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> {
|
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`] .
|
/// Sets the style of the [`Scrollable`] .
|
||||||
pub fn style(mut self, style_sheet: &'a dyn StyleSheet) -> Self {
|
pub fn style(
|
||||||
self.style_sheet = style_sheet;
|
mut self,
|
||||||
|
style_sheet: impl Into<Box<dyn StyleSheet + 'a>>,
|
||||||
|
) -> Self {
|
||||||
|
self.style_sheet = style_sheet.into();
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@ pub struct Scrollable<'a, Message> {
|
||||||
max_height: u32,
|
max_height: u32,
|
||||||
content: Column<'a, Message>,
|
content: Column<'a, Message>,
|
||||||
#[allow(dead_code)]
|
#[allow(dead_code)]
|
||||||
style_sheet: &'a dyn StyleSheet,
|
style_sheet: Box<dyn StyleSheet + 'a>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, Message> Scrollable<'a, Message> {
|
impl<'a, Message> Scrollable<'a, Message> {
|
||||||
|
|
@ -78,11 +78,11 @@ impl<'a, Message> Scrollable<'a, Message> {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Sets the style of the [`Scrollable`] .
|
/// Sets the style of the [`Scrollable`] .
|
||||||
pub fn style<'b>(mut self, style_sheet: &'b dyn StyleSheet) -> Self
|
pub fn style(
|
||||||
where
|
mut self,
|
||||||
'b: 'a,
|
style_sheet: impl Into<Box<dyn StyleSheet + 'a>>,
|
||||||
{
|
) -> Self {
|
||||||
self.style_sheet = style_sheet;
|
self.style_sheet = style_sheet.into();
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue