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
This commit is contained in:
Antoine Beyeler 2024-01-24 09:32:38 +01:00 committed by GitHub
parent 2c837d25a2
commit 11c89125f7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 14 additions and 0 deletions

View File

@ -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<Id> {
self.interaction().drag_id
}
/// Set which widget is being dragged.
#[inline(always)]
pub fn set_dragged_id(&mut self, id: Id) {

View File

@ -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))