Reintroduce Box for style_sheet in Container

This commit is contained in:
Héctor Ramón Jiménez 2021-10-31 17:02:59 +07:00
parent fcc282bd76
commit 40a5de5811
No known key found for this signature in database
GPG key ID: 140CC052C94F138E
12 changed files with 51 additions and 30 deletions

View file

@ -150,7 +150,7 @@ impl Application for GameOfLife {
Container::new(content) Container::new(content)
.width(Length::Fill) .width(Length::Fill)
.height(Length::Fill) .height(Length::Fill)
.style(&style::Container) .style(style::Container)
.into() .into()
} }
} }

View file

@ -178,9 +178,9 @@ impl Application for Example {
.controls(pane.controls.view(id, total_panes, pane.is_pinned)) .controls(pane.controls.view(id, total_panes, pane.is_pinned))
.padding(10) .padding(10)
.style(if is_focused { .style(if is_focused {
&style::TitleBar::Focused style::TitleBar::Focused
} else { } else {
&style::TitleBar::Active style::TitleBar::Active
}); });
pane_grid::Content::new(pane.content.view( pane_grid::Content::new(pane.content.view(
@ -190,9 +190,9 @@ impl Application for Example {
)) ))
.title_bar(title_bar) .title_bar(title_bar)
.style(if is_focused { .style(if is_focused {
&style::Pane::Focused style::Pane::Focused
} else { } else {
&style::Pane::Active style::Pane::Active
}) })
}) })
.width(Length::Fill) .width(Length::Fill)

View file

@ -164,7 +164,7 @@ impl Sandbox for ScrollableDemo {
Container::new(scrollable) Container::new(scrollable)
.width(Length::Fill) .width(Length::Fill)
.height(Length::Fill) .height(Length::Fill)
.style(theme.clone().into()), .style(*theme),
) )
.push(ProgressBar::new( .push(ProgressBar::new(
0.0..=1.0, 0.0..=1.0,
@ -190,7 +190,7 @@ impl Sandbox for ScrollableDemo {
.height(Length::Fill) .height(Length::Fill)
.center_x() .center_x()
.center_y() .center_y()
.style(self.theme.into()) .style(self.theme)
.into() .into()
} }
} }

View file

@ -16,11 +16,11 @@ impl Default for Theme {
} }
} }
impl From<Theme> for &'static dyn container::StyleSheet { impl<'a> From<Theme> for Box<dyn container::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::Container, Theme::Dark => dark::Container.into(),
} }
} }
} }

View file

@ -149,7 +149,7 @@ impl Sandbox for Styling {
.height(Length::Fill) .height(Length::Fill)
.center_x() .center_x()
.center_y() .center_y()
.style(self.theme.into()) .style(self.theme)
.into() .into()
} }
} }
@ -176,11 +176,11 @@ mod style {
} }
} }
impl From<Theme> for &'static dyn container::StyleSheet { impl<'a> From<Theme> for Box<dyn container::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::Container, Theme::Dark => dark::Container.into(),
} }
} }
} }

View file

@ -115,7 +115,7 @@ fn tooltip<'a>(
) )
.gap(5) .gap(5)
.padding(10) .padding(10)
.style(&style::Tooltip) .style(style::Tooltip)
.into() .into()
} }

View file

@ -28,7 +28,7 @@ pub struct Container<'a, Message, Renderer> {
max_height: u32, max_height: u32,
horizontal_alignment: alignment::Horizontal, horizontal_alignment: alignment::Horizontal,
vertical_alignment: alignment::Vertical, vertical_alignment: alignment::Vertical,
style_sheet: &'a dyn StyleSheet, style_sheet: Box<dyn StyleSheet + 'a>,
content: Element<'a, Message, Renderer>, content: Element<'a, Message, Renderer>,
} }
@ -109,8 +109,11 @@ where
} }
/// Sets the style of the [`Container`]. /// Sets the style of the [`Container`].
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
} }
} }

View file

