From 664251f3f5c7b76f69a97683af1468094bba887f Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Sat, 14 May 2022 01:47:55 +0200 Subject: Draft first-class `Theme` support RFC: https://github.com/iced-rs/rfcs/pull/6 --- native/src/widget/tooltip.rs | 3 +++ 1 file changed, 3 insertions(+) (limited to 'native/src/widget/tooltip.rs') diff --git a/native/src/widget/tooltip.rs b/native/src/widget/tooltip.rs index c929395f..141aa5c8 100644 --- a/native/src/widget/tooltip.rs +++ b/native/src/widget/tooltip.rs @@ -267,6 +267,7 @@ where fn draw( &self, renderer: &mut Renderer, + theme: &Renderer::Theme, inherited_style: &renderer::Style, layout: Layout<'_>, cursor_position: Point, @@ -274,6 +275,7 @@ where ) { self.content.draw( renderer, + theme, inherited_style, layout, cursor_position, @@ -299,6 +301,7 @@ where Widget::<(), Renderer>::draw( tooltip, renderer, + theme, defaults, layout, cursor_position, -- cgit From 97555e67af8b4bcc77df69c5e72156e14948150e Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Tue, 7 Jun 2022 04:11:24 +0200 Subject: Implement theme styling for `Container` --- native/src/widget/tooltip.rs | 36 +++++++++++++++++++++++++----------- 1 file changed, 25 insertions(+), 11 deletions(-) (limited to 'native/src/widget/tooltip.rs') diff --git a/native/src/widget/tooltip.rs b/native/src/widget/tooltip.rs index 141aa5c8..d034f648 100644 --- a/native/src/widget/tooltip.rs +++ b/native/src/widget/tooltip.rs @@ -13,18 +13,23 @@ use crate::{ /// 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> +where + Renderer: text::Renderer, + Renderer::Theme: container::StyleSheet, +{ content: Element<'a, Message, Renderer>, tooltip: Text, position: Position, - style_sheet: Box, gap: u16, padding: u16, + style: ::Style, } impl<'a, Message, Renderer> Tooltip<'a, Message, Renderer> where Renderer: text::Renderer, + Renderer::Theme: container::StyleSheet, { /// The default padding of a [`Tooltip`] drawn by this renderer. const DEFAULT_PADDING: u16 = 5; @@ -41,9 +46,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(), } } @@ -76,9 +81,9 @@ where /// Sets the style of the [`Tooltip`]. pub fn style( mut self, - style_sheet: impl Into>, + style: impl Into<::Style>, ) -> Self { - self.style_sheet = style_sheet.into(); + self.style = style.into(); self } } @@ -99,8 +104,9 @@ pub enum Position { } /// Draws a [`Tooltip`]. -pub fn draw( +pub fn draw( renderer: &mut Renderer, + theme: &Renderer::Theme, inherited_style: &renderer::Style, layout: Layout<'_>, cursor_position: Point, @@ -108,7 +114,7 @@ pub fn draw( position: Position, gap: u16, padding: u16, - style_sheet: &dyn container::StyleSheet, + style: ::Style, layout_text: impl FnOnce(&Renderer, &layout::Limits) -> layout::Node, draw_text: impl FnOnce( &mut Renderer, @@ -117,12 +123,17 @@ pub fn draw( Point, &Rectangle, ), -) { +) where + Renderer: crate::Renderer, + Renderer::Theme: container::StyleSheet, +{ + use container::StyleSheet; + let bounds = layout.bounds(); if bounds.contains(cursor_position) { let gap = f32::from(gap); - let style = style_sheet.style(); + let style = theme.appearance(style); let defaults = renderer::Style { text_color: style.text_color.unwrap_or(inherited_style.text_color), @@ -213,6 +224,7 @@ impl<'a, Message, Renderer> Widget for Tooltip<'a, Message, Renderer> where Renderer: text::Renderer, + Renderer::Theme: container::StyleSheet, { fn width(&self) -> Length { self.content.width() @@ -286,6 +298,7 @@ where draw( renderer, + theme, inherited_style, layout, cursor_position, @@ -293,7 +306,7 @@ where self.position, self.gap, self.padding, - self.style_sheet.as_ref(), + self.style, |renderer, limits| { Widget::<(), Renderer>::layout(tooltip, renderer, limits) }, @@ -315,8 +328,9 @@ where impl<'a, Message, Renderer> From> for Element<'a, Message, Renderer> where - Renderer: 'a + text::Renderer, Message: 'a, + Renderer: 'a + text::Renderer, + Renderer::Theme: container::StyleSheet, { fn from( tooltip: Tooltip<'a, Message, Renderer>, -- cgit From 1dd1a2f97fc747e15e12b5188dad6c41b0d052ea Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Wed, 29 Jun 2022 10:51:01 +0200 Subject: Introduce `StyleSheet` for `Text` widget --- native/src/widget/tooltip.rs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'native/src/widget/tooltip.rs') diff --git a/native/src/widget/tooltip.rs b/native/src/widget/tooltip.rs index d034f648..0548e9da 100644 --- a/native/src/widget/tooltip.rs +++ b/native/src/widget/tooltip.rs @@ -4,6 +4,7 @@ use crate::layout; use crate::mouse; use crate::renderer; use crate::text; +use crate::widget; use crate::widget::container; use crate::widget::text::Text; use crate::{ @@ -16,7 +17,7 @@ use crate::{ pub struct Tooltip<'a, Message, Renderer> where Renderer: text::Renderer, - Renderer::Theme: container::StyleSheet, + Renderer::Theme: container::StyleSheet + widget::text::StyleSheet, { content: Element<'a, Message, Renderer>, tooltip: Text, @@ -29,7 +30,7 @@ where impl<'a, Message, Renderer> Tooltip<'a, Message, Renderer> where Renderer: text::Renderer, - Renderer::Theme: container::StyleSheet, + Renderer::Theme: container::StyleSheet + widget::text::StyleSheet, { /// The default padding of a [`Tooltip`] drawn by this renderer. const DEFAULT_PADDING: u16 = 5; @@ -224,7 +225,7 @@ impl<'a, Message, Renderer> Widget for Tooltip<'a, Message, Renderer> where Renderer: text::Renderer, - Renderer::Theme: container::StyleSheet, + Renderer::Theme: container::StyleSheet + widget::text::StyleSheet, { fn width(&self) -> Length { self.content.width() @@ -330,7 +331,7 @@ impl<'a, Message, Renderer> From> where Message: 'a, Renderer: 'a + text::Renderer, - Renderer::Theme: container::StyleSheet, + Renderer::Theme: container::StyleSheet + widget::text::StyleSheet, { fn from( tooltip: Tooltip<'a, Message, Renderer>, -- cgit