Reintroduce Box for style_sheet in Checkbox

This commit is contained in:
Héctor Ramón Jiménez 2021-10-31 16:58:02 +07:00
parent d36ce33a95
commit fcc282bd76
No known key found for this signature in database
GPG key ID: 140CC052C94F138E
4 changed files with 26 additions and 11 deletions

View file

@ -108,7 +108,7 @@ impl Sandbox for Styling {
"Check me!",
Message::CheckboxToggled,
)
.style(self.theme.into());
.style(self.theme);
let toggler = Toggler::new(
self.toggler_value,
@ -239,11 +239,11 @@ mod style {
}
}
impl From<Theme> for &'static dyn checkbox::StyleSheet {
impl<'a> From<Theme> for Box<dyn checkbox::StyleSheet + 'a> {
fn from(theme: Theme) -> Self {
match theme {
Theme::Light => Default::default(),
Theme::Dark => &dark::Checkbox,
Theme::Dark => dark::Checkbox.into(),
}
}
}

View file

@ -44,7 +44,7 @@ pub struct Checkbox<'a, Message, Renderer: text::Renderer> {
text_size: Option<u16>,
font: Renderer::Font,
text_color: Option<Color>,
style_sheet: &'a dyn StyleSheet,
style_sheet: Box<dyn StyleSheet + 'a>,
}
impl<'a, Message, Renderer: text::Renderer> Checkbox<'a, Message, Renderer> {
@ -119,8 +119,11 @@ impl<'a, Message, Renderer: text::Renderer> Checkbox<'a, Message, Renderer> {
}
/// Sets the style of the [`Checkbox`].
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
}
}

View file

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

View file

@ -31,7 +31,7 @@ pub struct Checkbox<'a, Message> {
id: Option<String>,
width: Length,
#[allow(dead_code)]
style_sheet: &'a dyn StyleSheet,
style_sheet: Box<dyn StyleSheet + 'a>,
}
impl<'a, Message> Checkbox<'a, Message> {
@ -64,8 +64,11 @@ impl<'a, Message> Checkbox<'a, Message> {
}
/// Sets the style of the [`Checkbox`].
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
}