From 7a50e9e8fbb8d37e53a42c1dd5936b97463ead53 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Sun, 21 Jan 2024 17:56:01 +0100 Subject: Convert `Renderer::Theme` to generic `Widget` type --- widget/src/scrollable.rs | 56 ++++++++++++++++++++++++++---------------------- 1 file changed, 30 insertions(+), 26 deletions(-) (limited to 'widget/src/scrollable.rs') diff --git a/widget/src/scrollable.rs b/widget/src/scrollable.rs index b7b6c3d2..509a6b34 100644 --- a/widget/src/scrollable.rs +++ b/widget/src/scrollable.rs @@ -21,27 +21,33 @@ pub use operation::scrollable::{AbsoluteOffset, RelativeOffset}; /// A widget that can vertically display an infinite amount of content with a /// scrollbar. #[allow(missing_debug_implementations)] -pub struct Scrollable<'a, Message, Renderer = crate::Renderer> -where +pub struct Scrollable< + 'a, + Message, + Theme = crate::Theme, + Renderer = crate::Renderer, +> where + Theme: StyleSheet, Renderer: crate::core::Renderer, - Renderer::Theme: StyleSheet, { id: Option, width: Length, height: Length, direction: Direction, - content: Element<'a, Message, Renderer>, + content: Element<'a, Message, Theme, Renderer>, on_scroll: Option Message + 'a>>, - style: ::Style, + style: Theme::Style, } -impl<'a, Message, Renderer> Scrollable<'a, Message, Renderer> +impl<'a, Message, Theme, Renderer> Scrollable<'a, Message, Theme, Renderer> where + Theme: StyleSheet, Renderer: crate::core::Renderer, - Renderer::Theme: StyleSheet, { /// Creates a new [`Scrollable`]. - pub fn new(content: impl Into>) -> Self { + pub fn new( + content: impl Into>, + ) -> Self { Scrollable { id: None, width: Length::Shrink, @@ -86,10 +92,7 @@ where } /// Sets the style of the [`Scrollable`] . - pub fn style( - mut self, - style: impl Into<::Style>, - ) -> Self { + pub fn style(mut self, style: impl Into) -> Self { self.style = style.into(); self } @@ -198,11 +201,11 @@ pub enum Alignment { End, } -impl<'a, Message, Renderer> Widget - for Scrollable<'a, Message, Renderer> +impl<'a, Message, Theme, Renderer> Widget + for Scrollable<'a, Message, Theme, Renderer> where + Theme: StyleSheet, Renderer: crate::core::Renderer, - Renderer::Theme: StyleSheet, { fn tag(&self) -> tree::Tag { tree::Tag::of::() @@ -324,7 +327,7 @@ where &self, tree: &Tree, renderer: &mut Renderer, - theme: &Renderer::Theme, + theme: &Theme, style: &renderer::Style, layout: Layout<'_>, cursor: mouse::Cursor, @@ -382,7 +385,7 @@ where tree: &'b mut Tree, layout: Layout<'_>, renderer: &Renderer, - ) -> Option> { + ) -> Option> { self.content .as_widget_mut() .overlay( @@ -404,16 +407,17 @@ where } } -impl<'a, Message, Renderer> From> - for Element<'a, Message, Renderer> +impl<'a, Message, Theme, Renderer> + From> + for Element<'a, Message, Theme, Renderer> where Message: 'a, + Theme: StyleSheet + 'a, Renderer: 'a + crate::core::Renderer, - Renderer::Theme: StyleSheet, { fn from( - text_input: Scrollable<'a, Message, Renderer>, - ) -> Element<'a, Message, Renderer> { + text_input: Scrollable<'a, Message, Theme, Renderer>, + ) -> Element<'a, Message, Theme, Renderer> { Element::new(text_input) } } @@ -841,18 +845,18 @@ pub fn mouse_interaction( } /// Draws a [`Scrollable`]. -pub fn draw( +pub fn draw( state: &State, renderer: &mut Renderer, - theme: &Renderer::Theme, + theme: &Theme, layout: Layout<'_>, cursor: mouse::Cursor, direction: Direction, - style: &::Style, + style: &Theme::Style, draw_content: impl FnOnce(&mut Renderer, Layout<'_>, mouse::Cursor, &Rectangle), ) where + Theme: StyleSheet, Renderer: crate::core::Renderer, - Renderer::Theme: StyleSheet, { let bounds = layout.bounds(); let content_layout = layout.children().next().unwrap(); -- cgit