[Bf-blender-cvs] [bee6c17] master: Code Cleanup: de-duplicate nested node tree checking

Campbell Barton noreply at git.blender.org
Mon Jan 27 10:19:43 CET 2014


Commit: bee6c1779e9337fbc0b34d9747b4aeb647b44cfa
Author: Campbell Barton
Date:   Mon Jan 27 20:17:56 2014 +1100
https://developer.blender.org/rBbee6c1779e9337fbc0b34d9747b4aeb647b44cfa

Code Cleanup: de-duplicate nested node tree checking

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

M	source/blender/blenkernel/BKE_node.h
M	source/blender/blenkernel/intern/node.c
M	source/blender/editors/space_node/node_draw.c
M	source/blender/editors/space_node/node_edit.c

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

diff --git a/source/blender/blenkernel/BKE_node.h b/source/blender/blenkernel/BKE_node.h
index e3af696..fc0359d 100644
--- a/source/blender/blenkernel/BKE_node.h
+++ b/source/blender/blenkernel/BKE_node.h
@@ -353,7 +353,8 @@ void              ntreeUserDecrefID(struct bNodeTree *ntree);
 struct bNodeTree *ntreeFromID(struct ID *id);
 
 void              ntreeMakeLocal(struct bNodeTree *ntree);
-int               ntreeHasType(struct bNodeTree *ntree, int type);
+bool              ntreeHasType(const struct bNodeTree *ntree, int type);
+bool              ntreeHasTree(const struct bNodeTree *ntree, const struct bNodeTree *lookup);
 void              ntreeUpdateTree(struct Main *main, struct bNodeTree *ntree);
 /* XXX Currently each tree update call does call to ntreeVerifyNodes too.
  * Some day this should be replaced by a decent depsgraph automatism!
diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c
index 34b016a..79f7741 100644
--- a/source/blender/blenkernel/intern/node.c
+++ b/source/blender/blenkernel/intern/node.c
@@ -2289,7 +2289,7 @@ void ntreeInterfaceTypeUpdate(bNodeTree *ntree)
 
 /* ************ find stuff *************** */
 
-int ntreeHasType(bNodeTree *ntree, int type)
+bool ntreeHasType(const bNodeTree *ntree, int type)
 {
 	bNode *node;
 	
@@ -2300,6 +2300,21 @@ int ntreeHasType(bNodeTree *ntree, int type)
 	return 0;
 }
 
+bool ntreeHasTree(const bNodeTree *ntree, const bNodeTree *lookup)
+{
+	bNode *node;
+
+	if (ntree == lookup)
+		return true;
+
+	for (node = ntree->nodes.first; node; node = node->next)
+		if (node->type == NODE_GROUP && node->id)
+			if (ntreeHasTree((bNodeTree *)node->id, lookup))
+				return true;
+
+	return false;
+}
+
 bNodeLink *nodeFindLink(bNodeTree *ntree, bNodeSocket *from, bNodeSocket *to)
 {
 	bNodeLink *link;
diff --git a/source/blender/editors/space_node/node_draw.c b/source/blender/editors/space_node/node_draw.c
index 78116ee..08375fa 100644
--- a/source/blender/editors/space_node/node_draw.c
+++ b/source/blender/editors/space_node/node_draw.c
@@ -139,21 +139,6 @@ void ED_node_tag_update_id(ID *id)
 	}
 }
 
-static int has_nodetree(bNodeTree *ntree, bNodeTree *lookup)
-{
-	bNode *node;
-	
-	if (ntree == lookup)
-		return 1;
-	
-	for (node = ntree->nodes.first; node; node = node->next)
-		if (node->type == NODE_GROUP && node->id)
-			if (has_nodetree((bNodeTree *)node->id, lookup))
-				return 1;
-	
-	return 0;
-}
-
 void ED_node_tag_update_nodetree(Main *bmain, bNodeTree *ntree)
 {
 	if (!ntree)
@@ -162,7 +147,7 @@ void ED_node_tag_update_nodetree(Main *bmain, bNodeTree *ntree)
 	/* look through all datablocks, to support groups */
 	FOREACH_NODETREE(bmain, tntree, id) {
 		/* check if nodetree uses the group */
-		if (has_nodetree(tntree, ntree))
+		if (ntreeHasTree(tntree, ntree))
 			ED_node_tag_update_id(id);
 	} FOREACH_NODETREE_END
 	
diff --git a/source/blender/editors/space_node/node_edit.c b/source/blender/editors/space_node/node_edit.c
index d6e8545..0f70c5a 100644
--- a/source/blender/editors/space_node/node_edit.c
+++ b/source/blender/editors/space_node/node_edit.c
@@ -329,21 +329,6 @@ int composite_node_editable(bContext *C)
 	return 0;
 }
 
-static int has_nodetree(bNodeTree *ntree, bNodeTree *lookup)
-{
-	bNode *node;
-	
-	if (ntree == lookup)
-		return 1;
-	
-	for (node = ntree->nodes.first; node; node = node->next)
-		if (node->type == NODE_GROUP && node->id)
-			if (has_nodetree((bNodeTree *)node->id, lookup))
-				return 1;
-	
-	return 0;
-}
-
 void snode_dag_update(bContext *C, SpaceNode *snode)
 {
 	Main *bmain = CTX_data_main(C);
@@ -351,7 +336,7 @@ void snode_dag_update(bContext *C, SpaceNode *snode)
 	/* for groups, update all ID's using this */
 	if (snode->edittree != snode->nodetree) {
 		FOREACH_NODETREE(bmain, tntree, id) {
-			if (has_nodetree(tntree, snode->edittree))
+			if (ntreeHasTree(tntree, snode->edittree))
 				DAG_id_tag_update(id, 0);
 		} FOREACH_NODETREE_END
 	}
@@ -675,7 +660,7 @@ void ED_node_set_active(Main *bmain, bNodeTree *ntree, bNode *node)
 				Material *ma;
 
 				for (ma = bmain->mat.first; ma; ma = ma->id.next)
-					if (ma->nodetree && ma->use_nodes && has_nodetree(ma->nodetree, ntree))
+					if (ma->nodetree && ma->use_nodes && ntreeHasTree(ma->nodetree, ntree))
 						GPU_material_free(ma);
 
 				WM_main_add_notifier(NC_IMAGE, NULL);
@@ -704,7 +689,7 @@ void ED_node_set_active(Main *bmain, bNodeTree *ntree, bNode *node)
 				Scene *scene;
 
 				for (scene = bmain->scene.first; scene; scene = scene->id.next) {
-					if (scene->nodetree && scene->use_nodes && has_nodetree(scene->nodetree, ntree)) {
+					if (scene->nodetree && scene->use_nodes && ntreeHasTree(scene->nodetree, ntree)) {
 						if (node->id == NULL || node->id == (ID *)scene) {
 							scene->r.actlay = node->custom1;
 						}




More information about the Bf-blender-cvs mailing list