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/mouse_area.rs | 38 +++++++++++++++++++++++--------------- 1 file changed, 23 insertions(+), 15 deletions(-) (limited to 'widget/src/mouse_area.rs') diff --git a/widget/src/mouse_area.rs b/widget/src/mouse_area.rs index 87cac3a7..62bb45d8 100644 --- a/widget/src/mouse_area.rs +++ b/widget/src/mouse_area.rs @@ -13,8 +13,13 @@ use crate::core::{ /// Emit messages on mouse events. #[allow(missing_debug_implementations)] -pub struct MouseArea<'a, Message, Renderer> { - content: Element<'a, Message, Renderer>, +pub struct MouseArea< + 'a, + Message, + Theme = crate::Theme, + Renderer = crate::Renderer, +> { + content: Element<'a, Message, Theme, Renderer>, on_press: Option, on_release: Option, on_right_press: Option, @@ -23,7 +28,7 @@ pub struct MouseArea<'a, Message, Renderer> { on_middle_release: Option, } -impl<'a, Message, Renderer> MouseArea<'a, Message, Renderer> { +impl<'a, Message, Theme, Renderer> MouseArea<'a, Message, Theme, Renderer> { /// The message to emit on a left button press. #[must_use] pub fn on_press(mut self, message: Message) -> Self { @@ -73,9 +78,11 @@ struct State { // TODO: Support on_mouse_enter and on_mouse_exit } -impl<'a, Message, Renderer> MouseArea<'a, Message, Renderer> { +impl<'a, Message, Theme, Renderer> MouseArea<'a, Message, Theme, Renderer> { /// Creates a [`MouseArea`] with the given content. - pub fn new(content: impl Into>) -> Self { + pub fn new( + content: impl Into>, + ) -> Self { MouseArea { content: content.into(), on_press: None, @@ -88,8 +95,8 @@ impl<'a, Message, Renderer> MouseArea<'a, Message, Renderer> { } } -impl<'a, Message, Renderer> Widget - for MouseArea<'a, Message, Renderer> +impl<'a, Message, Theme, Renderer> Widget + for MouseArea<'a, Message, Theme, Renderer> where Renderer: renderer::Renderer, Message: Clone, @@ -188,7 +195,7 @@ where &self, tree: &Tree, renderer: &mut Renderer, - theme: &Renderer::Theme, + theme: &Theme, renderer_style: &renderer::Style, layout: Layout<'_>, cursor: mouse::Cursor, @@ -210,7 +217,7 @@ where tree: &'b mut Tree, layout: Layout<'_>, renderer: &Renderer, - ) -> Option> { + ) -> Option> { self.content.as_widget_mut().overlay( &mut tree.children[0], layout, @@ -219,23 +226,24 @@ 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 + Clone, + Theme: 'a, Renderer: 'a + renderer::Renderer, { fn from( - area: MouseArea<'a, Message, Renderer>, - ) -> Element<'a, Message, Renderer> { + area: MouseArea<'a, Message, Theme, Renderer>, + ) -> Element<'a, Message, Theme, Renderer> { Element::new(area) } } /// Processes the given [`Event`] and updates the [`State`] of an [`MouseArea`] /// accordingly. -fn update( - widget: &mut MouseArea<'_, Message, Renderer>, +fn update( + widget: &mut MouseArea<'_, Message, Theme, Renderer>, event: &Event, layout: Layout<'_>, cursor: mouse::Cursor, -- cgit