Fix node interaction bug

This commit is contained in:
Okko Hakola 2023-04-23 01:53:51 +03:00
parent 4ce43f5521
commit 790d9ef5f9

View File

@ -144,6 +144,17 @@ where
inconsistent self. It has either more or less values than the graph."
);
// Allocate rect before the nodes, otherwise this will block the interaction
// with the nodes.
let r = ui.allocate_rect(ui.min_rect(), Sense::click().union(Sense::drag()));
if r.clicked() {
click_on_background = true;
} else if r.drag_started() {
drag_started_on_background = true;
} else if r.drag_released() {
drag_released_on_background = true;
}
/* Draw nodes */
for node_id in self.node_order.iter().copied() {
let responses = GraphNodeWidget {
@ -165,15 +176,6 @@ where
delayed_responses.extend(responses);
}
let r = ui.allocate_rect(ui.min_rect(), Sense::click().union(Sense::drag()));
if r.clicked() {
click_on_background = true;
} else if r.drag_started() {
drag_started_on_background = true;
} else if r.drag_released() {
drag_released_on_background = true;
}
/* Draw the node finder, if open */
let mut should_close_node_finder = false;
if let Some(ref mut node_finder) = self.node_finder {
@ -510,6 +512,16 @@ where
let background_shape = ui.painter().add(Shape::Noop);
let outer_rect_bounds = ui.available_rect_before_wrap();
// Hack?: Call this before the content of the node
// to ensure interaction works after egui 0.19. Otherwise the layers block
// hover interaction
let window_response = ui.interact(
outer_rect_bounds,
Id::new((self.node_id, "window")),
Sense::click_and_drag(),
);
let mut inner_rect = outer_rect_bounds.shrink2(margin);
// Make sure we don't shrink to the negative:
@ -795,12 +807,6 @@ where
responses.push(NodeResponse::DeleteNodeUi(self.node_id));
};
let window_response = ui.interact(
outer_rect,
Id::new((self.node_id, "window")),
Sense::click_and_drag(),
);
// Movement
let drag_delta = window_response.drag_delta();
if drag_delta.length_sq() > 0.0 {