summaryrefslogtreecommitdiffstats
path: root/pure/src/widget
diff options
context:
space:
mode:
Diffstat (limited to 'pure/src/widget')
-rw-r--r--pure/src/widget/button.rs31
-rw-r--r--pure/src/widget/checkbox.rs7
-rw-r--r--pure/src/widget/column.rs2
-rw-r--r--pure/src/widget/container.rs25
-rw-r--r--pure/src/widget/image.rs2
-rw-r--r--pure/src/widget/pane_grid.rs28
-rw-r--r--pure/src/widget/pane_grid/content.rs26
-rw-r--r--pure/src/widget/pane_grid/title_bar.rs23
-rw-r--r--pure/src/widget/pick_list.rs29
-rw-r--r--pure/src/widget/progress_bar.rs8
-rw-r--r--pure/src/widget/radio.rs12
-rw-r--r--pure/src/widget/row.rs2
-rw-r--r--pure/src/widget/rule.rs9
-rw-r--r--pure/src/widget/scrollable.rs31
-rw-r--r--pure/src/widget/slider.rs39
-rw-r--r--pure/src/widget/space.rs2
-rw-r--r--pure/src/widget/svg.rs2
-rw-r--r--pure/src/widget/text.rs9
-rw-r--r--pure/src/widget/text_input.rs31
-rw-r--r--pure/src/widget/toggler.rs7
-rw-r--r--pure/src/widget/tooltip.rs30
-rw-r--r--pure/src/widget/tree.rs13
22 files changed, 266 insertions, 102 deletions
diff --git a/pure/src/widget/button.rs b/pure/src/widget/button.rs
index 456c2509..dd7688e2 100644
--- a/pure/src/widget/button.rs
+++ b/pure/src/widget/button.rs
@@ -12,7 +12,7 @@ use iced_native::{
Clipboard, Layout, Length, Padding, Point, Rectangle, Shell,
};
-pub use iced_style::button::{Style, StyleSheet};
+pub use iced_style::button::{Appearance, StyleSheet};
use button::State;
@@ -50,25 +50,33 @@ use button::State;
/// disabled_button().on_press(Message::ButtonPressed)
/// }
/// ```
-pub struct Button<'a, Message, Renderer> {
+pub struct Button<'a, Message, Renderer>
+where
+ Renderer: iced_native::Renderer,
+ Renderer::Theme: StyleSheet,
+{
content: Element<'a, Message, Renderer>,
on_press: Option<Message>,
- style_sheet: Box<dyn StyleSheet + 'a>,
width: Length,
height: Length,
padding: Padding,
+ style: <Renderer::Theme as StyleSheet>::Style,
}
-impl<'a, Message, Renderer> Button<'a, Message, Renderer> {
+impl<'a, Message, Renderer> Button<'a, Message, Renderer>
+where
+ Renderer: iced_native::Renderer,
+ Renderer::Theme: StyleSheet,
+{
/// Creates a new [`Button`] with the given content.
pub fn new(content: impl Into<Element<'a, Message, Renderer>>) -> Self {
Button {
content: content.into(),
on_press: None,
- style_sheet: Default::default(),
width: Length::Shrink,
height: Length::Shrink,
padding: Padding::new(5),
+ style: <Renderer::Theme as StyleSheet>::Style::default(),
}
}
@@ -98,12 +106,12 @@ impl<'a, Message, Renderer> Button<'a, Message, Renderer> {
self
}
- /// Sets the style of the [`Button`].
+ /// Sets the style variant of this [`Button`].
pub fn style(
mut self,
- style_sheet: impl Into<Box<dyn StyleSheet + 'a>>,
+ style: <Renderer::Theme as StyleSheet>::Style,
) -> Self {
- self.style_sheet = style_sheet.into();
+ self.style = style;
self
}
}
@@ -113,6 +121,7 @@ impl<'a, Message, Renderer> Widget<Message, Renderer>
where
Message: 'a + Clone,
Renderer: 'a + iced_native::Renderer,
+ Renderer::Theme: StyleSheet,
{
fn tag(&self) -> tree::Tag {
tree::Tag::of::<State>()
@@ -191,6 +200,7 @@ where
&self,
tree: &Tree,
renderer: &mut Renderer,
+ theme: &Renderer::Theme,
_style: &renderer::Style,
layout: Layout<'_>,
cursor_position: Point,
@@ -204,13 +214,15 @@ where
bounds,
cursor_position,
self.on_press.is_some(),
- self.style_sheet.as_ref(),
+ theme,
+ self.style,
|| tree.state.downcast_ref::<State>(),
);
self.content.as_widget().draw(
&tree.children[0],
renderer,
+ theme,
&renderer::Style {
text_color: styling.text_color,
},
@@ -254,6 +266,7 @@ impl<'a, Message, Renderer> Into<Element<'a, Message, Renderer>>
where
Message: Clone + 'a,
Renderer: iced_native::Renderer + 'a,
+ Renderer::Theme: StyleSheet,
{
fn into(self) -> Element<'a, Message, Renderer> {
Element::new(self)
diff --git a/pure/src/widget/checkbox.rs b/pure/src/widget/checkbox.rs
index 98f55a56..9d6a78ce 100644
--- a/pure/src/widget/checkbox.rs
+++ b/pure/src/widget/checkbox.rs
@@ -7,14 +7,16 @@ use iced_native::layout::{self, Layout};
use iced_native::mouse;
use iced_native::renderer;
use iced_native::text;
+use iced_native::widget;
use iced_native::{Clipboard, Length, Point, Rectangle, Shell};
-pub use iced_native::widget::checkbox::{Checkbox, Style, StyleSheet};
+pub use iced_native::widget::checkbox::{Appearance, Checkbox, StyleSheet};
impl<'a, Message, Renderer> Widget<Message, Renderer>
for Checkbox<'a, Message, Renderer>
where
Renderer: text::Renderer,
+ Renderer::Theme: StyleSheet + widget::text::StyleSheet,
{
fn width(&self) -> Length {
<Self as iced_native::Widget<Message, Renderer>>::width(self)
@@ -59,6 +61,7 @@ where
&self,
_tree: &Tree,
renderer: &mut Renderer,
+ theme: &Renderer::Theme,
style: &renderer::Style,
layout: Layout<'_>,
cursor_position: Point,
@@ -67,6 +70,7 @@ where
<Self as iced_native::Widget<Message, Renderer>>::draw(
self,
renderer,
+ theme,
style,
layout,
cursor_position,
@@ -97,6 +101,7 @@ impl<'a, Message, Renderer> Into<Element<'a, Message, Renderer>>
where
Message: 'a,
Renderer: text::Renderer + 'a,
+ Renderer::Theme: StyleSheet + widget::text::StyleSheet,
{
fn into(self) -> Element<'a, Message, Renderer> {
Element::new(self)
diff --git a/pure/src/widget/column.rs b/pure/src/widget/column.rs
index 7256f474..74d789a1 100644
--- a/pure/src/widget/column.rs
+++ b/pure/src/widget/column.rs
@@ -194,6 +194,7 @@ where
&self,
tree: &Tree,
renderer: &mut Renderer,
+ theme: &Renderer::Theme,
style: &renderer::Style,
layout: Layout<'_>,
cursor_position: Point,
@@ -208,6 +209,7 @@ where
child.as_widget().draw(
state,
renderer,
+ theme,
style,
layout,
cursor_position,
diff --git a/pure/src/widget/container.rs b/pure/src/widget/container.rs
index 91db1f3f..8ea9ca72 100644
--- a/pure/src/widget/container.rs
+++ b/pure/src/widget/container.rs
@@ -15,13 +15,17 @@ use iced_native::{
use std::u32;
-pub use iced_style::container::{Style, StyleSheet};
+pub use iced_style::container::{Appearance, StyleSheet};
/// An element decorating some content.
///
/// It is normally used for alignment purposes.
#[allow(missing_debug_implementations)]
-pub struct Container<'a, Message, Renderer> {
+pub struct Container<'a, Message, Renderer>
+where
+ Renderer: iced_native::Renderer,
+ Renderer::Theme: container::StyleSheet,
+{
padding: Padding,
width: Length,
height: Length,
@@ -29,13 +33,14 @@ pub struct Container<'a, Message, Renderer> {
max_height: u32,
horizontal_alignment: alignment::Horizontal,
vertical_alignment: alignment::Vertical,
- style_sheet: Box<dyn StyleSheet + 'a>,
+ style: <Renderer::Theme as StyleSheet>::Style,
content: Element<'a, Message, Renderer>,
}
impl<'a, Message, Renderer> Container<'a, Message, Renderer>
where
Renderer: iced_native::Renderer,
+ Renderer::Theme: container::StyleSheet,
{
/// Creates an empty [`Container`].
pub fn new<T>(content: T) -> Self
@@ -50,7 +55,7 @@ where
max_height: u32::MAX,
horizontal_alignment: alignment::Horizontal::Left,
vertical_alignment: alignment::Vertical::Top,
- style_sheet: Default::default(),
+ style: Default::default(),
content: content.into(),
}
}
@@ -112,9 +117,9 @@ where
/// Sets the style of the [`Container`].
pub fn style(
mut self,
- style_sheet: impl Into<Box<dyn StyleSheet + 'a>>,
+ style: impl Into<<Renderer::Theme as StyleSheet>::Style>,
) -> Self {
- self.style_sheet = style_sheet.into();
+ self.style = style.into();
self
}
}
@@ -123,6 +128,7 @@ impl<'a, Message, Renderer> Widget<Message, Renderer>
for Container<'a, Message, Renderer>
where
Renderer: iced_native::Renderer,
+ Renderer::Theme: StyleSheet,
{
fn children(&self) -> Vec<Tree> {
vec![Tree::new(&self.content)]
@@ -201,18 +207,20 @@ where
&self,
tree: &Tree,
renderer: &mut Renderer,
+ theme: &Renderer::Theme,
renderer_style: &renderer::Style,
layout: Layout<'_>,
cursor_position: Point,
viewport: &Rectangle,
) {
- let style = self.style_sheet.style();
+ let style = theme.appearance(self.style);
container::draw_background(renderer, &style, layout.bounds());
self.content.as_widget().draw(
&tree.children[0],
renderer,
+ theme,
&renderer::Style {
text_color: style
.text_color
@@ -241,8 +249,9 @@ where
impl<'a, Message, Renderer> From<Container<'a, Message, Renderer>>
for Element<'a, Message, Renderer>
where
- Renderer: 'a + iced_native::Renderer,
Message: 'a,
+ Renderer: 'a + iced_native::Renderer,
+ Renderer::Theme: StyleSheet,
{
fn from(
column: Container<'a, Message, Renderer>,
diff --git a/pure/src/widget/image.rs b/pure/src/widget/image.rs
index ef764ec2..c42113dc 100644
--- a/pure/src/widget/image.rs
+++ b/pure/src/widget/image.rs
@@ -38,6 +38,7 @@ where
&self,
_tree: &Tree,
renderer: &mut Renderer,
+ theme: &Renderer::Theme,
style: &renderer::Style,
layout: Layout<'_>,
cursor_position: Point,
@@ -46,6 +47,7 @@ where
<Self as iced_native::Widget<Message, Renderer>>::draw(
self,
renderer,
+ theme,
style,
layout,
cursor_position,
diff --git a/pure/src/widget/pane_grid.rs b/pure/src/widget/pane_grid.rs
index c532a6de..69150aa8 100644
--- a/pure/src/widget/pane_grid.rs
+++ b/pure/src/widget/pane_grid.rs
@@ -19,6 +19,7 @@ pub use iced_native::widget::pane_grid::{
};
use crate::overlay;
+use crate::widget::container;
use crate::widget::tree::{self, Tree};
use crate::{Element, Widget};
@@ -83,7 +84,11 @@ pub use iced_style::pane_grid::{Line, StyleSheet};
/// .on_resize(10, Message::PaneResized);
/// ```
#[allow(missing_debug_implementations)]
-pub struct PaneGrid<'a, Message, Renderer> {
+pub struct PaneGrid<'a, Message, Renderer>
+where
+ Renderer: iced_native::Renderer,
+ Renderer::Theme: StyleSheet + container::StyleSheet,
+{
state: &'a state::Internal,
elements: Vec<(Pane, Content<'a, Message, Renderer>)>,
width: Length,
@@ -92,12 +97,13 @@ pub struct PaneGrid<'a, Message, Renderer> {
on_click: Option<Box<dyn Fn(Pane) -> Message + 'a>>,
on_drag: Option<Box<dyn Fn(DragEvent) -> Message + 'a>>,
on_resize: Option<(u16, Box<dyn Fn(ResizeEvent) -> Message + 'a>)>,
- style_sheet: Box<dyn StyleSheet + 'a>,
+ style: <Renderer::Theme as StyleSheet>::Style,
}
impl<'a, Message, Renderer> PaneGrid<'a, Message, Renderer>
where
Renderer: iced_native::Renderer,
+ Renderer::Theme: StyleSheet + container::StyleSheet,
{
/// Creates a [`PaneGrid`] with the given [`State`] and view function.
///
@@ -124,7 +130,7 @@ where
on_click: None,
on_drag: None,
on_resize: None,
- style_sheet: Default::default(),
+ style: Default::default(),
}
}
@@ -184,8 +190,11 @@ where
}
/// Sets the style of the [`PaneGrid`].
- pub fn style(mut self, style: impl Into<Box<dyn StyleSheet + 'a>>) -> Self {
- self.style_sheet = style.into();
+ pub fn style(
+ mut self,
+ style: impl Into<<Renderer::Theme as StyleSheet>::Style>,
+ ) -> Self {
+ self.style = style.into();
self
}
}
@@ -194,6 +203,7 @@ impl<'a, Message, Renderer> Widget<Message, Renderer>
for PaneGrid<'a, Message, Renderer>
where
Renderer: iced_native::Renderer,
+ Renderer::Theme: StyleSheet + container::StyleSheet,
{
fn tag(&self) -> tree::Tag {
tree::Tag::of::<state::Action>()
@@ -331,6 +341,7 @@ where
&self,
tree: &Tree,
renderer: &mut Renderer,
+ theme: &Renderer::Theme,
style: &renderer::Style,
layout: Layout<'_>,
cursor_position: Point,
@@ -342,11 +353,12 @@ where
layout,
cursor_position,
renderer,
+ theme,
style,
viewport,
self.spacing,
self.on_resize.as_ref().map(|(leeway, _)| *leeway),
- self.style_sheet.as_ref(),
+ self.style,
self.elements
.iter()
.zip(&tree.children)
@@ -360,6 +372,7 @@ where
content.draw(
tree,
renderer,
+ theme,
style,
layout,
cursor_position,
@@ -389,8 +402,9 @@ where
impl<'a, Message, Renderer> From<PaneGrid<'a, Message, Renderer>>
for Element<'a, Message, Renderer>
where
- Renderer: 'a + iced_native::Renderer,
Message: 'a,
+ Renderer: 'a + iced_native::Renderer,
+ Renderer::Theme: StyleSheet + container::StyleSheet,
{
fn from(
pane_grid: PaneGrid<'a, Message, Renderer>,
diff --git a/pure/src/widget/pane_grid/content.rs b/pure/src/widget/pane_grid/content.rs
index e66ac40b..9c2a0f4a 100644
--- a/pure/src/widget/pane_grid/content.rs
+++ b/pure/src/widget/pane_grid/content.rs
@@ -15,22 +15,27 @@ use iced_native::{Clipboard, Layout, Point, Rectangle, Shell, Size};
///
/// [`Pane`]: crate::widget::pane_grid::Pane
#[allow(missing_debug_implementations)]
-pub struct Content<'a, Message, Renderer> {
+pub struct Content<'a, Message, Renderer>
+where
+ Renderer: iced_native::Renderer,
+ Renderer::Theme: container::StyleSheet,
+{
title_bar: Option<TitleBar<'a, Message, Renderer>>,
body: Element<'a, Message, Renderer>,
- style_sheet: Box<dyn container::StyleSheet + 'a>,
+ style: <Renderer::Theme as container::StyleSheet>::Style,
}
impl<'a, Message, Renderer> Content<'a, Message, Renderer>
where
Renderer: iced_native::Renderer,
+ Renderer::Theme: container::StyleSheet,
{
/// Creates a new [`Content`] with the provided body.
pub fn new(body: impl Into<Element<'a, Message, Renderer>>) -> Self {
Self {
title_bar: None,
body: body.into(),
- style_sheet: Default::default(),
+ style: Default::default(),
}
}
@@ -46,9 +51,9 @@ where
/// Sets the style of the [`Content`].
pub fn style(
mut self,
- style_sheet: impl Into<Box<dyn container::StyleSheet + 'a>>,
+ style: impl Into<<Renderer::Theme as container::StyleSheet>::Style>,
) -> Self {
- self.style_sheet = style_sheet.into();
+ self.style = style.into();
self
}
}
@@ -56,6 +61,7 @@ where
impl<'a, Message, Renderer> Content<'a, Message, Renderer>
where
Renderer: iced_native::Renderer,
+ Renderer::Theme: container::StyleSheet,
{
pub(super) fn state(&self) -> Tree {
let children = if let Some(title_bar) = self.title_bar.as_ref() {
@@ -89,15 +95,18 @@ where
&self,
tree: &Tree,
renderer: &mut Renderer,
+ theme: &Renderer::Theme,
style: &renderer::Style,
layout: Layout<'_>,
cursor_position: Point,
viewport: &Rectangle,
) {
+ use container::StyleSheet;
+
let bounds = layout.bounds();
{
- let style = self.style_sheet.style();
+ let style = theme.appearance(self.style);
container::draw_background(renderer, &style, bounds);
}
@@ -112,6 +121,7 @@ where
title_bar.draw(
&tree.children[1],
renderer,
+ theme,
style,
title_bar_layout,
cursor_position,
@@ -122,6 +132,7 @@ where
self.body.as_widget().draw(
&tree.children[0],
renderer,
+ theme,
style,
body_layout,
cursor_position,
@@ -131,6 +142,7 @@ where
self.body.as_widget().draw(
&tree.children[0],
renderer,
+ theme,
style,
layout,
cursor_position,
@@ -303,6 +315,7 @@ where
impl<'a, Message, Renderer> Draggable for &Content<'a, Message, Renderer>
where
Renderer: iced_native::Renderer,
+ Renderer::Theme: container::StyleSheet,
{
fn can_be_dragged_at(
&self,
@@ -324,6 +337,7 @@ impl<'a, T, Message, Renderer> From<T> for Content<'a, Message, Renderer>
where
T: Into<Element<'a, Message, Renderer>>,
Renderer: iced_native::Renderer,
+ Renderer::Theme: container::StyleSheet,
{
fn from(element: T) -> Self {
Self::new(element)
diff --git a/pure/src/widget/pane_grid/title_bar.rs b/pure/src/widget/pane_grid/title_bar.rs
index af71dc43..de9591a2 100644
--- a/pure/src/widget/pane_grid/title_bar.rs
+++ b/pure/src/widget/pane_grid/title_bar.rs
@@ -13,17 +13,22 @@ use iced_native::{Clipboard, Layout, Padding, Point, Rectangle, Shell, Size};
///
/// [`Pane`]: crate::widget::pane_grid::Pane
#[allow(missing_debug_implementations)]
-pub struct TitleBar<'a, Message, Renderer> {
+pub struct TitleBar<'a, Message, Renderer>
+where
+ Renderer: iced_native::Renderer,
+ Renderer::Theme: container::StyleSheet,
+{
content: Element<'a, Message, Renderer>,
controls: Option<Element<'a, Message, Renderer>>,
padding: Padding,
always_show_controls: bool,
- style_sheet: Box<dyn container::StyleSheet + 'a>,
+ style: <Renderer::Theme as container::StyleSheet>::Style,
}
impl<'a, Message, Renderer> TitleBar<'a, Message, Renderer>
where
Renderer: iced_native::Renderer,
+ Renderer::Theme: container::StyleSheet,
{
/// Creates a new [`TitleBar`] with the given content.
pub fn new<E>(content: E) -> Self
@@ -35,7 +40,7 @@ where
controls: None,
padding: Padding::ZERO,
always_show_controls: false,
- style_sheet: Default::default(),
+ style: Default::default(),
}
}
@@ -57,9 +62,9 @@ where
/// Sets the style of the [`TitleBar`].
pub fn style(
mut self,
- style: impl Into<Box<dyn container::StyleSheet + 'a>>,
+ style: impl Into<<Renderer::Theme as container::StyleSheet>::Style>,
) -> Self {
- self.style_sheet = style.into();
+ self.style = style.into();
self
}
@@ -80,6 +85,7 @@ where
impl<'a, Message, Renderer> TitleBar<'a, Message, Renderer>
where
Renderer: iced_native::Renderer,
+ Renderer::Theme: container::StyleSheet,
{
pub(super) fn state(&self) -> Tree {
let children = if let Some(controls) = self.controls.as_ref() {
@@ -113,14 +119,17 @@ where
&self,
tree: &Tree,
renderer: &mut Renderer,
+ theme: &Renderer::Theme,
inherited_style: &renderer::Style,
layout: Layout<'_>,
cursor_position: Point,
viewport: &Rectangle,
show_controls: bool,
) {
+ use container::StyleSheet;
+
let bounds = layout.bounds();
- let style = self.style_sheet.style();
+ let style = theme.appearance(self.style);
let inherited_style = renderer::Style {
text_color: style.text_color.unwrap_or(inherited_style.text_color),
};
@@ -146,6 +155,7 @@ where
controls.as_widget().draw(
&tree.children[1],
renderer,
+ theme,
&inherited_style,
controls_layout,
cursor_position,
@@ -158,6 +168,7 @@ where
self.content.as_widget().draw(
&tree.children[0],
renderer,
+ theme,
&inherited_style,
title_layout,
cursor_position,
diff --git a/pure/src/widget/pick_list.rs b/pure/src/widget/pick_list.rs
index 255e3681..2c465932 100644
--- a/pure/src/widget/pick_list.rs
+++ b/pure/src/widget/pick_list.rs
@@ -15,13 +15,15 @@ use iced_native::{
use std::borrow::Cow;
-pub use iced_style::pick_list::{Style, StyleSheet};
+pub use iced_style::pick_list::{Appearance, StyleSheet};
/// A widget for selecting a single value from a list of options.
#[allow(missing_debug_implementations)]
-pub struct PickList<'a, T, Message, Renderer: text::Renderer>
+pub struct PickList<'a, T, Message, Renderer>
where
[T]: ToOwned<Owned = Vec<T>>,
+ Renderer: text::Renderer,
+ Renderer::Theme: StyleSheet,
{
on_selected: Box<dyn Fn(T) -> Message + 'a>,
options: Cow<'a, [T]>,
@@ -31,14 +33,15 @@ where
padding: Padding,
text_size: Option<u16>,
font: Renderer::Font,
- style_sheet: Box<dyn StyleSheet + 'a>,
+ style: <Renderer::Theme as StyleSheet>::Style,
}
-impl<'a, T: 'a, Message, Renderer: text::Renderer>
- PickList<'a, T, Message, Renderer>
+impl<'a, T: 'a, Message, Renderer> PickList<'a, T, Message, Renderer>
where
T: ToString + Eq,
[T]: ToOwned<Owned = Vec<T>>,
+ Renderer: text::Renderer,
+ Renderer::Theme: StyleSheet,
{
/// The default padding of a [`PickList`].
pub const DEFAULT_PADDING: Padding = Padding::new(5);
@@ -59,7 +62,7 @@ where
text_size: None,
padding: Self::DEFAULT_PADDING,
font: Default::default(),
- style_sheet: Default::default(),
+ style: Default::default(),
}
}
@@ -96,9 +99,9 @@ where
/// Sets the style of the [`PickList`].
pub fn style(
mut self,
- style_sheet: impl Into<Box<dyn StyleSheet + 'a>>,
+ style: impl Into<<Renderer::Theme as StyleSheet>::Style>,
) -> Self {
- self.style_sheet = style_sheet.into();
+ self.style = style.into();
self
}
}
@@ -110,6 +113,7 @@ where
[T]: ToOwned<Owned = Vec<T>>,
Message: 'a,
Renderer: text::Renderer + 'a,
+ Renderer::Theme: StyleSheet,
{
fn tag(&self) -> tree::Tag {
tree::Tag::of::<pick_list::State<T>>()
@@ -181,6 +185,7 @@ where
&self,
_tree: &Tree,
renderer: &mut Renderer,
+ theme: &Renderer::Theme,
_style: &renderer::Style,
layout: Layout<'_>,
cursor_position: Point,
@@ -188,6 +193,7 @@ where
) {
pick_list::draw(
renderer,
+ theme,
layout,
cursor_position,
self.padding,
@@ -195,7 +201,7 @@ where
&self.font,
self.placeholder.as_ref().map(String::as_str),
self.selected.as_ref(),
- self.style_sheet.as_ref(),
+ self.style,
)
}
@@ -214,7 +220,7 @@ where
self.text_size,
self.font.clone(),
&self.options,
- self.style_sheet.as_ref(),
+ self.style,
)
}
}
@@ -224,8 +230,9 @@ impl<'a, T: 'a, Message, Renderer> Into<Element<'a, Message, Renderer>>
where
T: Clone + ToString + Eq + 'static,
[T]: ToOwned<Owned = Vec<T>>,
- Renderer: text::Renderer + 'a,
Message: 'a,
+ Renderer: text::Renderer + 'a,
+ Renderer::Theme: StyleSheet,
{
fn into(self) -> Element<'a, Message, Renderer> {
Element::new(self)
diff --git a/pure/src/widget/progress_bar.rs b/pure/src/widget/progress_bar.rs
index 3016a81a..69c7d302 100644
--- a/pure/src/widget/progress_bar.rs
+++ b/pure/src/widget/progress_bar.rs
@@ -10,9 +10,10 @@ use iced_native::{Clipboard, Length, Point, Rectangle, Shell};
pub use iced_native::widget::progress_bar::*;
-impl<'a, Message, Renderer> Widget<Message, Renderer> for ProgressBar<'a>
+impl<'a, Message, Renderer> Widget<Message, Renderer> for ProgressBar<Renderer>
where
Renderer: iced_native::Renderer,
+ Renderer::Theme: StyleSheet,
{
fn width(&self) -> Length {
<Self as iced_native::Widget<Message, Renderer>>::width(self)
@@ -57,6 +58,7 @@ where
&self,
_tree: &Tree,
renderer: &mut Renderer,
+ theme: &Renderer::Theme,
style: &renderer::Style,
layout: Layout<'_>,
cursor_position: Point,
@@ -65,6 +67,7 @@ where
<Self as iced_native::Widget<Message, Renderer>>::draw(
self,
renderer,
+ theme,
style,
layout,
cursor_position,
@@ -91,9 +94,10 @@ where
}
impl<'a, Message, Renderer> Into<Element<'a, Message, Renderer>>
- for ProgressBar<'a>
+ for ProgressBar<Renderer>
where
Renderer: iced_native::Renderer + 'a,
+ Renderer::Theme: StyleSheet,
{
fn into(self) -> Element<'a, Message, Renderer> {
Element::new(self)
diff --git a/pure/src/widget/radio.rs b/pure/src/widget/radio.rs
index 7c98c937..7a6ffbac 100644
--- a/pure/src/widget/radio.rs
+++ b/pure/src/widget/radio.rs
@@ -7,15 +7,16 @@ use iced_native::layout::{self, Layout};
use iced_native::mouse;
use iced_native::renderer;
use iced_native::text;
+use iced_native::widget;
use iced_native::{Clipboard, Length, Point, Rectangle, Shell};
-pub use iced_native::widget::radio::{Radio, Style, StyleSheet};
+pub use iced_native::widget::radio::{Appearance, Radio, StyleSheet};
-impl<'a, Message, Renderer> Widget<Message, Renderer>
- for Radio<'a, Message, Renderer>
+impl<Message, Renderer> Widget<Message, Renderer> for Radio<Message, Renderer>
where
Message: Clone,
Renderer: text::Renderer,
+ Renderer::Theme: StyleSheet + widget::text::StyleSheet,
{
fn width(&self) -> Length {
<Self as iced_native::Widget<Message, Renderer>>::width(self)
@@ -60,6 +61,7 @@ where
&self,
_tree: &Tree,
renderer: &mut Renderer,
+ theme: &Renderer::Theme,
style: &renderer::Style,
layout: Layout<'_>,
cursor_position: Point,
@@ -68,6 +70,7 @@ where
<Self as iced_native::Widget<Message, Renderer>>::draw(
self,
renderer,
+ theme,
style,
layout,
cursor_position,
@@ -94,10 +97,11 @@ where
}
impl<'a, Message, Renderer> Into<Element<'a, Message, Renderer>>
- for Radio<'a, Message, Renderer>
+ for Radio<Message, Renderer>
where
Message: 'a + Clone,
Renderer: text::Renderer + 'a,
+ Renderer::Theme: StyleSheet + widget::text::StyleSheet,
{
fn into(self) -> Element<'a, Message, Renderer> {
Element::new(self)
diff --git a/pure/src/widget/row.rs b/pure/src/widget/row.rs
index 0385b8bd..e747adfc 100644
--- a/pure/src/widget/row.rs
+++ b/pure/src/widget/row.rs
@@ -181,6 +181,7 @@ where
&self,
tree: &Tree,
renderer: &mut Renderer,
+ theme: &Renderer::Theme,
style: &renderer::Style,
layout: Layout<'_>,
cursor_position: Point,
@@ -195,6 +196,7 @@ where
child.as_widget().draw(
state,
renderer,
+ theme,
style,
layout,
cursor_position,
diff --git a/pure/src/widget/rule.rs b/pure/src/widget/rule.rs
index ab8537ae..66a47653 100644
--- a/pure/src/widget/rule.rs
+++ b/pure/src/widget/rule.rs
@@ -10,9 +10,10 @@ use iced_native::{Clipboard, Length, Point, Rectangle, Shell};
pub use iced_native::widget::rule::*;
-impl<'a, Message, Renderer> Widget<Message, Renderer> for Rule<'a>
+impl<'a, Message, Renderer> Widget<Message, Renderer> for Rule<Renderer>
where
Renderer: iced_native::Renderer,
+ Renderer::Theme: StyleSheet,
{
fn width(&self) -> Length {
<Self as iced_native::Widget<Message, Renderer>>::width(self)
@@ -57,6 +58,7 @@ where
&self,
_tree: &Tree,
renderer: &mut Renderer,
+ theme: &Renderer::Theme,
style: &renderer::Style,
layout: Layout<'_>,
cursor_position: Point,
@@ -65,6 +67,7 @@ where
<Self as iced_native::Widget<Message, Renderer>>::draw(
self,
renderer,
+ theme,
style,
layout,
cursor_position,
@@ -90,9 +93,11 @@ where
}
}
-impl<'a, Message, Renderer> Into<Element<'a, Message, Renderer>> for Rule<'a>
+impl<'a, Message, Renderer> Into<Element<'a, Message, Renderer>>
+ for Rule<Renderer>
where
Renderer: iced_native::Renderer + 'a,
+ Renderer::Theme: StyleSheet,
{
fn into(self) -> Element<'a, Message, Renderer> {
Element::new(self)
diff --git a/pure/src/widget/scrollable.rs b/pure/src/widget/scrollable.rs
index 70e951ef..4e24915b 100644
--- a/pure/src/widget/scrollable.rs
+++ b/pure/src/widget/scrollable.rs
@@ -15,18 +15,24 @@ pub use iced_style::scrollable::{Scrollbar, Scroller, StyleSheet};
/// A widget that can vertically display an infinite amount of content with a
/// scrollbar.
#[allow(missing_debug_implementations)]
-pub struct Scrollable<'a, Message, Renderer> {
+pub struct Scrollable<'a, Message, Renderer>
+where
+ Renderer: iced_native::Renderer,
+ Renderer::Theme: StyleSheet,
+{
height: Length,
scrollbar_width: u16,
scrollbar_margin: u16,
scroller_width: u16,
- on_scroll: Option<Box<dyn Fn(f32) -> Message + 'a>>,
- style_sheet: Box<dyn StyleSheet + 'a>,
content: Element<'a, Message, Renderer>,
+ on_scroll: Option<Box<dyn Fn(f32) -> Message + 'a>>,
+ style: <Renderer::Theme as StyleSheet>::Style,
}
-impl<'a, Message, Renderer: iced_native::Renderer>
- Scrollable<'a, Message, Renderer>
+impl<'a, Message, Renderer> Scrollable<'a, Message, Renderer>
+where
+ Renderer: iced_native::Renderer,
+ Renderer::Theme: StyleSheet,
{
/// Creates a new [`Scrollable`].
pub fn new(content: impl Into<Element<'a, Message, Renderer>>) -> Self {
@@ -35,9 +41,9 @@ impl<'a, Message, Renderer: iced_native::Renderer>
scrollbar_width: 10,
scrollbar_margin: 0,
scroller_width: 10,
- on_scroll: None,
- style_sheet: Default::default(),
content: content.into(),
+ on_scroll: None,
+ style: Default::default(),
}
}
@@ -80,9 +86,9 @@ impl<'a, Message, Renderer: iced_native::Renderer>
/// Sets the style of the [`Scrollable`] .
pub fn style(
mut self,
- style_sheet: impl Into<Box<dyn StyleSheet + 'a>>,
+ style: impl Into<<Renderer::Theme as StyleSheet>::Style>,
) -> Self {
- self.style_sheet = style_sheet.into();
+ self.style = style.into();
self
}
}
@@ -91,6 +97,7 @@ impl<'a, Message, Renderer> Widget<Message, Renderer>
for Scrollable<'a, Message, Renderer>
where
Renderer: iced_native::Renderer,
+ Renderer::Theme: StyleSheet,
{
fn tag(&self) -> tree::Tag {
tree::Tag::of::<scrollable::State>()
@@ -171,6 +178,7 @@ where
&self,
tree: &Tree,
renderer: &mut Renderer,
+ theme: &Renderer::Theme,
style: &renderer::Style,
layout: Layout<'_>,
cursor_position: Point,
@@ -179,16 +187,18 @@ where
scrollable::draw(
tree.state.downcast_ref::<scrollable::State>(),
renderer,
+ theme,
layout,
cursor_position,
self.scrollbar_width,
self.scrollbar_margin,
self.scroller_width,
- self.style_sheet.as_ref(),
+ self.style,
|renderer, layout, cursor_position, viewport| {
self.content.as_widget().draw(
&tree.children[0],
renderer,
+ theme,
style,
layout,
cursor_position,
@@ -257,6 +267,7 @@ impl<'a, Message, Renderer> From<Scrollable<'a, Message, Renderer>>
where
Message: 'a + Clone,
Renderer: 'a + iced_native::Renderer,
+ Renderer::Theme: StyleSheet,
{
fn from(
text_input: Scrollable<'a, Message, Renderer>,
diff --git a/pure/src/widget/slider.rs b/pure/src/widget/slider.rs
index 4d8bbce4..fed979e5 100644
--- a/pure/src/widget/slider.rs
+++ b/pure/src/widget/slider.rs
@@ -11,7 +11,7 @@ use iced_native::{Clipboard, Layout, Length, Point, Rectangle, Shell, Size};
use std::ops::RangeInclusive;
-pub use iced_style::slider::{Handle, HandleShape, Style, StyleSheet};
+pub use iced_style::slider::{Appearance, Handle, HandleShape, StyleSheet};
/// An horizontal bar and a handle that selects a single value from a range of
/// values.
@@ -23,7 +23,10 @@ pub use iced_style::slider::{Handle, HandleShape, Style, StyleSheet};
///
/// # Example
/// ```
-/// # use iced_pure::widget::Slider;
+/// # use iced_pure::widget::slider;
+/// # use iced_native::renderer::Null;
+/// #
+/// # type Slider<'a, T, Message> = slider::Slider<'a, T, Message, Null>;
/// #
/// #[derive(Clone)]
/// pub enum Message {
@@ -37,7 +40,11 @@ pub use iced_style::slider::{Handle, HandleShape, Style, StyleSheet};
///
/// ![Slider drawn by Coffee's renderer](https://github.com/hecrj/coffee/blob/bda9818f823dfcb8a7ad0ff4940b4d4b387b5208/images/ui/slider.png?raw=true)
#[allow(missing_debug_implementations)]
-pub struct Slider<'a, T, Message> {
+pub struct Slider<'a, T, Message, Renderer>
+where
+ Renderer: iced_native::Renderer,
+ Renderer::Theme: StyleSheet,
+{
range: RangeInclusive<T>,
step: T,
value: T,
@@ -45,13 +52,15 @@ pub struct Slider<'a, T, Message> {
on_release: Option<Message>,
width: Length,
height: u16,
- style_sheet: Box<dyn StyleSheet + 'a>,
+ style: <Renderer::Theme as StyleSheet>::Style,
}
-impl<'a, T, Message> Slider<'a, T, Message>
+impl<'a, T, Message, Renderer> Slider<'a, T, Message, Renderer>
where
T: Copy + From<u8> + std::cmp::PartialOrd,
Message: Clone,
+ Renderer: iced_native::Renderer,
+ Renderer::Theme: StyleSheet,
{
/// The default height of a [`Slider`].
pub const DEFAULT_HEIGHT: u16 = 22;
@@ -88,7 +97,7 @@ where
on_release: None,
width: Length::Fill,
height: Self::DEFAULT_HEIGHT,
- style_sheet: Default::default(),
+ style: Default::default(),
}
}
@@ -118,9 +127,9 @@ where
/// Sets the style of the [`Slider`].
pub fn style(
mut self,
- style_sheet: impl Into<Box<dyn StyleSheet + 'a>>,
+ style: impl Into<<Renderer::Theme as StyleSheet>::Style>,
) -> Self {
- self.style_sheet = style_sheet.into();
+ self.style = style.into();
self
}
@@ -132,11 +141,12 @@ where
}
impl<'a, T, Message, Renderer> Widget<Message, Renderer>
- for Slider<'a, T, Message>
+ for Slider<'a, T, Message, Renderer>
where
T: Copy + Into<f64> + num_traits::FromPrimitive,
Message: Clone,
Renderer: iced_native::Renderer,
+ Renderer::Theme: StyleSheet,
{
fn tag(&self) -> tree::Tag {
tree::Tag::of::<slider::State>()
@@ -195,6 +205,7 @@ where
&self,
tree: &Tree,
renderer: &mut Renderer,
+ theme: &Renderer::Theme,
_style: &renderer::Style,
layout: Layout<'_>,
cursor_position: Point,
@@ -207,7 +218,8 @@ where
tree.state.downcast_ref::<slider::State>(),
self.value,
&self.range,
- self.style_sheet.as_ref(),
+ theme,
+ self.style,
)
}
@@ -227,14 +239,17 @@ where
}
}
-impl<'a, T, Message, Renderer> From<Slider<'a, T, Message>>
+impl<'a, T, Message, Renderer> From<Slider<'a, T, Message, Renderer>>
for Element<'a, Message, Renderer>
where
T: 'a + Copy + Into<f64> + num_traits::FromPrimitive,
Message: 'a + Clone,
Renderer: 'a + iced_native::Renderer,
+ Renderer::Theme: StyleSheet,
{
- fn from(slider: Slider<'a, T, Message>) -> Element<'a, Message, Renderer> {
+ fn from(
+ slider: Slider<'a, T, Message, Renderer>,
+ ) -> Element<'a, Message, Renderer> {
Element::new(slider)
}
}
diff --git a/pure/src/widget/space.rs b/pure/src/widget/space.rs
index b408153b..7d95ebd7 100644
--- a/pure/src/widget/space.rs
+++ b/pure/src/widget/space.rs
@@ -56,6 +56,7 @@ where
&self,
_tree: &Tree,
renderer: &mut Renderer,
+ theme: &Renderer::Theme,
style: &renderer::Style,
layout: Layout<'_>,
cursor_position: Point,
@@ -64,6 +65,7 @@ where
<Self as iced_native::Widget<Message, Renderer>>::draw(
self,
renderer,
+ theme,
style,
layout,
cursor_position,
diff --git a/pure/src/widget/svg.rs b/pure/src/widget/svg.rs
index 14180097..501d9bfa 100644
--- a/pure/src/widget/svg.rs
+++ b/pure/src/widget/svg.rs
@@ -36,6 +36,7 @@ where
&self,
_tree: &Tree,
renderer: &mut Renderer,
+ theme: &Renderer::Theme,
style: &renderer::Style,
layout: Layout<'_>,
cursor_position: Point,
@@ -44,6 +45,7 @@ where
<Self as iced_native::Widget<Message, Renderer>>::draw(
self,
renderer,
+ theme,
style,
layout,
cursor_position,
diff --git a/pure/src/widget/text.rs b/pure/src/widget/text.rs
index 58a939c1..23999a2c 100644
--- a/pure/src/widget/text.rs
+++ b/pure/src/widget/text.rs
@@ -1,16 +1,19 @@
+//! Write some text for your users to read.
use crate::widget::Tree;
use crate::{Element, Widget};
use iced_native::layout::{self, Layout};
use iced_native::renderer;
use iced_native::text;
+use iced_native::widget;
use iced_native::{Length, Point, Rectangle};
-pub use iced_native::widget::Text;
+pub use iced_native::widget::text::{Appearance, StyleSheet, Text};
impl<Message, Renderer> Widget<Message, Renderer> for Text<Renderer>
where
Renderer: text::Renderer,
+ Renderer::Theme: widget::text::StyleSheet,
{
fn width(&self) -> Length {
<Self as iced_native::Widget<Message, Renderer>>::width(self)
@@ -34,6 +37,7 @@ where
&self,
_tree: &Tree,
renderer: &mut Renderer,
+ theme: &Renderer::Theme,
style: &renderer::Style,
layout: Layout<'_>,
cursor_position: Point,
@@ -42,6 +46,7 @@ where
<Self as iced_native::Widget<Message, Renderer>>::draw(
self,
renderer,
+ theme,
style,
layout,
cursor_position,
@@ -54,6 +59,7 @@ impl<'a, Message, Renderer> Into<Element<'a, Message, Renderer>>
for Text<Renderer>
where
Renderer: text::Renderer + 'a,
+ Renderer::Theme: widget::text::StyleSheet,
{
fn into(self) -> Element<'a, Message, Renderer> {
Element::new(self)
@@ -63,6 +69,7 @@ where
impl<'a, Message, Renderer> Into<Element<'a, Message, Renderer>> for &'a str
where
Renderer: text::Renderer + 'a,
+ Renderer::Theme: widget::text::StyleSheet,
{
fn into(self) -> Element<'a, Message, Renderer> {
Text::new(self).into()
diff --git a/pure/src/widget/text_input.rs b/pure/src/widget/text_input.rs
index ee790359..9b0a466a 100644
--- a/pure/src/widget/text_input.rs
+++ b/pure/src/widget/text_input.rs
@@ -10,7 +10,7 @@ use iced_native::text;
use iced_native::widget::text_input;
use iced_native::{Clipboard, Length, Padding, Point, Rectangle, Shell};
-pub use iced_style::text_input::{Style, StyleSheet};
+pub use iced_style::text_input::{Appearance, StyleSheet};
/// A field that can be filled with text.
///
@@ -33,7 +33,11 @@ pub use iced_style::text_input::{Style, StyleSheet};
/// ```
/// ![Text input drawn by `iced_wgpu`](https://github.com/iced-rs/iced/blob/7760618fb112074bc40b148944521f312152012a/docs/images/text_input.png?raw=true)
#[allow(missing_debug_implementations)]
-pub struct TextInput<'a, Message, Renderer: text::Renderer> {
+pub struct TextInput<'a, Message, Renderer>
+where
+ Renderer: text::Renderer,
+ Renderer::Theme: StyleSheet,
+{
placeholder: String,
value: text_input::Value,
is_secure: bool,
@@ -43,13 +47,14 @@ pub struct TextInput<'a, Message, Renderer: text::Renderer> {
size: Option<u16>,
on_change: Box<dyn Fn(String) -> Message + 'a>,
on_submit: Option<Message>,
- style_sheet: Box<dyn StyleSheet + 'a>,
+ style: <Renderer::Theme as StyleSheet>::Style,
}
impl<'a, Message, Renderer> TextInput<'a, Message, Renderer>
where
Message: Clone,
Renderer: text::Renderer,
+ Renderer::Theme: StyleSheet,
{
/// Creates a new [`TextInput`].
///
@@ -71,7 +76,7 @@ where
size: None,
on_change: Box::new(on_change),
on_submit: None,
- style_sheet: Default::default(),
+ style: Default::default(),
}
}
@@ -83,7 +88,7 @@ where
/// Sets the [`Font`] of the [`TextInput`].
///
- /// [`Font`]: iced_native::text::Renderer::Font
+ /// [`Font`]: text::Renderer::Font
pub fn font(mut self, font: Renderer::Font) -> Self {
self.font = font;
self
@@ -116,9 +121,9 @@ where
/// Sets the style of the [`TextInput`].
pub fn style(
mut self,
- style_sheet: impl Into<Box<dyn StyleSheet + 'a>>,
+ style: impl Into<<Renderer::Theme as StyleSheet>::Style>,
) -> Self {
- self.style_sheet = style_sheet.into();
+ self.style = style.into();
self
}
@@ -130,12 +135,14 @@ where
&self,
tree: &Tree,
renderer: &mut Renderer,
+ theme: &Renderer::Theme,
layout: Layout<'_>,
cursor_position: Point,
value: Option<&text_input::Value>,
) {
text_input::draw(
renderer,
+ theme,
layout,
cursor_position,
tree.state.downcast_ref::<text_input::State>(),
@@ -144,7 +151,7 @@ where
self.size,
&self.font,
self.is_secure,
- self.style_sheet.as_ref(),
+ self.style,
)
}
}
@@ -153,7 +160,8 @@ impl<'a, Message, Renderer> Widget<Message, Renderer>
for TextInput<'a, Message, Renderer>
where
Message: Clone,
- Renderer: iced_native::text::Renderer,
+ Renderer: text::Renderer,
+ Renderer::Theme: StyleSheet,
{
fn tag(&self) -> tree::Tag {
tree::Tag::of::<text_input::State>()
@@ -216,6 +224,7 @@ where
&self,
tree: &Tree,
renderer: &mut Renderer,
+ theme: &Renderer::Theme,
_style: &renderer::Style,
layout: Layout<'_>,
cursor_position: Point,
@@ -223,6 +232,7 @@ where
) {
text_input::draw(
renderer,
+ theme,
layout,
cursor_position,
tree.state.downcast_ref::<text_input::State>(),
@@ -231,7 +241,7 @@ where
self.size,
&self.font,
self.is_secure,
- self.style_sheet.as_ref(),
+ self.style,
)
}
@@ -252,6 +262,7 @@ impl<'a, Message, Renderer> From<TextInput<'a, Message, Renderer>>
where
Message: 'a + Clone,
Renderer: 'a + text::Renderer,
+ Renderer::Theme: StyleSheet,
{
fn from(
text_input: TextInput<'a, Message, Renderer>,
diff --git a/pure/src/widget/toggler.rs b/pure/src/widget/toggler.rs
index b9c5ec02..5efa39ab 100644
--- a/pure/src/widget/toggler.rs
+++ b/pure/src/widget/toggler.rs
@@ -7,14 +7,16 @@ use iced_native::layout::{self, Layout};
use iced_native::mouse;
use iced_native::renderer;
use iced_native::text;
+use iced_native::widget;
use iced_native::{Clipboard, Length, Point, Rectangle, Shell};
-pub use iced_native::widget::toggler::{Style, StyleSheet, Toggler};
+pub use iced_native::widget::toggler::{Appearance, StyleSheet, Toggler};
impl<'a, Message, Renderer> Widget<Message, Renderer>
for Toggler<'a, Message, Renderer>
where
Renderer: text::Renderer,
+ Renderer::Theme: StyleSheet + widget::text::StyleSheet,
{
fn width(&self) -> Length {
<Self as iced_native::Widget<Message, Renderer>>::width(self)
@@ -38,6 +40,7 @@ where
&self,
_state: &Tree,
renderer: &mut Renderer,
+ theme: &Renderer::Theme,
style: &renderer::Style,
layout: Layout<'_>,
cursor_position: Point,
@@ -46,6 +49,7 @@ where
<Self as iced_native::Widget<Message, Renderer>>::draw(
self,
renderer,
+ theme,
style,
layout,
cursor_position,
@@ -97,6 +101,7 @@ impl<'a, Message, Renderer> Into<Element<'a, Message, Renderer>>
where
Message: 'a,
Renderer: text::Renderer + 'a,
+ Renderer::Theme: StyleSheet + widget::text::StyleSheet,
{
fn into(self) -> Element<'a, Message, Renderer> {
Element::new(self)
diff --git a/pure/src/widget/tooltip.rs b/pure/src/widget/tooltip.rs
index 3887732a..cbc34722 100644
--- a/pure/src/widget/tooltip.rs
+++ b/pure/src/widget/tooltip.rs
@@ -7,27 +7,33 @@ use iced_native::mouse;
use iced_native::overlay;
use iced_native::renderer;
use iced_native::text;
+use iced_native::widget::container;
use iced_native::widget::tooltip;
-use iced_native::widget::Text;
+use iced_native::widget::{self, Text};
use iced_native::{Clipboard, Layout, Length, Point, Rectangle, Shell};
-pub use iced_style::container::{Style, StyleSheet};
+pub use iced_style::container::{Appearance, StyleSheet};
pub use tooltip::Position;
/// An element to display a widget over another.
#[allow(missing_debug_implementations)]
-pub struct Tooltip<'a, Message, Renderer: text::Renderer> {
+pub struct Tooltip<'a, Message, Renderer: text::Renderer>
+where
+ Renderer: text::Renderer,
+ Renderer::Theme: container::StyleSheet + widget::text::StyleSheet,
+{
content: Element<'a, Message, Renderer>,
tooltip: Text<Renderer>,
position: Position,
- style_sheet: Box<dyn StyleSheet + 'a>,
gap: u16,
padding: u16,
+ style: <Renderer::Theme as container::StyleSheet>::Style,
}
impl<'a, Message, Renderer> Tooltip<'a, Message, Renderer>
where
Renderer: text::Renderer,
+ Renderer::Theme: container::StyleSheet + widget::text::StyleSheet,
{
/// The default padding of a [`Tooltip`] drawn by this renderer.
const DEFAULT_PADDING: u16 = 5;
@@ -44,9 +50,9 @@ where
content: content.into(),
tooltip: Text::new(tooltip.to_string()),
position,
- style_sheet: Default::default(),
gap: 0,
padding: Self::DEFAULT_PADDING,
+ style: Default::default(),
}
}
@@ -79,9 +85,9 @@ where
/// Sets the style of the [`Tooltip`].
pub fn style(
mut self,
- style_sheet: impl Into<Box<dyn StyleSheet + 'a>>,
+ style: impl Into<<Renderer::Theme as container::StyleSheet>::Style>,
) -> Self {
- self.style_sheet = style_sheet.into();
+ self.style = style.into();
self
}
}
@@ -90,6 +96,7 @@ impl<'a, Message, Renderer> Widget<Message, Renderer>
for Tooltip<'a, Message, Renderer>
where
Renderer: text::Renderer,
+ Renderer::Theme: container::StyleSheet + widget::text::StyleSheet,
{
fn children(&self) -> Vec<Tree> {
vec![Tree::new(&self.content)]
@@ -157,6 +164,7 @@ where
&self,
tree: &Tree,
renderer: &mut Renderer,
+ theme: &Renderer::Theme,
inherited_style: &renderer::Style,
layout: Layout<'_>,
cursor_position: Point,
@@ -165,6 +173,7 @@ where
self.content.as_widget().draw(
&tree.children[0],
renderer,
+ theme,
inherited_style,
layout,
cursor_position,
@@ -175,6 +184,7 @@ where
tooltip::draw(
renderer,
+ theme,
inherited_style,
layout,
cursor_position,
@@ -182,7 +192,7 @@ where
self.position,
self.gap,
self.padding,
- self.style_sheet.as_ref(),
+ self.style,
|renderer, limits| {
Widget::<(), Renderer>::layout(tooltip, renderer, limits)
},
@@ -191,6 +201,7 @@ where
tooltip,
&Tree::empty(),
renderer,
+ theme,
defaults,
layout,
cursor_position,
@@ -217,8 +228,9 @@ where
impl<'a, Message, Renderer> From<Tooltip<'a, Message, Renderer>>
for Element<'a, Message, Renderer>
where
- Renderer: 'a + text::Renderer,
Message: 'a,
+ Renderer: 'a + text::Renderer,
+ Renderer::Theme: container::StyleSheet + widget::text::StyleSheet,
{
fn from(
tooltip: Tooltip<'a, Message, Renderer>,
diff --git a/pure/src/widget/tree.rs b/pure/src/widget/tree.rs
index 0bb3107a..2f876523 100644
--- a/pure/src/widget/tree.rs
+++ b/pure/src/widget/tree.rs
@@ -31,7 +31,10 @@ impl Tree {
/// Creates a new [`Tree`] for the provided [`Element`].
pub fn new<'a, Message, Renderer>(
widget: impl Borrow<dyn Widget<Message, Renderer> + 'a>,
- ) -> Self {
+ ) -> Self
+ where
+ Renderer: iced_native::Renderer,
+ {
let widget = widget.borrow();
Self {
@@ -52,7 +55,9 @@ impl Tree {
pub fn diff<'a, Message, Renderer>(
&mut self,
new: impl Borrow<dyn Widget<Message, Renderer> + 'a>,
- ) {
+ ) where
+ Renderer: iced_native::Renderer,
+ {
if self.tag == new.borrow().tag() {
new.borrow().diff(self)
} else {
@@ -64,7 +69,9 @@ impl Tree {
pub fn diff_children<'a, Message, Renderer>(
&mut self,
new_children: &[impl Borrow<dyn Widget<Message, Renderer> + 'a>],
- ) {
+ ) where
+ Renderer: iced_native::Renderer,
+ {
self.diff_children_custom(
new_children,
|tree, widget| tree.diff(widget.borrow()),