@ -14,7 +14,7 @@ use crate::{Clipboard, Element, Hasher, Layout, Point, Rectangle, Size};
pub struct Content<'a, Message, Renderer> { pub struct Content<'a, Message, Renderer> {
title_bar: Option<TitleBar<'a, Message, Renderer>>, title_bar: Option<TitleBar<'a, Message, Renderer>>,
body: Element<'a, Message, Renderer>, body: Element<'a, Message, Renderer>,
style_sheet: &'a dyn container::StyleSheet, style_sheet: Box<dyn container::StyleSheet + 'a>,
} }
impl<'a, Message, Renderer> Content<'a, Message, Renderer> impl<'a, Message, Renderer> Content<'a, Message, Renderer>
@ -40,8 +40,11 @@ where
} }
/// Sets the style of the [`Content`]. /// Sets the style of the [`Content`].
pub fn style(mut self, style_sheet: &'a dyn container::StyleSheet) -> Self { pub fn style(
self.style_sheet = style_sheet; mut self,
style_sheet: impl Into<Box<dyn container::StyleSheet + 'a>>,
) -> Self {
self.style_sheet = style_sheet.into();
self self
} }
} }

View file

@ -17,7 +17,7 @@ pub struct TitleBar<'a, Message, Renderer> {
controls: Option<Element<'a, Message, Renderer>>, controls: Option<Element<'a, Message, Renderer>>,
padding: Padding, padding: Padding,
always_show_controls: bool, always_show_controls: bool,
style_sheet: &'a dyn container::StyleSheet, style_sheet: Box<dyn container::StyleSheet + 'a>,
} }
impl<'a, Message, Renderer> TitleBar<'a, Message, Renderer> impl<'a, Message, Renderer> TitleBar<'a, Message, Renderer>
@ -54,8 +54,11 @@ where
} }
/// Sets the style of the [`TitleBar`]. /// Sets the style of the [`TitleBar`].
pub fn style(mut self, style: &'a dyn container::StyleSheet) -> Self { pub fn style(
self.style_sheet = style; mut self,
style: impl Into<Box<dyn container::StyleSheet + 'a>>,
) -> Self {
self.style_sheet = style.into();
self self
} }

View file

@ -20,7 +20,7 @@ pub struct Tooltip<'a, Message, Renderer: text::Renderer> {
content: Element<'a, Message, Renderer>, content: Element<'a, Message, Renderer>,
tooltip: Text<Renderer>, tooltip: Text<Renderer>,
position: Position, position: Position,
style_sheet: &'a dyn container::StyleSheet, style_sheet: Box<dyn container::StyleSheet + 'a>,
gap: u16, gap: u16,
padding: u16, padding: u16,
} }
@ -77,8 +77,11 @@ where
} }
/// Sets the style of the [`Tooltip`]. /// Sets the style of the [`Tooltip`].
pub fn style(mut self, style_sheet: &'a dyn container::StyleSheet) -> Self { pub fn style(
self.style_sheet = style_sheet; mut self,
style_sheet: impl Into<Box<dyn container::StyleSheet + 'a>>,
) -> Self {
self.style_sheet = style_sheet.into();
self self
} }
} }

View file

@ -43,8 +43,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)
} }
} }

View file

@ -19,7 +19,7 @@ pub struct Container<'a, Message> {
max_height: u32, max_height: u32,
horizontal_alignment: alignment::Horizontal, horizontal_alignment: alignment::Horizontal,
vertical_alignment: alignment::Vertical, vertical_alignment: alignment::Vertical,
style_sheet: &'a dyn StyleSheet, style_sheet: Box<dyn StyleSheet + 'a>,
content: Element<'a, Message>, content: Element<'a, Message>,
} }
@ -89,8 +89,8 @@ impl<'a, Message> Container<'a, Message> {
} }
/// Sets the style of the [`Container`]. /// Sets the style of the [`Container`].
pub fn style(mut self, style: &'a dyn StyleSheet) -> Self { pub fn style(mut self, style: impl Into<Box<dyn StyleSheet + 'a>>) -> Self {
self.style_sheet = style; self.style_sheet = style.into();
self self
} }
} }