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.c44
1 files changed, 39 insertions, 5 deletions
diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c
index fbaa0b35c5e..c47572ffc43 100644
--- a/source/blender/blenkernel/intern/node.c
+++ b/source/blender/blenkernel/intern/node.c
@@ -35,6 +35,7 @@
#include "BKE_blender.h"
#include "BKE_node.h"
+#include "BKE_texture.h"
#include "BKE_utildefines.h"
#include "BLI_arithb.h"
@@ -56,7 +57,7 @@ static bNodeType *nodeGetType(bNodeTree *ntree, int type)
void ntreeInitTypes(bNodeTree *ntree)
{
- bNode *node;
+ bNode *node, *next;
if(ntree->type==NTREE_SHADER)
ntree->alltypes= node_all_shaders;
@@ -65,10 +66,13 @@ void ntreeInitTypes(bNodeTree *ntree)
printf("Error: no type definitions for nodes\n");
}
- for(node= ntree->nodes.first; node; node= node->next) {
+ for(node= ntree->nodes.first; node; node= next) {
+ next= node->next;
node->typeinfo= nodeGetType(ntree, node->type);
- if(node->typeinfo==NULL)
- printf("Error: no typeinfo for node %s\n", node->name);
+ if(node->typeinfo==NULL) {
+ printf("Error: Node type %s doesn't exist anymore, removed\n", node->name);
+ nodeFreeNode(ntree, node);
+ }
}
ntree->init |= NTREE_TYPE_INIT;
@@ -199,7 +203,8 @@ bNode *nodeAddNodeType(bNodeTree *ntree, int type)
node->type= ntype->type;
node->flag= NODE_SELECT|ntype->flag;
node->width= ntype->width;
-
+ node->miniwidth= 15.0f; /* small value only, allows print of first chars */
+
if(ntype->inputs) {
stype= ntype->inputs;
while(stype->type != -1) {
@@ -214,6 +219,15 @@ bNode *nodeAddNodeType(bNodeTree *ntree, int type)
stype++;
}
}
+
+ /* need init handler later? */
+ if(ntree->type==NTREE_SHADER) {
+ if(type==SH_NODE_MATERIAL)
+ node->custom1= SH_NODE_MAT_DIFF|SH_NODE_MAT_SPEC;
+ else if(node->type==SH_NODE_VALTORGB)
+ node->storage= add_colorband(1);
+ }
+
return node;
}
@@ -445,6 +459,26 @@ bNode *nodeGetActiveID(bNodeTree *ntree, short idtype)
return node;
}
+/* two active flags, ID nodes have special flag for buttons display */
+void nodeSetActive(bNodeTree *ntree, bNode *node)
+{
+ bNode *tnode;
+
+ /* make sure only one node is active, and only one per ID type */
+ for(tnode= ntree->nodes.first; tnode; tnode= tnode->next) {
+ tnode->flag &= ~NODE_ACTIVE;
+
+ if(node->id && tnode->id) {
+ if(GS(node->id->name) == GS(tnode->id->name))
+ tnode->flag &= ~NODE_ACTIVE_ID;
+ }
+ }
+
+ node->flag |= NODE_ACTIVE;
+ if(node->id)
+ node->flag |= NODE_ACTIVE_ID;
+}
+
/* ************** dependency stuff *********** */
/* node is guaranteed to be not checked before */