From 66d2b3ffe43f969c7b75d70423ec02dacc6ba129 Mon Sep 17 00:00:00 2001 From: rustbasic <127506429+rustbasic@users.noreply.github.com> Date: Sat, 11 May 2024 20:17:58 +0900 Subject: [PATCH] Treat `Event::PointerGone` as `PointerEvent::Released` (#4419) * Closes #4406 * Closes #4418 If `Event::PointerGone` occurs, it is treated as `PointerEvent::Released`. --- crates/egui/src/context.rs | 2 +- crates/egui/src/input_state.rs | 4 ++++ crates/egui/src/interaction.rs | 2 +- crates/egui_demo_lib/src/demo/tests.rs | 12 ++++++------ 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/crates/egui/src/context.rs b/crates/egui/src/context.rs index 04bdd16432aa..2d58be7e1265 100644 --- a/crates/egui/src/context.rs +++ b/crates/egui/src/context.rs @@ -1875,8 +1875,8 @@ impl Context { drag_started: _, dragged, drag_stopped: _, - contains_pointer, hovered, + contains_pointer, } = interact_widgets; if true { diff --git a/crates/egui/src/input_state.rs b/crates/egui/src/input_state.rs index 57a9e6477bf6..22851a470b6e 100644 --- a/crates/egui/src/input_state.rs +++ b/crates/egui/src/input_state.rs @@ -800,6 +800,10 @@ impl PointerState { } Event::PointerGone => { self.latest_pos = None; + self.pointer_events.push(PointerEvent::Released { + click: None, + button: PointerButton::Primary, + }); // NOTE: we do NOT clear `self.interact_pos` here. It will be cleared next frame. } Event::MouseMoved(delta) => *self.motion.get_or_insert(Vec2::ZERO) += *delta, diff --git a/crates/egui/src/interaction.rs b/crates/egui/src/interaction.rs index 8a7b2d0948c5..e25e1c4aa134 100644 --- a/crates/egui/src/interaction.rs +++ b/crates/egui/src/interaction.rs @@ -283,7 +283,7 @@ pub(crate) fn interact( drag_started, dragged, drag_stopped, - contains_pointer, hovered, + contains_pointer, } } diff --git a/crates/egui_demo_lib/src/demo/tests.rs b/crates/egui_demo_lib/src/demo/tests.rs index 44e355d0e8e3..6a8348ac56ad 100644 --- a/crates/egui_demo_lib/src/demo/tests.rs +++ b/crates/egui_demo_lib/src/demo/tests.rs @@ -466,23 +466,23 @@ fn response_summary(response: &egui::Response, show_hovers: bool) -> String { // These are in inverse logical/chonological order, because we show them in the ui that way: if response.triple_clicked_by(button) { - writeln!(new_info, "Triple-clicked{button_suffix}").ok(); + writeln!(new_info, "Triple_clicked_by{button_suffix}").ok(); } if response.double_clicked_by(button) { - writeln!(new_info, "Double-clicked{button_suffix}").ok(); + writeln!(new_info, "Double_clicked_by{button_suffix}").ok(); } if response.clicked_by(button) { - writeln!(new_info, "Clicked{button_suffix}").ok(); + writeln!(new_info, "Clicked_by{button_suffix}").ok(); } if response.drag_stopped_by(button) { - writeln!(new_info, "Drag stopped{button_suffix}").ok(); + writeln!(new_info, "Drag_stopped_by{button_suffix}").ok(); } if response.dragged_by(button) { - writeln!(new_info, "Dragged{button_suffix}").ok(); + writeln!(new_info, "Dragged_by{button_suffix}").ok(); } if response.drag_started_by(button) { - writeln!(new_info, "Drag started{button_suffix}").ok(); + writeln!(new_info, "Drag_started_by{button_suffix}").ok(); } }