From 11c89125f74f2c56a19b57b223e7375848ea7296 Mon Sep 17 00:00:00 2001 From: Antoine Beyeler <49431240+abey79@users.noreply.github.com> Date: Wed, 24 Jan 2024 09:32:38 +0100 Subject: [PATCH] Add some drag-and-drop-related APIs in `Response` and `Memory` (#3876) This PR adds the following APIs, which I found to be missing while working on https://github.com/rerun-io/rerun/pull/4879: - `Response::decidedly_dragged()`: tests if the corresponding widget is being decidedly dragged - `Memory::dragged_id()`: returns the ID of the dragged widget, if any --- crates/egui/src/memory.rs | 6 ++++++ crates/egui/src/response.rs | 8 ++++++++ 2 files changed, 14 insertions(+) diff --git a/crates/egui/src/memory.rs b/crates/egui/src/memory.rs index 7cd8e820..213d9c8b 100644 --- a/crates/egui/src/memory.rs +++ b/crates/egui/src/memory.rs @@ -703,6 +703,12 @@ impl Memory { self.interaction().drag_id == Some(id) } + /// Get the id of the widget being dragged, if any. + #[inline(always)] + pub fn dragged_id(&self) -> Option { + self.interaction().drag_id + } + /// Set which widget is being dragged. #[inline(always)] pub fn set_dragged_id(&mut self, id: Id) { diff --git a/crates/egui/src/response.rs b/crates/egui/src/response.rs index 02d908d9..108a24d9 100644 --- a/crates/egui/src/response.rs +++ b/crates/egui/src/response.rs @@ -309,6 +309,14 @@ impl Response { self.dragged } + /// The Widget is being decidedly dragged. + /// + /// This helper function checks both the output of [`Self::dragged`] and [`crate::PointerState::is_decidedly_dragging`]. + #[inline] + pub fn decidedly_dragged(&self) -> bool { + self.dragged() && self.ctx.input(|i| i.pointer.is_decidedly_dragging()) + } + #[inline] pub fn dragged_by(&self, button: PointerButton) -> bool { self.dragged() && self.ctx.input(|i| i.pointer.button_down(button))