summaryrefslogtreecommitdiffstats
path: root/widget/src/helpers.rs
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector@hecrj.dev>2024-03-06 20:30:58 +0100
committerLibravatar Héctor Ramón Jiménez <hector@hecrj.dev>2024-03-06 20:30:58 +0100
commit34e7c6593a9e0f56cee5db18b7258717cf6bc11b (patch)
tree7c65a58e9052f2f95a0025355679b13c7002eeab /widget/src/helpers.rs
parent8a63774b24488f71147a728123551ae72c080d14 (diff)
downloadiced-34e7c6593a9e0f56cee5db18b7258717cf6bc11b.tar.gz
iced-34e7c6593a9e0f56cee5db18b7258717cf6bc11b.tar.bz2
iced-34e7c6593a9e0f56cee5db18b7258717cf6bc11b.zip
Use `Style` struct pattern instead of trait for all widgets
Diffstat (limited to 'widget/src/helpers.rs')
-rw-r--r--widget/src/helpers.rs51
1 files changed, 28 insertions, 23 deletions
diff --git a/widget/src/helpers.rs b/widget/src/helpers.rs
index f63306c4..fdc9462d 100644
--- a/widget/src/helpers.rs
+++ b/widget/src/helpers.rs
@@ -14,7 +14,7 @@ use crate::rule::{self, Rule};
use crate::runtime::Command;
use crate::scrollable::{self, Scrollable};
use crate::slider::{self, Slider};
-use crate::text::{self, Text};
+use crate::text::Text;
use crate::text_editor::{self, TextEditor};
use crate::text_input::{self, TextInput};
use crate::toggler::{self, Toggler};
@@ -58,8 +58,8 @@ pub fn container<'a, Message, Theme, Renderer>(
content: impl Into<Element<'a, Message, Theme, Renderer>>,
) -> Container<'a, Message, Theme, Renderer>
where
- Theme: container::Style,
Renderer: core::Renderer,
+ container::Style<Theme>: Default,
{
Container::new(content)
}
@@ -104,8 +104,8 @@ pub fn scrollable<'a, Message, Theme, Renderer>(
content: impl Into<Element<'a, Message, Theme, Renderer>>,
) -> Scrollable<'a, Message, Theme, Renderer>
where
- Theme: scrollable::Style,
Renderer: core::Renderer,
+ scrollable::Style<Theme>: Default,
{
Scrollable::new(content)
}
@@ -118,7 +118,7 @@ pub fn button<'a, Message, Theme, Renderer>(
) -> Button<'a, Message, Theme, Renderer>
where
Renderer: core::Renderer,
- Theme: button::Style,
+ button::Style<Theme>: Default,
{
Button::new(content)
}
@@ -134,8 +134,8 @@ pub fn tooltip<'a, Message, Theme, Renderer>(
position: tooltip::Position,
) -> crate::Tooltip<'a, Message, Theme, Renderer>
where
- Theme: container::Style + text::StyleSheet,
Renderer: core::text::Renderer,
+ container::Style<Theme>: Default,
{
Tooltip::new(content, tooltip, position)
}
@@ -147,7 +147,6 @@ pub fn text<'a, Theme, Renderer>(
text: impl ToString,
) -> Text<'a, Theme, Renderer>
where
- Theme: text::StyleSheet,
Renderer: core::text::Renderer,
{
Text::new(text.to_string())
@@ -161,8 +160,8 @@ pub fn checkbox<'a, Message, Theme, Renderer>(
is_checked: bool,
) -> Checkbox<'a, Message, Theme, Renderer>
where
- Theme: checkbox::Style,
Renderer: core::text::Renderer,
+ checkbox::Style<Theme>: Default,
{
Checkbox::new(label, is_checked)
}
@@ -178,9 +177,9 @@ pub fn radio<Message, Theme, Renderer, V>(
) -> Radio<Message, Theme, Renderer>
where
Message: Clone,
- Theme: radio::Style,
Renderer: core::text::Renderer,
V: Copy + Eq,
+ radio::Style<Theme>: Default,
{
Radio::new(label, value, selected, on_click)
}
@@ -195,7 +194,7 @@ pub fn toggler<'a, Message, Theme, Renderer>(
) -> Toggler<'a, Message, Theme, Renderer>
where
Renderer: core::text::Renderer,
- Theme: toggler::Style,
+ toggler::Style<Theme>: Default,
{
Toggler::new(label, is_checked, f)
}
@@ -209,8 +208,8 @@ pub fn text_input<'a, Message, Theme, Renderer>(
) -> TextInput<'a, Message, Theme, Renderer>
where
Message: Clone,
- Theme: text_input::Style,
Renderer: core::text::Renderer,
+ text_input::Style<Theme>: Default,
{
TextInput::new(placeholder, value)
}
@@ -223,8 +222,8 @@ pub fn text_editor<Message, Theme, Renderer>(
) -> TextEditor<'_, core::text::highlighter::PlainText, Message, Theme, Renderer>
where
Message: Clone,
- Theme: text_editor::Style,
Renderer: core::text::Renderer,
+ text_editor::Style<Theme>: Default,
{
TextEditor::new(content)
}
@@ -240,7 +239,7 @@ pub fn slider<'a, T, Message, Theme>(
where
T: Copy + From<u8> + std::cmp::PartialOrd,
Message: Clone,
- Theme: slider::Style,
+ slider::Style<Theme>: Default,
{
Slider::new(range, value, on_change)
}
@@ -256,7 +255,7 @@ pub fn vertical_slider<'a, T, Message, Theme>(
where
T: Copy + From<u8> + std::cmp::PartialOrd,
Message: Clone,
- Theme: vertical_slider::Style,
+ vertical_slider::Style<Theme>: Default,
{
VerticalSlider::new(range, value, on_change)
}
@@ -291,7 +290,6 @@ pub fn combo_box<'a, T, Message, Theme, Renderer>(
) -> ComboBox<'a, T, Message, Theme, Renderer>
where
T: std::fmt::Display + Clone,
- Theme: text_input::Style,
Renderer: core::text::Renderer,
combo_box::Style<Theme>: Default,
{
@@ -319,7 +317,7 @@ pub fn vertical_space() -> Space {
/// [`Rule`]: crate::Rule
pub fn horizontal_rule<Theme>(height: impl Into<Pixels>) -> Rule<Theme>
where
- Theme: rule::Style,
+ rule::Style<Theme>: Default,
{
Rule::horizontal(height)
}
@@ -329,7 +327,7 @@ where
/// [`Rule`]: crate::Rule
pub fn vertical_rule<Theme>(width: impl Into<Pixels>) -> Rule<Theme>
where
- Theme: rule::Style,
+ rule::Style<Theme>: Default,
{
Rule::vertical(width)
}
@@ -346,7 +344,7 @@ pub fn progress_bar<Theme>(
value: f32,
) -> ProgressBar<Theme>
where
- Theme: progress_bar::Style,
+ progress_bar::Style<Theme>: Default,
{
ProgressBar::new(range, value)
}
@@ -392,7 +390,7 @@ where
#[cfg(feature = "qr_code")]
pub fn qr_code<Theme>(data: &crate::qr_code::Data) -> crate::QRCode<'_, Theme>
where
- Theme: crate::qr_code::Style,
+ crate::qr_code::Style<Theme>: Default,
{
crate::QRCode::new(data)
}
@@ -435,13 +433,20 @@ where
}
/// A widget that applies any `Theme` to its contents.
-pub fn themer<'a, Message, OldTheme, NewTheme, F, Renderer>(
- to_theme: F,
+pub fn themer<'a, Message, OldTheme, NewTheme, Renderer>(
+ new_theme: NewTheme,
content: impl Into<Element<'a, Message, NewTheme, Renderer>>,
-) -> Themer<'a, Message, OldTheme, NewTheme, F, Renderer>
+) -> Themer<
+ 'a,
+ Message,
+ OldTheme,
+ NewTheme,
+ impl Fn(&OldTheme) -> NewTheme,
+ Renderer,
+>
where
- F: Fn(&OldTheme) -> NewTheme,
Renderer: core::Renderer,
+ NewTheme: Clone,
{
- Themer::new(to_theme, content)
+ Themer::new(move |_| new_theme.clone(), content)
}