Remove support for on_mouse_enter and on_mouse_exit in MouseArea

These need continuity guarantees (e.g. mandatory widget id), which we
don't have yet!
This commit is contained in:
Héctor Ramón Jiménez 2023-04-13 06:58:53 +02:00
parent 020f1120e3
commit 0c39112a2e
No known key found for this signature in database
GPG key ID: 140CC052C94F138E

View file

@ -21,8 +21,6 @@ pub struct MouseArea<'a, Message, Renderer> {
on_right_release: Option<Message>, on_right_release: Option<Message>,
on_middle_press: Option<Message>, on_middle_press: Option<Message>,
on_middle_release: Option<Message>, on_middle_release: Option<Message>,
on_mouse_enter: Option<Message>,
on_mouse_exit: Option<Message>,
} }
impl<'a, Message, Renderer> MouseArea<'a, Message, Renderer> { impl<'a, Message, Renderer> MouseArea<'a, Message, Renderer> {
@ -67,26 +65,12 @@ impl<'a, Message, Renderer> MouseArea<'a, Message, Renderer> {
self.on_middle_release = Some(message); self.on_middle_release = Some(message);
self self
} }
/// The message to emit when the mouse enters the widget.
#[must_use]
pub fn on_mouse_enter(mut self, message: Message) -> Self {
self.on_mouse_enter = Some(message);
self
}
/// The messsage to emit when the mouse exits the widget.
#[must_use]
pub fn on_mouse_exit(mut self, message: Message) -> Self {
self.on_mouse_exit = Some(message);
self
}
} }
/// Local state of the [`MouseArea`]. /// Local state of the [`MouseArea`].
#[derive(Default)] #[derive(Default)]
struct State { struct State {
is_hovered: bool, // TODO: Support on_mouse_enter and on_mouse_exit
} }
impl<'a, Message, Renderer> MouseArea<'a, Message, Renderer> { impl<'a, Message, Renderer> MouseArea<'a, Message, Renderer> {
@ -100,8 +84,6 @@ impl<'a, Message, Renderer> MouseArea<'a, Message, Renderer> {
on_right_release: None, on_right_release: None,
on_middle_press: None, on_middle_press: None,
on_middle_release: None, on_middle_release: None,
on_mouse_enter: None,
on_mouse_exit: None,
} }
} }
} }
@ -181,14 +163,7 @@ where
return event::Status::Captured; return event::Status::Captured;
} }
update( update(self, &event, layout, cursor_position, shell)
self,
&event,
layout,
cursor_position,
shell,
tree.state.downcast_mut::<State>(),
)
} }
fn mouse_interaction( fn mouse_interaction(
@ -264,28 +239,11 @@ fn update<Message: Clone, Renderer>(
layout: Layout<'_>, layout: Layout<'_>,
cursor_position: Point, cursor_position: Point,
shell: &mut Shell<'_, Message>, shell: &mut Shell<'_, Message>,
state: &mut State,
) -> event::Status { ) -> event::Status {
let was_hovered = state.is_hovered; if !layout.bounds().contains(cursor_position) {
state.is_hovered = layout.bounds().contains(cursor_position);
if !state.is_hovered {
if was_hovered {
if let Some(message) = widget.on_mouse_exit.as_ref() {
shell.publish(message.clone());
}
}
return event::Status::Ignored; return event::Status::Ignored;
} }
if !was_hovered {
if let Some(message) = widget.on_mouse_enter.as_ref() {
shell.publish(message.clone());
}
}
if let Some(message) = widget.on_press.as_ref() { if let Some(message) = widget.on_press.as_ref() {
if let Event::Mouse(mouse::Event::ButtonPressed(mouse::Button::Left)) if let Event::Mouse(mouse::Event::ButtonPressed(mouse::Button::Left))
| Event::Touch(touch::Event::FingerPressed { .. }) = event | Event::Touch(touch::Event::FingerPressed { .. }) = event