summaryrefslogtreecommitdiffstats
path: root/widget/src/mouse_area.rs
diff options
context:
space:
mode:
Diffstat (limited to 'widget/src/mouse_area.rs')
-rw-r--r--widget/src/mouse_area.rs38
1 files changed, 23 insertions, 15 deletions
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<Message>,
on_release: Option<Message>,
on_right_press: Option<Message>,
@@ -23,7 +28,7 @@ pub struct MouseArea<'a, Message, Renderer> {
on_middle_release: Option<Message>,
}
-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<Element<'a, Message, Renderer>>) -> Self {
+ pub fn new(
+ content: impl Into<Element<'a, Message, Theme, Renderer>>,
+ ) -> 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<Message, Renderer>
- for MouseArea<'a, Message, Renderer>
+impl<'a, Message, Theme, Renderer> Widget<Message, Theme, Renderer>
+ 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<overlay::Element<'b, Message, Renderer>> {
+ ) -> Option<overlay::Element<'b, Message, Theme, Renderer>> {
self.content.as_widget_mut().overlay(
&mut tree.children[0],
layout,
@@ -219,23 +226,24 @@ where
}
}
-impl<'a, Message, Renderer> From<MouseArea<'a, Message, Renderer>>
- for Element<'a, Message, Renderer>
+impl<'a, Message, Theme, Renderer> From<MouseArea<'a, Message, Theme, Renderer>>
+ 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<Message: Clone, Renderer>(
- widget: &mut MouseArea<'_, Message, Renderer>,
+fn update<Message: Clone, Theme, Renderer>(
+ widget: &mut MouseArea<'_, Message, Theme, Renderer>,
event: &Event,
layout: Layout<'_>,
cursor: mouse::Cursor,