Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/blenkernel/intern/node.c')
-rw-r--r--source/blender/blenkernel/intern/node.c467
1 files changed, 311 insertions, 156 deletions
diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c
index fe27e23a6bf..8a3f973ae5f 100644
--- a/source/blender/blenkernel/intern/node.c
+++ b/source/blender/blenkernel/intern/node.c
@@ -109,12 +109,14 @@ static void node_add_sockets_from_type(bNodeTree *ntree, bNode *node, bNodeType
static void node_init(const struct bContext *C, bNodeTree *ntree, bNode *node)
{
bNodeType *ntype = node->typeinfo;
- if (ntype == &NodeTypeUndefined)
+ if (ntype == &NodeTypeUndefined) {
return;
+ }
/* only do this once */
- if (node->flag & NODE_INIT)
+ if (node->flag & NODE_INIT) {
return;
+ }
node->flag = NODE_SELECT | NODE_OPTIONS | ntype->flag;
node->width = ntype->width;
@@ -133,14 +135,17 @@ static void node_init(const struct bContext *C, bNodeTree *ntree, bNode *node)
node_add_sockets_from_type(ntree, node, ntype);
- if (ntype->initfunc != NULL)
+ if (ntype->initfunc != NULL) {
ntype->initfunc(ntree, node);
+ }
- if (ntree->typeinfo->node_add_init != NULL)
+ if (ntree->typeinfo->node_add_init != NULL) {
ntree->typeinfo->node_add_init(ntree, node);
+ }
- if (node->id)
+ if (node->id) {
id_us_plus(node->id);
+ }
/* extra init callback */
if (ntype->initfunc_api) {
@@ -179,8 +184,9 @@ static void node_set_typeinfo(const struct bContext *C,
{
/* for nodes saved in older versions storage can get lost, make undefined then */
if (node->flag & NODE_INIT) {
- if (typeinfo && typeinfo->storagename[0] && !node->storage)
+ if (typeinfo && typeinfo->storagename[0] && !node->storage) {
typeinfo = NULL;
+ }
}
if (typeinfo) {
@@ -229,8 +235,9 @@ static void update_typeinfo(Main *bmain,
bNodeSocketType *socktype,
bool unregister)
{
- if (!bmain)
+ if (!bmain) {
return;
+ }
FOREACH_NODETREE_BEGIN (bmain, ntree, id) {
bNode *node;
@@ -238,30 +245,40 @@ static void update_typeinfo(Main *bmain,
ntree->init |= NTREE_TYPE_INIT;
- if (treetype && STREQ(ntree->idname, treetype->idname))
+ if (treetype && STREQ(ntree->idname, treetype->idname)) {
ntree_set_typeinfo(ntree, unregister ? NULL : treetype);
+ }
/* initialize nodes */
for (node = ntree->nodes.first; node; node = node->next) {
- if (nodetype && STREQ(node->idname, nodetype->idname))
+ if (nodetype && STREQ(node->idname, nodetype->idname)) {
node_set_typeinfo(C, ntree, node, unregister ? NULL : nodetype);
+ }
/* initialize node sockets */
- for (sock = node->inputs.first; sock; sock = sock->next)
- if (socktype && STREQ(sock->idname, socktype->idname))
+ for (sock = node->inputs.first; sock; sock = sock->next) {
+ if (socktype && STREQ(sock->idname, socktype->idname)) {
node_socket_set_typeinfo(ntree, sock, unregister ? NULL : socktype);
- for (sock = node->outputs.first; sock; sock = sock->next)
- if (socktype && STREQ(sock->idname, socktype->idname))
+ }
+ }
+ for (sock = node->outputs.first; sock; sock = sock->next) {
+ if (socktype && STREQ(sock->idname, socktype->idname)) {
node_socket_set_typeinfo(ntree, sock, unregister ? NULL : socktype);
+ }
+ }
}
/* initialize tree sockets */
- for (sock = ntree->inputs.first; sock; sock = sock->next)
- if (socktype && STREQ(sock->idname, socktype->idname))
+ for (sock = ntree->inputs.first; sock; sock = sock->next) {
+ if (socktype && STREQ(sock->idname, socktype->idname)) {
node_socket_set_typeinfo(ntree, sock, unregister ? NULL : socktype);
- for (sock = ntree->outputs.first; sock; sock = sock->next)
- if (socktype && STREQ(sock->idname, socktype->idname))
+ }
+ }
+ for (sock = ntree->outputs.first; sock; sock = sock->next) {
+ if (socktype && STREQ(sock->idname, socktype->idname)) {
node_socket_set_typeinfo(ntree, sock, unregister ? NULL : socktype);
+ }
+ }
}
FOREACH_NODETREE_END;
}
@@ -283,16 +300,20 @@ void ntreeSetTypes(const struct bContext *C, bNodeTree *ntree)
for (node = ntree->nodes.first; node; node = node->next) {
node_set_typeinfo(C, ntree, node, nodeTypeFind(node->idname));
- for (sock = node->inputs.first; sock; sock = sock->next)
+ for (sock = node->inputs.first; sock; sock = sock->next) {
node_socket_set_typeinfo(ntree, sock, nodeSocketTypeFind(sock->idname));
- for (sock = node->outputs.first; sock; sock = sock->next)
+ }
+ for (sock = node->outputs.first; sock; sock = sock->next) {
node_socket_set_typeinfo(ntree, sock, nodeSocketTypeFind(sock->idname));
+ }
}
- for (sock = ntree->inputs.first; sock; sock = sock->next)
+ for (sock = ntree->inputs.first; sock; sock = sock->next) {
node_socket_set_typeinfo(ntree, sock, nodeSocketTypeFind(sock->idname));
- for (sock = ntree->outputs.first; sock; sock = sock->next)
+ }
+ for (sock = ntree->outputs.first; sock; sock = sock->next) {
node_socket_set_typeinfo(ntree, sock, nodeSocketTypeFind(sock->idname));
+ }
}
static GHash *nodetreetypes_hash = NULL;
@@ -306,8 +327,9 @@ bNodeTreeType *ntreeTypeFind(const char *idname)
if (idname[0]) {
nt = BLI_ghash_lookup(nodetreetypes_hash, idname);
- if (nt)
+ if (nt) {
return nt;
+ }
}
return NULL;
@@ -354,8 +376,9 @@ bNodeType *nodeTypeFind(const char *idname)
if (idname[0]) {
nt = BLI_ghash_lookup(nodetypes_hash, idname);
- if (nt)
+ if (nt) {
return nt;
+ }
}
return NULL;
@@ -383,11 +406,13 @@ static void node_free_type(void *nodetype_v)
update_typeinfo(G_MAIN, NULL, NULL, nodetype, NULL, true);
/* XXX deprecated */
- if (nodetype->type == NODE_DYNAMIC)
+ if (nodetype->type == NODE_DYNAMIC) {
free_dynamic_typeinfo(nodetype);
+ }
- if (nodetype->needs_free)
+ if (nodetype->needs_free) {
MEM_freeN(nodetype);
+ }
}
void nodeRegisterType(bNodeType *nt)
@@ -424,8 +449,9 @@ bNodeSocketType *nodeSocketTypeFind(const char *idname)
if (idname[0]) {
st = BLI_ghash_lookup(nodesockettypes_hash, idname);
- if (st)
+ if (st) {
return st;
+ }
}
return NULL;
@@ -471,8 +497,9 @@ struct bNodeSocket *nodeFindSocket(bNode *node, int in_out, const char *identifi
{
bNodeSocket *sock = (in_out == SOCK_IN ? node->inputs.first : node->outputs.first);
for (; sock; sock = sock->next) {
- if (STREQ(sock->identifier, identifier))
+ if (STREQ(sock->identifier, identifier)) {
return sock;
+ }
}
return NULL;
}
@@ -483,8 +510,9 @@ static bool unique_identifier_check(void *arg, const char *identifier)
struct ListBase *lb = arg;
bNodeSocket *sock;
for (sock = lb->first; sock; sock = sock->next) {
- if (STREQ(sock->identifier, identifier))
+ if (STREQ(sock->identifier, identifier)) {
return true;
+ }
}
return false;
}
@@ -761,8 +789,9 @@ static void node_socket_free(bNodeTree *UNUSED(ntree),
MEM_freeN(sock->prop);
}
- if (sock->default_value)
+ if (sock->default_value) {
MEM_freeN(sock->default_value);
+ }
}
void nodeRemoveSocket(bNodeTree *ntree, bNode *node, bNodeSocket *sock)
@@ -832,17 +861,20 @@ int nodeFindNode(bNodeTree *ntree, bNodeSocket *sock, bNode **nodep, int *sockin
for (node = ntree->nodes.first; node; node = node->next) {
tsock = (in_out == SOCK_IN ? node->inputs.first : node->outputs.first);
for (index = 0; tsock; tsock = tsock->next, index++) {
- if (tsock == sock)
+ if (tsock == sock) {
break;
+ }
}
- if (tsock)
+ if (tsock) {
break;
+ }
}
if (node) {
*nodep = node;
- if (sockindex)
+ if (sockindex) {
*sockindex = index;
+ }
return 1;
}
@@ -1071,8 +1103,9 @@ bNodeLink *nodeAddLink(
if (fromsock->in_out == SOCK_OUT && tosock->in_out == SOCK_IN) {
link = MEM_callocN(sizeof(bNodeLink), "link");
- if (ntree)
+ if (ntree) {
BLI_addtail(&ntree->links, link);
+ }
link->fromnode = fromnode;
link->fromsock = fromsock;
link->tonode = tonode;
@@ -1081,16 +1114,18 @@ bNodeLink *nodeAddLink(
else if (fromsock->in_out == SOCK_IN && tosock->in_out == SOCK_OUT) {
/* OK but flip */
link = MEM_callocN(sizeof(bNodeLink), "link");
- if (ntree)
+ if (ntree) {
BLI_addtail(&ntree->links, link);
+ }
link->fromnode = tonode;
link->fromsock = tosock;
link->tonode = fromnode;
link->tosock = fromsock;
}
- if (ntree)
+ if (ntree) {
ntree->update |= NTREE_UPDATE_LINKS;
+ }
return link;
}
@@ -1098,15 +1133,18 @@ bNodeLink *nodeAddLink(
void nodeRemLink(bNodeTree *ntree, bNodeLink *link)
{
/* can be called for links outside a node tree (e.g. clipboard) */
- if (ntree)
+ if (ntree) {
BLI_remlink(&ntree->links, link);
+ }
- if (link->tosock)
+ if (link->tosock) {
link->tosock->link = NULL;
+ }
MEM_freeN(link);
- if (ntree)
+ if (ntree) {
ntree->update |= NTREE_UPDATE_LINKS;
+ }
}
void nodeRemSocketLinks(bNodeTree *ntree, bNodeSocket *sock)
@@ -1133,8 +1171,9 @@ void nodeInternalRelink(bNodeTree *ntree, bNode *node)
bNodeLink *link, *link_next;
/* store link pointers in output sockets, for efficient lookup */
- for (link = node->internal_links.first; link; link = link->next)
+ for (link = node->internal_links.first; link; link = link->next) {
link->tosock->link = link;
+ }
/* redirect downstream links */
for (link = ntree->links.first; link; link = link_next) {
@@ -1153,16 +1192,19 @@ void nodeInternalRelink(bNodeTree *ntree, bNode *node)
/* if the up- or downstream link is invalid,
* the replacement link will be invalid too.
*/
- if (!(fromlink->flag & NODE_LINK_VALID))
+ if (!(fromlink->flag & NODE_LINK_VALID)) {
link->flag &= ~NODE_LINK_VALID;
+ }
ntree->update |= NTREE_UPDATE_LINKS;
}
- else
+ else {
nodeRemLink(ntree, link);
+ }
}
- else
+ else {
nodeRemLink(ntree, link);
+ }
}
}
@@ -1170,8 +1212,9 @@ void nodeInternalRelink(bNodeTree *ntree, bNode *node)
for (link = ntree->links.first; link; link = link_next) {
link_next = link->next;
- if (link->tonode == node)
+ if (link->tonode == node) {
nodeRemLink(ntree, link);
+ }
}
}
@@ -1462,13 +1505,15 @@ bNodePreview *BKE_node_preview_verify(
preview = MEM_callocN(sizeof(bNodePreview), "node preview");
BKE_node_instance_hash_insert(previews, key, preview);
}
- else
+ else {
return NULL;
+ }
}
/* node previews can get added with variable size this way */
- if (xsize == 0 || ysize == 0)
+ if (xsize == 0 || ysize == 0) {
return preview;
+ }
/* sanity checks & initialize */
if (preview->rect) {
@@ -1491,15 +1536,17 @@ bNodePreview *BKE_node_preview_verify(
bNodePreview *BKE_node_preview_copy(bNodePreview *preview)
{
bNodePreview *new_preview = MEM_dupallocN(preview);
- if (preview->rect)
+ if (preview->rect) {
new_preview->rect = MEM_dupallocN(preview->rect);
+ }
return new_preview;
}
void BKE_node_preview_free(bNodePreview *preview)
{
- if (preview->rect)
+ if (preview->rect) {
MEM_freeN(preview->rect);
+ }
MEM_freeN(preview);
}
@@ -1521,18 +1568,21 @@ static void node_preview_init_tree_recursive(bNodeInstanceHash *previews,
BKE_node_preview_verify(previews, key, xsize, ysize, create);
}
- if (node->type == NODE_GROUP && node->id)
+ if (node->type == NODE_GROUP && node->id) {
node_preview_init_tree_recursive(previews, (bNodeTree *)node->id, key, xsize, ysize, create);
+ }
}
}
void BKE_node_preview_init_tree(bNodeTree *ntree, int xsize, int ysize, int create_previews)
{
- if (!ntree)
+ if (!ntree) {
return;
+ }
- if (!ntree->previews)
+ if (!ntree->previews) {
ntree->previews = BKE_node_instance_hash_new("node previews");
+ }
node_preview_init_tree_recursive(
ntree->previews, ntree, NODE_INSTANCE_KEY_BASE, xsize, ysize, create_previews);
@@ -1546,18 +1596,21 @@ static void node_preview_tag_used_recursive(bNodeInstanceHash *previews,
for (node = ntree->nodes.first; node; node = node->next) {
bNodeInstanceKey key = BKE_node_instance_key(parent_key, ntree, node);
- if (BKE_node_preview_used(node))
+ if (BKE_node_preview_used(node)) {
BKE_node_instance_hash_tag_key(previews, key);
+ }
- if (node->type == NODE_GROUP && node->id)
+ if (node->type == NODE_GROUP && node->id) {
node_preview_tag_used_recursive(previews, (bNodeTree *)node->id, key);
+ }
}
}
void BKE_node_preview_remove_unused(bNodeTree *ntree)
{
- if (!ntree || !ntree->previews)
+ if (!ntree || !ntree->previews) {
return;
+ }
/* use the instance hash functions for tagging and removing unused previews */
BKE_node_instance_hash_clear_tags(ntree->previews);
@@ -1569,8 +1622,9 @@ void BKE_node_preview_remove_unused(bNodeTree *ntree)
void BKE_node_preview_free_tree(bNodeTree *ntree)
{
- if (!ntree)
+ if (!ntree) {
return;
+ }
if (ntree->previews) {
BKE_node_instance_hash_free(ntree->previews, (bNodeInstanceValueFP)BKE_node_preview_free);
@@ -1580,16 +1634,18 @@ void BKE_node_preview_free_tree(bNodeTree *ntree)
void BKE_node_preview_clear(bNodePreview *preview)
{
- if (preview && preview->rect)
+ if (preview && preview->rect) {
memset(preview->rect, 0, MEM_allocN_len(preview->rect));
+ }
}
void BKE_node_preview_clear_tree(bNodeTree *ntree)
{
bNodeInstanceHashIterator iter;
- if (!ntree || !ntree->previews)
+ if (!ntree || !ntree->previews) {
return;
+ }
NODE_INSTANCE_HASH_ITER (iter, ntree->previews) {
bNodePreview *preview = BKE_node_instance_hash_iterator_get_value(&iter);
@@ -1616,16 +1672,18 @@ void BKE_node_preview_sync_tree(bNodeTree *to_ntree, bNodeTree *from_ntree)
bNodeInstanceHash *to_previews = to_ntree->previews;
bNodeInstanceHashIterator iter;
- if (!from_previews || !to_previews)
+ if (!from_previews || !to_previews) {
return;
+ }
NODE_INSTANCE_HASH_ITER (iter, from_previews) {
bNodeInstanceKey key = BKE_node_instance_hash_iterator_get_key(&iter);
bNodePreview *from = BKE_node_instance_hash_iterator_get_value(&iter);
bNodePreview *to = BKE_node_instance_hash_lookup(to_previews, key);
- if (from && to)
+ if (from && to) {
node_preview_sync(to, from);
+ }
}
}
@@ -1633,8 +1691,9 @@ void BKE_node_preview_merge_tree(bNodeTree *to_ntree, bNodeTree *from_ntree, boo
{
if (remove_old || !to_ntree->previews) {
/* free old previews */
- if (to_ntree->previews)
+ if (to_ntree->previews) {
BKE_node_instance_hash_free(to_ntree->previews, (bNodeInstanceValueFP)BKE_node_preview_free);
+ }
/* transfer previews */
to_ntree->previews = from_ntree->previews;
@@ -1702,18 +1761,22 @@ void nodeUnlinkNode(bNodeTree *ntree, bNode *node)
if (link->fromnode == node) {
lb = &node->outputs;
- if (link->tonode)
+ if (link->tonode) {
link->tonode->update |= NODE_UPDATE;
+ }
}
- else if (link->tonode == node)
+ else if (link->tonode == node) {
lb = &node->inputs;
- else
+ }
+ else {
lb = NULL;
+ }
if (lb) {
for (sock = lb->first; sock; sock = sock->next) {
- if (link->fromsock == sock || link->tosock == sock)
+ if (link->fromsock == sock || link->tosock == sock) {
break;
+ }
}
if (sock) {
nodeRemLink(ntree, link);
@@ -1726,8 +1789,9 @@ static void node_unlink_attached(bNodeTree *ntree, bNode *parent)
{
bNode *node;
for (node = ntree->nodes.first; node; node = node->next) {
- if (node->parent == parent)
+ if (node->parent == parent) {
nodeDetachNode(node);
+ }
}
}
@@ -1747,8 +1811,9 @@ static void node_free_node(bNodeTree *ntree, bNode *node)
BLI_remlink(&ntree->nodes, node);
- if (ntree->typeinfo->free_node_cache)
+ if (ntree->typeinfo->free_node_cache) {
ntree->typeinfo->free_node_cache(ntree, node);
+ }
/* texture node has bad habit of keeping exec data around */
if (ntree->type == NTREE_TEXTURE && ntree->execdata) {
@@ -1784,8 +1849,9 @@ static void node_free_node(bNodeTree *ntree, bNode *node)
MEM_freeN(node);
- if (ntree)
+ if (ntree) {
ntree->update |= NTREE_UPDATE_NODES;
+ }
}
void ntreeFreeLocalNode(bNodeTree *ntree, bNode *node)
@@ -1840,8 +1906,9 @@ static void node_socket_interface_free(bNodeTree *UNUSED(ntree), bNodeSocket *so
MEM_freeN(sock->prop);
}
- if (sock->default_value)
+ if (sock->default_value) {
MEM_freeN(sock->default_value);
+ }
}
static void free_localized_node_groups(bNodeTree *ntree)
@@ -1853,8 +1920,9 @@ static void free_localized_node_groups(bNodeTree *ntree)
* since it is a localized copy itself (no risk of accessing free'd
* data in main, see [#37939]).
*/
- if (!(ntree->id.tag & LIB_TAG_LOCALIZED))
+ if (!(ntree->id.tag & LIB_TAG_LOCALIZED)) {
return;
+ }
for (node = ntree->nodes.first; node; node = node->next) {
if ((ELEM(node->type, NODE_GROUP, NODE_CUSTOM_GROUP)) && node->id) {
@@ -1921,8 +1989,9 @@ void ntreeFreeTree(bNodeTree *ntree)
BKE_node_instance_hash_free(ntree->previews, (bNodeInstanceValueFP)BKE_node_preview_free);
}
- if (ntree->duplilock)
+ if (ntree->duplilock) {
BLI_mutex_free(ntree->duplilock);
+ }
if (ntree->id.tag & LIB_TAG_LOCALIZED) {
BKE_libblock_free_data(&ntree->id, true);
@@ -1948,11 +2017,13 @@ void ntreeFreeLocalTree(bNodeTree *ntree)
void ntreeFreeCache(bNodeTree *ntree)
{
- if (ntree == NULL)
+ if (ntree == NULL) {
return;
+ }
- if (ntree->typeinfo->free_cache)
+ if (ntree->typeinfo->free_cache) {
ntree->typeinfo->free_cache(ntree);
+ }
}
void ntreeSetOutput(bNodeTree *ntree)
@@ -1966,8 +2037,9 @@ void ntreeSetOutput(bNodeTree *ntree)
int output = 0;
/* we need a check for which output node should be tagged like this, below an exception */
- if (node->type == CMP_NODE_OUTPUT_FILE)
+ if (node->type == CMP_NODE_OUTPUT_FILE) {
continue;
+ }
/* there is more types having output class, each one is checked */
for (tnode = ntree->nodes.first; tnode; tnode = tnode->next) {
@@ -1981,8 +2053,9 @@ void ntreeSetOutput(bNodeTree *ntree)
ELEM(node->type, CMP_NODE_VIEWER, CMP_NODE_SPLITVIEWER))) {
if (tnode->flag & NODE_DO_OUTPUT) {
output++;
- if (output > 1)
+ if (output > 1) {
tnode->flag &= ~NODE_DO_OUTPUT;
+ }
}
}
}
@@ -1991,15 +2064,17 @@ void ntreeSetOutput(bNodeTree *ntree)
if (tnode->type == node->type) {
if (tnode->flag & NODE_DO_OUTPUT) {
output++;
- if (output > 1)
+ if (output > 1) {
tnode->flag &= ~NODE_DO_OUTPUT;
+ }
}
}
}
}
}
- if (output == 0)
+ if (output == 0) {
node->flag |= NODE_DO_OUTPUT;
+ }
}
/* group node outputs use this flag too */
@@ -2011,13 +2086,15 @@ void ntreeSetOutput(bNodeTree *ntree)
if (tnode->type == NODE_GROUP_OUTPUT) {
if (tnode->flag & NODE_DO_OUTPUT) {
output++;
- if (output > 1)
+ if (output > 1) {
tnode->flag &= ~NODE_DO_OUTPUT;
+ }
}
}
}
- if (output == 0)
+ if (output == 0) {
node->flag |= NODE_DO_OUTPUT;
+ }
}
}
@@ -2053,18 +2130,22 @@ void ntreeMakeLocal(Main *bmain, bNodeTree *ntree, bool id_in_mainlist, const bo
int ntreeNodeExists(bNodeTree *ntree, bNode *testnode)
{
bNode *node = ntree->nodes.first;
- for (; node; node = node->next)
- if (node == testnode)
+ for (; node; node = node->next) {
+ if (node == testnode) {
return 1;
+ }
+ }
return 0;
}
int ntreeOutputExists(bNode *node, bNodeSocket *testsock)
{
bNodeSocket *sock = node->outputs.first;
- for (; sock; sock = sock->next)
- if (sock == testsock)
+ for (; sock; sock = sock->next) {
+ if (sock == testsock) {
return 1;
+ }
+ }
return 0;
}
@@ -2119,15 +2200,17 @@ bNodeTree *ntreeLocalize(bNodeTree *ntree)
node->new_node->original = node;
}
- if (ntree->typeinfo->localize)
+ if (ntree->typeinfo->localize) {
ntree->typeinfo->localize(ltree, ntree);
+ }
BLI_mutex_unlock(ntree->duplilock);
return ltree;
}
- else
+ else {
return NULL;
+ }
}
/* sync local composite with real tree */
@@ -2136,8 +2219,9 @@ bNodeTree *ntreeLocalize(bNodeTree *ntree)
void ntreeLocalSync(bNodeTree *localtree, bNodeTree *ntree)
{
if (localtree && ntree) {
- if (ntree->typeinfo->local_sync)
+ if (ntree->typeinfo->local_sync) {
ntree->typeinfo->local_sync(localtree, ntree);
+ }
}
}
@@ -2146,8 +2230,9 @@ void ntreeLocalSync(bNodeTree *localtree, bNodeTree *ntree)
void ntreeLocalMerge(Main *bmain, bNodeTree *localtree, bNodeTree *ntree)
{
if (ntree && localtree) {
- if (ntree->typeinfo->local_merge)
+ if (ntree->typeinfo->local_merge) {
ntree->typeinfo->local_merge(bmain, localtree, ntree);
+ }
ntreeFreeTree(localtree);
MEM_freeN(localtree);
@@ -2178,12 +2263,14 @@ static bNodeSocket *make_socket_interface(bNodeTree *ntree,
/* assign new unique index */
own_index = ntree->cur_index++;
/* use the own_index as socket identifier */
- if (in_out == SOCK_IN)
+ if (in_out == SOCK_IN) {
BLI_snprintf(sock->identifier, MAX_NAME, "Input_%d", own_index);
- else
+ }
+ else {
BLI_snprintf(sock->identifier, MAX_NAME, "Output_%d", own_index);
+ }
#ifdef USE_NODE_COMPAT_CUSTOMNODES
- /* XXX forward compatibility:
+ /* XXX forward compatibility:
* own_index is deprecated, but needs to be set here.
* Node sockets generally use the identifier string instead now,
* but reconstructing own_index in writefile.c would require parsing the identifier string.
@@ -2214,9 +2301,11 @@ static bNodeSocket *make_socket_interface(bNodeTree *ntree,
bNodeSocket *ntreeFindSocketInterface(bNodeTree *ntree, int in_out, const char *identifier)
{
bNodeSocket *iosock = (in_out == SOCK_IN ? ntree->inputs.first : ntree->outputs.first);
- for (; iosock; iosock = iosock->next)
- if (STREQ(iosock->identifier, identifier))
+ for (; iosock; iosock = iosock->next) {
+ if (STREQ(iosock->identifier, identifier)) {
return iosock;
+ }
+ }
return NULL;
}
@@ -2265,8 +2354,9 @@ struct bNodeSocket *ntreeAddSocketInterfaceFromSocket(bNodeTree *ntree,
bNodeSocket *iosock = ntreeAddSocketInterface(
ntree, from_sock->in_out, from_sock->idname, from_sock->name);
if (iosock) {
- if (iosock->typeinfo->interface_from_socket)
+ if (iosock->typeinfo->interface_from_socket) {
iosock->typeinfo->interface_from_socket(ntree, iosock, from_node, from_sock);
+ }
}
return iosock;
}
@@ -2279,8 +2369,9 @@ struct bNodeSocket *ntreeInsertSocketInterfaceFromSocket(bNodeTree *ntree,
bNodeSocket *iosock = ntreeInsertSocketInterface(
ntree, from_sock->in_out, from_sock->idname, next_sock, from_sock->name);
if (iosock) {
- if (iosock->typeinfo->interface_from_socket)
+ if (iosock->typeinfo->interface_from_socket) {
iosock->typeinfo->interface_from_socket(ntree, iosock, from_node, from_sock);
+ }
}
return iosock;
}
@@ -2354,13 +2445,15 @@ static void ntree_interface_type_create(bNodeTree *ntree)
/* add socket properties */
for (sock = ntree->inputs.first; sock; sock = sock->next) {
bNodeSocketType *stype = sock->typeinfo;
- if (stype && stype->interface_register_properties)
+ if (stype && stype->interface_register_properties) {
stype->interface_register_properties(ntree, sock, srna);
+ }
}
for (sock = ntree->outputs.first; sock; sock = sock->next) {
bNodeSocketType *stype = sock->typeinfo;
- if (stype && stype->interface_register_properties)
+ if (stype && stype->interface_register_properties) {
stype->interface_register_properties(ntree, sock, srna);
+ }
}
}
@@ -2440,13 +2533,17 @@ bool ntreeHasTree(const bNodeTree *ntree, const bNodeTree *lookup)
{
bNode *node;
- if (ntree == lookup)
+ if (ntree == lookup) {
return true;
+ }
- for (node = ntree->nodes.first; node; node = node->next)
- if (ELEM(node->type, NODE_GROUP, NODE_CUSTOM_GROUP) && node->id)
- if (ntreeHasTree((bNodeTree *)node->id, lookup))
+ for (node = ntree->nodes.first; node; node = node->next) {
+ if (ELEM(node->type, NODE_GROUP, NODE_CUSTOM_GROUP) && node->id) {
+ if (ntreeHasTree((bNodeTree *)node->id, lookup)) {
return true;
+ }
+ }
+ }
return false;
}
@@ -2456,10 +2553,12 @@ bNodeLink *nodeFindLink(bNodeTree *ntree, bNodeSocket *from, bNodeSocket *to)
bNodeLink *link;
for (link = ntree->links.first; link; link = link->next) {
- if (link->fromsock == from && link->tosock == to)
+ if (link->fromsock == from && link->tosock == to) {
return link;
- if (link->fromsock == to && link->tosock == from) /* hrms? */
+ }
+ if (link->fromsock == to && link->tosock == from) { /* hrms? */
return link;
+ }
}
return NULL;
}
@@ -2470,8 +2569,9 @@ int nodeCountSocketLinks(bNodeTree *ntree, bNodeSocket *sock)
int tot = 0;
for (link = ntree->links.first; link; link = link->next) {
- if (link->fromsock == sock || link->tosock == sock)
+ if (link->fromsock == sock || link->tosock == sock) {
tot++;
+ }
}
return tot;
}
@@ -2480,12 +2580,15 @@ bNode *nodeGetActive(bNodeTree *ntree)
{
bNode *node;
- if (ntree == NULL)
+ if (ntree == NULL) {
return NULL;
+ }
- for (node = ntree->nodes.first; node; node = node->next)
- if (node->flag & NODE_ACTIVE)
+ for (node = ntree->nodes.first; node; node = node->next) {
+ if (node->flag & NODE_ACTIVE) {
break;
+ }
+ }
return node;
}
@@ -2496,10 +2599,13 @@ static bNode *node_get_active_id_recursive(bNodeInstanceKey active_key,
{
if (parent_key.value == active_key.value || active_key.value == 0) {
bNode *node;
- for (node = ntree->nodes.first; node; node = node->next)
- if (node->id && GS(node->id->name) == idtype)
- if (node->flag & NODE_ACTIVE_ID)
+ for (node = ntree->nodes.first; node; node = node->next) {
+ if (node->id && GS(node->id->name) == idtype) {
+ if (node->flag & NODE_ACTIVE_ID) {
return node;
+ }
+ }
+ }
}
else {
bNode *node, *tnode;
@@ -2510,8 +2616,9 @@ static bNode *node_get_active_id_recursive(bNodeInstanceKey active_key,
if (group) {
bNodeInstanceKey group_key = BKE_node_instance_key(parent_key, ntree, node);
tnode = node_get_active_id_recursive(active_key, group_key, group, idtype);
- if (tnode)
+ if (tnode) {
return tnode;
+ }
}
}
}
@@ -2523,11 +2630,13 @@ static bNode *node_get_active_id_recursive(bNodeInstanceKey active_key,
/* two active flags, ID nodes have special flag for buttons display */
bNode *nodeGetActiveID(bNodeTree *ntree, short idtype)
{
- if (ntree)
+ if (ntree) {
return node_get_active_id_recursive(
ntree->active_viewer_key, NODE_INSTANCE_KEY_BASE, ntree, idtype);
- else
+ }
+ else {
return NULL;
+ }
}
bool nodeSetActiveID(bNodeTree *ntree, short idtype, ID *id)
@@ -2535,8 +2644,9 @@ bool nodeSetActiveID(bNodeTree *ntree, short idtype, ID *id)
bNode *node;
bool ok = false;
- if (ntree == NULL)
+ if (ntree == NULL) {
return ok;
+ }
for (node = ntree->nodes.first; node; node = node->next) {
if (node->id && GS(node->id->name) == idtype) {
@@ -2555,8 +2665,9 @@ bool nodeSetActiveID(bNodeTree *ntree, short idtype, ID *id)
* just pass NULL so other matching nodes are deactivated.
*/
for (node = ntree->nodes.first; node; node = node->next) {
- if (node->type == NODE_GROUP)
+ if (node->type == NODE_GROUP) {
ok |= nodeSetActiveID((bNodeTree *)node->id, idtype, (ok == false ? id : NULL));
+ }
}
return ok;
@@ -2567,12 +2678,15 @@ void nodeClearActiveID(bNodeTree *ntree, short idtype)
{
bNode *node;
- if (ntree == NULL)
+ if (ntree == NULL) {
return;
+ }
- for (node = ntree->nodes.first; node; node = node->next)
- if (node->id && GS(node->id->name) == idtype)
+ for (node = ntree->nodes.first; node; node = node->next) {
+ if (node->id && GS(node->id->name) == idtype) {
node->flag &= ~NODE_ACTIVE_ID;
+ }
+ }
}
void nodeSetSelected(bNode *node, bool select)
@@ -2586,10 +2700,12 @@ void nodeSetSelected(bNode *node, bool select)
node->flag &= ~NODE_SELECT;
/* deselect sockets too */
- for (sock = node->inputs.first; sock; sock = sock->next)
+ for (sock = node->inputs.first; sock; sock = sock->next) {
sock->flag &= ~NODE_SELECT;
- for (sock = node->outputs.first; sock; sock = sock->next)
+ }
+ for (sock = node->outputs.first; sock; sock = sock->next) {
sock->flag &= ~NODE_SELECT;
+ }
}
}
@@ -2597,11 +2713,13 @@ void nodeClearActive(bNodeTree *ntree)
{
bNode *node;
- if (ntree == NULL)
+ if (ntree == NULL) {
return;
+ }
- for (node = ntree->nodes.first; node; node = node->next)
+ for (node = ntree->nodes.first; node; node = node->next) {
node->flag &= ~(NODE_ACTIVE | NODE_ACTIVE_ID);
+ }
}
/* two active flags, ID nodes have special flag for buttons display */
@@ -2614,18 +2732,22 @@ void nodeSetActive(bNodeTree *ntree, bNode *node)
tnode->flag &= ~NODE_ACTIVE;
if (node->id && tnode->id) {
- if (GS(node->id->name) == GS(tnode->id->name))
+ if (GS(node->id->name) == GS(tnode->id->name)) {
tnode->flag &= ~NODE_ACTIVE_ID;
+ }
}
- if (node->typeinfo->nclass == NODE_CLASS_TEXTURE)
+ if (node->typeinfo->nclass == NODE_CLASS_TEXTURE) {
tnode->flag &= ~NODE_ACTIVE_TEXTURE;
+ }
}
node->flag |= NODE_ACTIVE;
- if (node->id)
+ if (node->id) {
node->flag |= NODE_ACTIVE_ID;
- if (node->typeinfo->nclass == NODE_CLASS_TEXTURE)
+ }
+ if (node->typeinfo->nclass == NODE_CLASS_TEXTURE) {
node->flag |= NODE_ACTIVE_TEXTURE;
+ }
}
int nodeSocketIsHidden(bNodeSocket *sock)
@@ -2805,8 +2927,9 @@ static bNodeInstanceKey node_hash_int_str(bNodeInstanceKey hash, const char *str
{
char c;
- while ((c = *str++))
+ while ((c = *str++)) {
hash.value = ((hash.value << 5) + hash.value) ^ c; /* (hash * 33) ^ c */
+ }
/* separator '\0' character, to avoid ambiguity from concatenated strings */
hash.value = (hash.value << 5) + hash.value; /* hash * 33 */
@@ -2820,8 +2943,9 @@ bNodeInstanceKey BKE_node_instance_key(bNodeInstanceKey parent_key, bNodeTree *n
key = node_hash_int_str(parent_key, ntree->id.name + 2);
- if (node)
+ if (node) {
key = node_hash_int_str(key, node->name);
+ }
return key;
}
@@ -2918,8 +3042,9 @@ bool BKE_node_instance_hash_tag_key(bNodeInstanceHash *hash, bNodeInstanceKey ke
entry->tag = 1;
return true;
}
- else
+ else {
return false;
+ }
}
void BKE_node_instance_hash_remove_untagged(bNodeInstanceHash *hash,
@@ -2938,8 +3063,9 @@ void BKE_node_instance_hash_remove_untagged(bNodeInstanceHash *hash,
NODE_INSTANCE_HASH_ITER (iter, hash) {
bNodeInstanceHashEntry *value = BKE_node_instance_hash_iterator_get_value(&iter);
- if (!value->tag)
+ if (!value->tag) {
untagged[num_untagged++] = BKE_node_instance_hash_iterator_get_key(&iter);
+ }
}
for (i = 0; i < num_untagged; ++i) {
@@ -2964,19 +3090,23 @@ static int node_get_deplist_recurs(bNodeTree *ntree, bNode *node, bNode ***nsort
for (link = ntree->links.first; link; link = link->next) {
if (link->tonode == node) {
fromnode = link->fromnode;
- if (fromnode->done == 0)
+ if (fromnode->done == 0) {
fromnode->level = node_get_deplist_recurs(ntree, fromnode, nsort);
- if (fromnode->level <= level)
+ }
+ if (fromnode->level <= level) {
level = fromnode->level - 1;
+ }
}
}
/* check parent node */
if (node->parent) {
- if (node->parent->done == 0)
+ if (node->parent->done == 0) {
node->parent->level = node_get_deplist_recurs(ntree, node->parent, nsort);
- if (node->parent->level <= level)
+ }
+ if (node->parent->level <= level) {
level = node->parent->level - 1;
+ }
}
if (nsort) {
@@ -3049,8 +3179,9 @@ void ntreeTagUsedSockets(bNodeTree *ntree)
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))
+ if ((link->fromsock->flag & SOCK_UNAVAIL) || (link->tosock->flag & SOCK_UNAVAIL)) {
continue;
+ }
link->fromsock->flag |= SOCK_IN_USE;
link->tosock->flag |= SOCK_IN_USE;
@@ -3083,11 +3214,13 @@ static void ntree_validate_links(bNodeTree *ntree)
for (link = ntree->links.first; link; link = link->next) {
link->flag |= NODE_LINK_VALID;
- if (link->fromnode && link->tonode && link->fromnode->level <= link->tonode->level)
+ if (link->fromnode && link->tonode && link->fromnode->level <= link->tonode->level) {
link->flag &= ~NODE_LINK_VALID;
+ }
else if (ntree->typeinfo->validate_link) {
- if (!ntree->typeinfo->validate_link(ntree, link))
+ if (!ntree->typeinfo->validate_link(ntree, link)) {
link->flag &= ~NODE_LINK_VALID;
+ }
}
}
}
@@ -3097,9 +3230,11 @@ void ntreeVerifyNodes(struct Main *main, struct ID *id)
FOREACH_NODETREE_BEGIN (main, ntree, owner_id) {
bNode *node;
- for (node = ntree->nodes.first; node; node = node->next)
- if (node->typeinfo->verifyfunc)
+ for (node = ntree->nodes.first; node; node = node->next) {
+ if (node->typeinfo->verifyfunc) {
node->typeinfo->verifyfunc(ntree, node, id);
+ }
+ }
}
FOREACH_NODETREE_END;
}
@@ -3108,12 +3243,14 @@ void ntreeUpdateTree(Main *bmain, bNodeTree *ntree)
{
bNode *node;
- if (!ntree)
+ if (!ntree) {
return;
+ }
/* avoid reentrant updates, can be caused by RNA update callbacks */
- if (ntree->is_updating)
+ if (ntree->is_updating) {
return;
+ }
ntree->is_updating = true;
if (ntree->update & (NTREE_UPDATE_LINKS | NTREE_UPDATE_NODES)) {
@@ -3125,25 +3262,29 @@ void ntreeUpdateTree(Main *bmain, bNodeTree *ntree)
for (node = ntree->nodes.first; node; node = node->next) {
/* node tree update tags override individual node update flags */
if ((node->update & NODE_UPDATE) || (ntree->update & NTREE_UPDATE)) {
- if (node->typeinfo->updatefunc)
+ if (node->typeinfo->updatefunc) {
node->typeinfo->updatefunc(ntree, node);
+ }
nodeUpdateInternalLinks(ntree, node);
}
}
/* generic tree update callback */
- if (ntree->typeinfo->update)
+ if (ntree->typeinfo->update) {
ntree->typeinfo->update(ntree);
+ }
/* XXX this should be moved into the tree type update callback for tree supporting node groups.
* Currently the node tree interface is still a generic feature of the base NodeTree type.
*/
- if (ntree->update & NTREE_UPDATE_GROUP)
+ if (ntree->update & NTREE_UPDATE_GROUP) {
ntreeInterfaceTypeUpdate(ntree);
+ }
/* XXX hack, should be done by depsgraph!! */
- if (bmain)
+ if (bmain) {
ntreeVerifyNodes(bmain, &ntree->id);
+ }
if (ntree->update & (NTREE_UPDATE_LINKS | NTREE_UPDATE_NODES)) {
/* node updates can change sockets or links, repeat link pointer update afterward */
@@ -3168,12 +3309,14 @@ void ntreeUpdateTree(Main *bmain, bNodeTree *ntree)
void nodeUpdate(bNodeTree *ntree, bNode *node)
{
/* avoid reentrant updates, can be caused by RNA update callbacks */
- if (ntree->is_updating)
+ if (ntree->is_updating) {
return;
+ }
ntree->is_updating = true;
- if (node->typeinfo->updatefunc)
+ if (node->typeinfo->updatefunc) {
node->typeinfo->updatefunc(ntree, node);
+ }
nodeUpdateInternalLinks(ntree, node);
@@ -3188,20 +3331,23 @@ bool nodeUpdateID(bNodeTree *ntree, ID *id)
bNode *node;
bool changed = false;
- if (ELEM(NULL, id, ntree))
+ if (ELEM(NULL, id, ntree)) {
return changed;
+ }
/* avoid reentrant updates, can be caused by RNA update callbacks */
- if (ntree->is_updating)
+ if (ntree->is_updating) {
return changed;
+ }
ntree->is_updating = true;
for (node = ntree->nodes.first; node; node = node->next) {
if (node->id == id) {
changed = true;
node->update |= NODE_UPDATE_ID;
- if (node->typeinfo->updatefunc)
+ if (node->typeinfo->updatefunc) {
node->typeinfo->updatefunc(ntree, node);
+ }
/* clear update flag */
node->update = 0;
}
@@ -3219,8 +3365,9 @@ void nodeUpdateInternalLinks(bNodeTree *ntree, bNode *node)
{
BLI_freelistN(&node->internal_links);
- if (node->typeinfo && node->typeinfo->update_internal_links)
+ if (node->typeinfo && node->typeinfo->update_internal_links) {
node->typeinfo->update_internal_links(ntree, node);
+ }
}
/* ************* node type access ********** */
@@ -3366,8 +3513,9 @@ void node_type_socket_templates(struct bNodeType *ntype,
/* automatically generate unique identifiers */
if (inputs) {
/* clear identifier strings (uninitialized memory) */
- for (ntemp = inputs; ntemp->type >= 0; ++ntemp)
+ for (ntemp = inputs; ntemp->type >= 0; ++ntemp) {
ntemp->identifier[0] = '\0';
+ }
for (ntemp = inputs; ntemp->type >= 0; ++ntemp) {
BLI_strncpy(ntemp->identifier, ntemp->name, sizeof(ntemp->identifier));
@@ -3376,8 +3524,9 @@ void node_type_socket_templates(struct bNodeType *ntype,
}
if (outputs) {
/* clear identifier strings (uninitialized memory) */
- for (ntemp = outputs; ntemp->type >= 0; ++ntemp)
+ for (ntemp = outputs; ntemp->type >= 0; ++ntemp) {
ntemp->identifier[0] = '\0';
+ }
for (ntemp = outputs; ntemp->type >= 0; ++ntemp) {
BLI_strncpy(ntemp->identifier, ntemp->name, sizeof(ntemp->identifier));
@@ -3396,10 +3545,12 @@ void node_type_size(struct bNodeType *ntype, int width, int minwidth, int maxwid
{
ntype->width = width;
ntype->minwidth = minwidth;
- if (maxwidth <= minwidth)
+ if (maxwidth <= minwidth) {
ntype->maxwidth = FLT_MAX;
- else
+ }
+ else {
ntype->maxwidth = maxwidth;
+ }
}
void node_type_size_preset(struct bNodeType *ntype, eNodeSizePreset size)
@@ -3431,10 +3582,12 @@ void node_type_storage(bNodeType *ntype,
struct bNode *dest_node,
struct bNode *src_node))
{
- if (storagename)
+ if (storagename) {
BLI_strncpy(ntype->storagename, storagename, sizeof(ntype->storagename));
- else
+ }
+ else {
ntype->storagename[0] = '\0';
+ }
ntype->copyfunc = copyfunc;
ntype->freefunc = freefunc;
}
@@ -3790,10 +3943,12 @@ void free_nodesystem(void)
if (nodesockettypes_hash) {
NODE_SOCKET_TYPES_BEGIN (st) {
- if (st->ext_socket.free)
+ if (st->ext_socket.free) {
st->ext_socket.free(st->ext_socket.data);
- if (st->ext_interface.free)
+ }
+ if (st->ext_interface.free) {
st->ext_interface.free(st->ext_interface.data);
+ }
}
NODE_SOCKET_TYPES_END;