summaryrefslogtreecommitdiff
path: root/scene/gui
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2023-01-05 12:58:20 +0100
committerRémi Verschelde <rverschelde@gmail.com>2023-01-05 12:58:20 +0100
commit778684ffaa4791a9b27a6749a2b04eac8cb93aba (patch)
tree20e09e53ca02b04a50e66f993859a2fa4b38e489 /scene/gui
parenta5e43daca101a7f5eddbe8e9880763e48e812a9a (diff)
parent8302f17adf66b569ebe55a71b1fb8b84e5b2064a (diff)
Merge pull request #70933 from fire/empty-organize-graph-node
Update GraphEdit to automatically arrange nodes if nothing is selected
Diffstat (limited to 'scene/gui')
-rw-r--r--scene/gui/graph_edit.cpp9
1 files changed, 7 insertions, 2 deletions
diff --git a/scene/gui/graph_edit.cpp b/scene/gui/graph_edit.cpp
index 1c4c8c2574..4c1ef644a4 100644
--- a/scene/gui/graph_edit.cpp
+++ b/scene/gui/graph_edit.cpp
@@ -2134,6 +2134,7 @@ void GraphEdit::arrange_nodes() {
Dictionary node_names;
HashSet<StringName> selected_nodes;
+ bool arrange_entire_graph = true;
for (int i = get_child_count() - 1; i >= 0; i--) {
GraphNode *gn = Object::cast_to<GraphNode>(get_child(i));
if (!gn) {
@@ -2141,6 +2142,10 @@ void GraphEdit::arrange_nodes() {
}
node_names[gn->get_name()] = gn;
+
+ if (gn->is_selected()) {
+ arrange_entire_graph = false;
+ }
}
HashMap<StringName, HashSet<StringName>> upper_neighbours;
@@ -2156,12 +2161,12 @@ void GraphEdit::arrange_nodes() {
continue;
}
- if (gn->is_selected()) {
+ if (gn->is_selected() || arrange_entire_graph) {
selected_nodes.insert(gn->get_name());
HashSet<StringName> s;
for (List<Connection>::Element *E = connections.front(); E; E = E->next()) {
GraphNode *p_from = Object::cast_to<GraphNode>(node_names[E->get().from]);
- if (E->get().to == gn->get_name() && p_from->is_selected() && E->get().to != E->get().from) {
+ if (E->get().to == gn->get_name() && (p_from->is_selected() || arrange_entire_graph) && E->get().to != E->get().from) {
if (!s.has(p_from->get_name())) {
s.insert(p_from->get_name());
}