Reintroduce Box for style_sheet in TextInput

This commit is contained in:
Héctor Ramón Jiménez 2021-10-31 17:45:57 +07:00
parent 0c76e0307f
commit 0d3c9ef7bd
No known key found for this signature in database
GPG key ID: 140CC052C94F138E
4 changed files with 25 additions and 10 deletions

View file

@ -77,7 +77,7 @@ impl Sandbox for Styling {
) )
.padding(10) .padding(10)
.size(20) .size(20)
.style(self.theme.into()); .style(self.theme);
let button = Button::new(&mut self.button, Text::new("Submit")) let button = Button::new(&mut self.button, Text::new("Submit"))
.padding(10) .padding(10)
@ -194,11 +194,11 @@ mod style {
} }
} }
impl From<Theme> for &'static dyn text_input::StyleSheet { impl<'a> From<Theme> for Box<dyn text_input::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::TextInput, Theme::Dark => dark::TextInput.into(),
} }
} }
} }

View file

@ -66,7 +66,7 @@ pub struct TextInput<'a, Message, Renderer: text::Renderer> {
size: Option<u16>, size: Option<u16>,
on_change: Box<dyn Fn(String) -> Message>, on_change: Box<dyn Fn(String) -> Message>,
on_submit: Option<Message>, on_submit: Option<Message>,
style_sheet: &'a dyn StyleSheet, style_sheet: Box<dyn StyleSheet + 'a>,
} }
impl<'a, Message, Renderer> TextInput<'a, Message, Renderer> impl<'a, Message, Renderer> TextInput<'a, Message, Renderer>
@ -152,7 +152,10 @@ where
} }
/// Sets the style of the [`TextInput`]. /// Sets the style of the [`TextInput`].
pub fn style(mut self, style_sheet: &'a dyn StyleSheet) -> Self { pub fn style(
mut self,
style_sheet: impl Into<Box<dyn StyleSheet + 'a>>,
) -> Self {
self.style_sheet = style_sheet.into(); self.style_sheet = style_sheet.into();
self self
} }

View file

@ -73,8 +73,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

@ -39,7 +39,7 @@ pub struct TextInput<'a, Message> {
size: Option<u16>, size: Option<u16>,
on_change: Rc<Box<dyn Fn(String) -> Message>>, on_change: Rc<Box<dyn Fn(String) -> Message>>,
on_submit: Option<Message>, on_submit: Option<Message>,
style_sheet: &'a dyn StyleSheet, style_sheet: Box<dyn StyleSheet + 'a>,
} }
impl<'a, Message> TextInput<'a, Message> { impl<'a, Message> TextInput<'a, Message> {
@ -112,8 +112,11 @@ impl<'a, Message> TextInput<'a, Message> {
} }
/// Sets the style of the [`TextInput`]. /// Sets the style of the [`TextInput`].
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
} }
} }