mirror of
https://github.com/eliasstepanik/egui_node_graph.git
synced 2026-01-11 13:58:28 +00:00
Fix node interaction bug
This commit is contained in:
parent
4ce43f5521
commit
790d9ef5f9
@ -144,6 +144,17 @@ where
|
|||||||
inconsistent self. It has either more or less values than the graph."
|
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 */
|
/* Draw nodes */
|
||||||
for node_id in self.node_order.iter().copied() {
|
for node_id in self.node_order.iter().copied() {
|
||||||
let responses = GraphNodeWidget {
|
let responses = GraphNodeWidget {
|
||||||
@ -165,15 +176,6 @@ where
|
|||||||
delayed_responses.extend(responses);
|
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 */
|
/* Draw the node finder, if open */
|
||||||
let mut should_close_node_finder = false;
|
let mut should_close_node_finder = false;
|
||||||
if let Some(ref mut node_finder) = self.node_finder {
|
if let Some(ref mut node_finder) = self.node_finder {
|
||||||
@ -510,6 +512,16 @@ where
|
|||||||
let background_shape = ui.painter().add(Shape::Noop);
|
let background_shape = ui.painter().add(Shape::Noop);
|
||||||
|
|
||||||
let outer_rect_bounds = ui.available_rect_before_wrap();
|
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);
|
let mut inner_rect = outer_rect_bounds.shrink2(margin);
|
||||||
|
|
||||||
// Make sure we don't shrink to the negative:
|
// Make sure we don't shrink to the negative:
|
||||||
@ -795,12 +807,6 @@ where
|
|||||||
responses.push(NodeResponse::DeleteNodeUi(self.node_id));
|
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
|
// Movement
|
||||||
let drag_delta = window_response.drag_delta();
|
let drag_delta = window_response.drag_delta();
|
||||||
if drag_delta.length_sq() > 0.0 {
|
if drag_delta.length_sq() > 0.0 {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user