[Bf-blender-cvs] [90a8aa2] master: Fix T43201: Update the "in use" flags of sockets before drawing, so value buttons are displayed when the link is not used.

Lukas Tönne noreply at git.blender.org
Wed Jan 14 11:15:59 CET 2015


Commit: 90a8aa2dab381f21704c3199d4fcd8ed64e059ce
Author: Lukas Tönne
Date:   Wed Jan 14 11:14:21 2015 +0100
Branches: master
https://developer.blender.org/rB90a8aa2dab381f21704c3199d4fcd8ed64e059ce

Fix T43201: Update the "in use" flags of sockets before drawing,
so value buttons are displayed when the link is not used.

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

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

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

diff --git a/source/blender/blenkernel/BKE_node.h b/source/blender/blenkernel/BKE_node.h
index cb96538..573fa60 100644
--- a/source/blender/blenkernel/BKE_node.h
+++ b/source/blender/blenkernel/BKE_node.h
@@ -485,6 +485,7 @@ void            nodeUpdateInternalLinks(struct bNodeTree *ntree, struct bNode *n
 void            nodeSynchronizeID(struct bNode *node, bool copy_to_id);
 
 int             nodeSocketIsHidden(struct bNodeSocket *sock);
+void            ntreeTagUsedSockets(struct bNodeTree *ntree);
 
 /* Node Clipboard */
 void                   BKE_node_clipboard_init(struct bNodeTree *ntree);
diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c
index 7414a85..039af94 100644
--- a/source/blender/blenkernel/intern/node.c
+++ b/source/blender/blenkernel/intern/node.c
@@ -2881,7 +2881,7 @@ static void ntree_update_node_level(bNodeTree *ntree)
 	}
 }
 
-static void ntree_update_link_pointers(bNodeTree *ntree)
+void ntreeTagUsedSockets(bNodeTree *ntree)
 {
 	bNode *node;
 	bNodeSocket *sock;
@@ -2890,22 +2890,43 @@ static void ntree_update_link_pointers(bNodeTree *ntree)
 	/* first clear data */
 	for (node = ntree->nodes.first; node; node = node->next) {
 		for (sock = node->inputs.first; sock; sock = sock->next) {
-			sock->link = NULL;
 			sock->flag &= ~SOCK_IN_USE;
 		}
 		for (sock = node->outputs.first; sock; sock = sock->next) {
 			sock->flag &= ~SOCK_IN_USE;
 		}
 	}
-
+	
 	for (link = ntree->links.first; link; link = link->next) {
-		link->tosock->link = link;
+		/* link is unused if either side is disabled */
+		if ((link->fromsock->flag & SOCK_UNAVAIL) || (link->tosock->flag & SOCK_UNAVAIL))
+			continue;
 		
 		link->fromsock->flag |= SOCK_IN_USE;
 		link->tosock->flag |= SOCK_IN_USE;
 	}
 }
 
+static void ntree_update_link_pointers(bNodeTree *ntree)
+{
+	bNode *node;
+	bNodeSocket *sock;
+	bNodeLink *link;
+	
+	/* first clear data */
+	for (node = ntree->nodes.first; node; node = node->next) {
+		for (sock = node->inputs.first; sock; sock = sock->next) {
+			sock->link = NULL;
+		}
+	}
+
+	for (link = ntree->links.first; link; link = link->next) {
+		link->tosock->link = link;
+	}
+	
+	ntreeTagUsedSockets(ntree);
+}
+
 static void ntree_validate_links(bNodeTree *ntree)
 {
 	bNodeLink *link;
diff --git a/source/blender/editors/space_node/node_draw.c b/source/blender/editors/space_node/node_draw.c
index 127e2d3..16ad63b 100644
--- a/source/blender/editors/space_node/node_draw.c
+++ b/source/blender/editors/space_node/node_draw.c
@@ -1133,6 +1133,9 @@ void node_update_nodetree(const bContext *C, bNodeTree *ntree)
 {
 	bNode *node;
 	
+	/* make sure socket "used" tags are correct, for displaying value buttons */
+	ntreeTagUsedSockets(ntree);
+	
 	/* update nodes front to back, so children sizes get updated before parents */
 	for (node = ntree->nodes.last; node; node = node->prev) {
 		node_update(C, ntree, node);




More information about the Bf-blender-cvs mailing list