summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector@hecrj.dev>2024-03-12 13:44:03 +0100
committerLibravatar Héctor Ramón Jiménez <hector@hecrj.dev>2024-03-12 13:44:03 +0100
commit66f81c3429c736c5ca17d022ed1d6cdcc15e4f94 (patch)
treed67ce6691961ea7be06ee7ddab811857f699f65c
parent71b9b3c3b1242dd571170fb0f8dd22760a1b4c53 (diff)
downloadiced-66f81c3429c736c5ca17d022ed1d6cdcc15e4f94.tar.gz
iced-66f81c3429c736c5ca17d022ed1d6cdcc15e4f94.tar.bz2
iced-66f81c3429c736c5ca17d022ed1d6cdcc15e4f94.zip
Use closures for `Rule::style`
-rw-r--r--widget/src/helpers.rs8
-rw-r--r--widget/src/rule.rs37
2 files changed, 23 insertions, 22 deletions
diff --git a/widget/src/helpers.rs b/widget/src/helpers.rs
index 91d5ee80..4bff0f16 100644
--- a/widget/src/helpers.rs
+++ b/widget/src/helpers.rs
@@ -315,9 +315,9 @@ pub fn vertical_space() -> Space {
/// Creates a horizontal [`Rule`] with the given height.
///
/// [`Rule`]: crate::Rule
-pub fn horizontal_rule<Theme>(height: impl Into<Pixels>) -> Rule<Theme>
+pub fn horizontal_rule<'a, Theme>(height: impl Into<Pixels>) -> Rule<'a, Theme>
where
- Theme: rule::DefaultStyle,
+ Theme: rule::DefaultStyle + 'a,
{
Rule::horizontal(height)
}
@@ -325,9 +325,9 @@ where
/// Creates a vertical [`Rule`] with the given width.
///
/// [`Rule`]: crate::Rule
-pub fn vertical_rule<Theme>(width: impl Into<Pixels>) -> Rule<Theme>
+pub fn vertical_rule<'a, Theme>(width: impl Into<Pixels>) -> Rule<'a, Theme>
where
- Theme: rule::DefaultStyle,
+ Theme: rule::DefaultStyle + 'a,
{
Rule::vertical(width)
}
diff --git a/widget/src/rule.rs b/widget/src/rule.rs
index 8580d4c7..9fa5f74f 100644
--- a/widget/src/rule.rs
+++ b/widget/src/rule.rs
@@ -10,48 +10,49 @@ use crate::core::{
/// Display a horizontal or vertical rule for dividing content.
#[allow(missing_debug_implementations)]
-pub struct Rule<Theme = crate::Theme> {
+pub struct Rule<'a, Theme = crate::Theme> {
width: Length,
height: Length,
is_horizontal: bool,
- style: Style<Theme>,
+ style: Style<'a, Theme>,
}
-impl<Theme> Rule<Theme> {
+impl<'a, Theme> Rule<'a, Theme> {
/// Creates a horizontal [`Rule`] with the given height.
pub fn horizontal(height: impl Into<Pixels>) -> Self
where
- Theme: DefaultStyle,
+ Theme: DefaultStyle + 'a,
{
Rule {
width: Length::Fill,
height: Length::Fixed(height.into().0),
is_horizontal: true,
- style: Theme::default_style(),
+ style: Box::new(Theme::default_style),
}
}
/// Creates a vertical [`Rule`] with the given width.
pub fn vertical(width: impl Into<Pixels>) -> Self
where
- Theme: DefaultStyle,
+ Theme: DefaultStyle + 'a,
{
Rule {
width: Length::Fixed(width.into().0),
height: Length::Fill,
is_horizontal: false,
- style: Theme::default_style(),
+ style: Box::new(Theme::default_style),
}
}
/// Sets the style of the [`Rule`].
- pub fn style(mut self, style: fn(&Theme) -> Appearance) -> Self {
- self.style = style;
+ pub fn style(mut self, style: impl Fn(&Theme) -> Appearance + 'a) -> Self {
+ self.style = Box::new(style);
self
}
}
-impl<Message, Theme, Renderer> Widget<Message, Theme, Renderer> for Rule<Theme>
+impl<'a, Message, Theme, Renderer> Widget<Message, Theme, Renderer>
+ for Rule<'a, Theme>
where
Renderer: crate::core::Renderer,
{
@@ -126,14 +127,14 @@ where
}
}
-impl<'a, Message, Theme, Renderer> From<Rule<Theme>>
+impl<'a, Message, Theme, Renderer> From<Rule<'a, Theme>>
for Element<'a, Message, Theme, Renderer>
where
Message: 'a,
Theme: 'a,
Renderer: 'a + crate::core::Renderer,
{
- fn from(rule: Rule<Theme>) -> Element<'a, Message, Theme, Renderer> {
+ fn from(rule: Rule<'a, Theme>) -> Element<'a, Message, Theme, Renderer> {
Element::new(rule)
}
}
@@ -216,23 +217,23 @@ impl FillMode {
}
/// The style of a [`Rule`].
-pub type Style<Theme> = fn(&Theme) -> Appearance;
+pub type Style<'a, Theme> = Box<dyn Fn(&Theme) -> Appearance + 'a>;
/// The default style of a [`Rule`].
pub trait DefaultStyle {
/// Returns the default style of a [`Rule`].
- fn default_style() -> Style<Self>;
+ fn default_style(&self) -> Appearance;
}
impl DefaultStyle for Theme {
- fn default_style() -> Style<Self> {
- default
+ fn default_style(&self) -> Appearance {
+ default(self)
}
}
impl DefaultStyle for Appearance {
- fn default_style() -> Style<Self> {
- |appearance| *appearance
+ fn default_style(&self) -> Appearance {
+ *self
}
}