diff options
author | 2022-06-07 04:11:24 +0200 | |
---|---|---|
committer | 2022-06-07 04:11:24 +0200 | |
commit | 97555e67af8b4bcc77df69c5e72156e14948150e (patch) | |
tree | 6af3db6e439fdcb40f94ac9b1db96296fb66e86e /native/src/widget/tooltip.rs | |
parent | 2933ac7355d5c14aa4f04a64a67197cd97e7608c (diff) | |
download | iced-97555e67af8b4bcc77df69c5e72156e14948150e.tar.gz iced-97555e67af8b4bcc77df69c5e72156e14948150e.tar.bz2 iced-97555e67af8b4bcc77df69c5e72156e14948150e.zip |
Implement theme styling for `Container`
Diffstat (limited to 'native/src/widget/tooltip.rs')
-rw-r--r-- | native/src/widget/tooltip.rs | 36 |
1 files changed, 25 insertions, 11 deletions
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<Renderer>, position: Position, - style_sheet: Box<dyn container::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, { /// 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<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 } } @@ -99,8 +104,9 @@ pub enum Position { } /// Draws a [`Tooltip`]. -pub fn draw<Renderer: crate::Renderer>( +pub fn draw<Renderer>( renderer: &mut Renderer, + theme: &Renderer::Theme, inherited_style: &renderer::Style, layout: Layout<'_>, cursor_position: Point, @@ -108,7 +114,7 @@ pub fn draw<Renderer: crate::Renderer>( position: Position, gap: u16, padding: u16, - style_sheet: &dyn container::StyleSheet, + style: <Renderer::Theme as container::StyleSheet>::Style, layout_text: impl FnOnce(&Renderer, &layout::Limits) -> layout::Node, draw_text: impl FnOnce( &mut Renderer, @@ -117,12 +123,17 @@ pub fn draw<Renderer: crate::Renderer>( 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<Message, Renderer> 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<Tooltip<'a, Message, Renderer>> 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>, |