mirror of
https://github.com/eliasstepanik/egui_node_graph.git
synced 2026-01-11 13:58:28 +00:00
Handle moving multiple nodes at the same time with box selection
This also introduces a new NodeResponse to indicate node movement
This commit is contained in:
parent
14ca3b3b97
commit
7b70b706b5
@ -40,6 +40,10 @@ pub enum NodeResponse<UserResponse: UserResponseTrait, NodeData: NodeDataTrait>
|
|||||||
},
|
},
|
||||||
/// Emitted when a node is interacted with, and should be raised
|
/// Emitted when a node is interacted with, and should be raised
|
||||||
RaiseNode(NodeId),
|
RaiseNode(NodeId),
|
||||||
|
MoveNode {
|
||||||
|
node: NodeId,
|
||||||
|
drag_delta: Vec2,
|
||||||
|
},
|
||||||
User(UserResponse),
|
User(UserResponse),
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -329,6 +333,17 @@ where
|
|||||||
self.node_order.remove(old_pos);
|
self.node_order.remove(old_pos);
|
||||||
self.node_order.push(*node_id);
|
self.node_order.push(*node_id);
|
||||||
}
|
}
|
||||||
|
NodeResponse::MoveNode { node, drag_delta } => {
|
||||||
|
self.node_positions[*node] += *drag_delta;
|
||||||
|
// Handle multi-node selection movement
|
||||||
|
if self.selected_nodes.contains(node) && self.selected_nodes.len() > 1 {
|
||||||
|
for n in self.selected_nodes.iter().copied() {
|
||||||
|
if n != *node {
|
||||||
|
self.node_positions[n] += *drag_delta;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
NodeResponse::User(_) => {
|
NodeResponse::User(_) => {
|
||||||
// These are handled by the user code.
|
// These are handled by the user code.
|
||||||
}
|
}
|
||||||
@ -767,8 +782,12 @@ where
|
|||||||
);
|
);
|
||||||
|
|
||||||
// Movement
|
// Movement
|
||||||
*self.position += window_response.drag_delta();
|
let drag_delta = window_response.drag_delta();
|
||||||
if window_response.drag_delta().length_sq() > 0.0 {
|
if drag_delta.length_sq() > 0.0 {
|
||||||
|
responses.push(NodeResponse::MoveNode {
|
||||||
|
node: self.node_id,
|
||||||
|
drag_delta,
|
||||||
|
});
|
||||||
responses.push(NodeResponse::RaiseNode(self.node_id));
|
responses.push(NodeResponse::RaiseNode(self.node_id));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user