forked from bartvdbraak/blender
Fix T43201: Update the "in use" flags of sockets before drawing,
so value buttons are displayed when the link is not used.
This commit is contained in:
parent
dd5d31b515
commit
90a8aa2dab
@ -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);
|
||||
|
@ -2881,6 +2881,32 @@ static void ntree_update_node_level(bNodeTree *ntree)
|
||||
}
|
||||
}
|
||||
|
||||
void ntreeTagUsedSockets(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->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 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;
|
||||
@ -2891,19 +2917,14 @@ static void ntree_update_link_pointers(bNodeTree *ntree)
|
||||
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->fromsock->flag |= SOCK_IN_USE;
|
||||
link->tosock->flag |= SOCK_IN_USE;
|
||||
}
|
||||
|
||||
ntreeTagUsedSockets(ntree);
|
||||
}
|
||||
|
||||
static void ntree_validate_links(bNodeTree *ntree)
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user