[Bf-blender-cvs] [400151833db] master: Nodes: Avoid unnecessary sorting when selecting or moving nodes

Hans Goudey noreply at git.blender.org
Tue Sep 13 04:47:27 CEST 2022


Commit: 400151833db01928a62a13b12f047cd0f90c6ed2
Author: Hans Goudey
Date:   Mon Sep 12 18:21:04 2022 -0500
Branches: master
https://developer.blender.org/rB400151833db01928a62a13b12f047cd0f90c6ed2

Nodes: Avoid unnecessary sorting when selecting or moving nodes

Previously the nodes were sorted wven when there was no change.
This is a fixed version of e3ef6a6660032ca18, which was reverted by
dc937c5aee4532.

===================================================================

M	source/blender/editors/space_node/node_relationships.cc
M	source/blender/editors/space_node/node_select.cc

===================================================================

diff --git a/source/blender/editors/space_node/node_relationships.cc b/source/blender/editors/space_node/node_relationships.cc
index 7dbaa8ccd6d..929fb64bd70 100644
--- a/source/blender/editors/space_node/node_relationships.cc
+++ b/source/blender/editors/space_node/node_relationships.cc
@@ -1727,32 +1727,34 @@ static int node_attach_invoke(bContext *C, wmOperator *UNUSED(op), const wmEvent
   SpaceNode &snode = *CTX_wm_space_node(C);
   bNodeTree &ntree = *snode.edittree;
   bNode *frame = node_find_frame_to_attach(region, ntree, event->mval);
+  if (frame == nullptr) {
+    /* Return "finished" so that auto offset operator macros can work. */
+    return OPERATOR_FINISHED;
+  }
 
-  if (frame) {
-    LISTBASE_FOREACH_BACKWARD (bNode *, node, &ntree.nodes) {
-      if (node->flag & NODE_SELECT) {
-        if (node->parent == nullptr) {
-          /* disallow moving a parent into its child */
-          if (nodeAttachNodeCheck(frame, node) == false) {
-            /* attach all unparented nodes */
-            nodeAttachNode(node, frame);
-          }
+  LISTBASE_FOREACH_BACKWARD (bNode *, node, &ntree.nodes) {
+    if (node->flag & NODE_SELECT) {
+      if (node->parent == nullptr) {
+        /* disallow moving a parent into its child */
+        if (nodeAttachNodeCheck(frame, node) == false) {
+          /* attach all unparented nodes */
+          nodeAttachNode(node, frame);
         }
-        else {
-          /* attach nodes which share parent with the frame */
-          bNode *parent;
-          for (parent = frame->parent; parent; parent = parent->parent) {
-            if (parent == node->parent) {
-              break;
-            }
+      }
+      else {
+        /* attach nodes which share parent with the frame */
+        bNode *parent;
+        for (parent = frame->parent; parent; parent = parent->parent) {
+          if (parent == node->parent) {
+            break;
           }
+        }
 
-          if (parent) {
-            /* disallow moving a parent into its child */
-            if (nodeAttachNodeCheck(frame, node) == false) {
-              nodeDetachNode(node);
-              nodeAttachNode(node, frame);
-            }
+        if (parent) {
+          /* disallow moving a parent into its child */
+          if (nodeAttachNodeCheck(frame, node) == false) {
+            nodeDetachNode(node);
+            nodeAttachNode(node, frame);
           }
         }
       }
diff --git a/source/blender/editors/space_node/node_select.cc b/source/blender/editors/space_node/node_select.cc
index 1f1ce9c0c2b..d93b205b1b7 100644
--- a/source/blender/editors/space_node/node_select.cc
+++ b/source/blender/editors/space_node/node_select.cc
@@ -644,28 +644,29 @@ static bool node_mouse_select(bContext *C,
     }
   }
 
-  /* update node order */
-  if (changed || found) {
-    bool active_texture_changed = false;
-    bool viewer_node_changed = false;
-    if ((node != nullptr) && (node_was_selected == false || params->select_passthrough == false)) {
-      viewer_node_changed = (node->flag & NODE_DO_OUTPUT) == 0 && node->type == GEO_NODE_VIEWER;
-      ED_node_set_active(&bmain, &snode, snode.edittree, node, &active_texture_changed);
-    }
-    else if (node != nullptr && node->type == GEO_NODE_VIEWER) {
-      ED_spreadsheet_context_paths_set_geometry_node(&bmain, &snode, node);
-    }
-    ED_node_set_active_viewer_key(&snode);
-    node_sort(*snode.edittree);
-    if ((active_texture_changed && has_workbench_in_texture_color(wm, scene, ob)) ||
-        viewer_node_changed) {
-      DEG_id_tag_update(&snode.edittree->id, ID_RECALC_COPY_ON_WRITE);
-    }
+  if (!(changed || found)) {
+    return false;
+  }
 
-    WM_event_add_notifier(C, NC_NODE | NA_SELECTED, nullptr);
+  bool active_texture_changed = false;
+  bool viewer_node_changed = false;
+  if ((node != nullptr) && (node_was_selected == false || params->select_passthrough == false)) {
+    viewer_node_changed = (node->flag & NODE_DO_OUTPUT) == 0 && node->type == GEO_NODE_VIEWER;
+    ED_node_set_active(&bmain, &snode, snode.edittree, node, &active_texture_changed);
   }
+  else if (node != nullptr && node->type == GEO_NODE_VIEWER) {
+    ED_spreadsheet_context_paths_set_geometry_node(&bmain, &snode, node);
+  }
+  ED_node_set_active_viewer_key(&snode);
+  node_sort(*snode.edittree);
+  if ((active_texture_changed && has_workbench_in_texture_color(wm, scene, ob)) ||
+      viewer_node_changed) {
+    DEG_id_tag_update(&snode.edittree->id, ID_RECALC_COPY_ON_WRITE);
+  }
+
+  WM_event_add_notifier(C, NC_NODE | NA_SELECTED, nullptr);
 
-  return changed || found;
+  return true;
 }
 
 static int node_select_exec(bContext *C, wmOperator *op)



More information about the Bf-blender-cvs mailing list