[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [34717] trunk/blender/source/blender: Per-type node labels and customizable names.

Lukas Toenne lukas.toenne at googlemail.com
Tue Feb 8 13:54:33 CET 2011


Revision: 34717
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=34717
Author:   lukastoenne
Date:     2011-02-08 12:54:32 +0000 (Tue, 08 Feb 2011)
Log Message:
-----------
Per-type node labels and customizable names. The label displayed in the node header is now by default the node type string. A custom label callback can be implemented to display more detailed information. This is currently used by group nodes, which display their internal tree name, and math, vector math, mix and filter nodes, which use their internal operation sub-type. Also the node tree selection/naming box for groups is now displayed only on open groups, to make it clearer that this is the internal type of the group and get a cleaner main tree.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_node.h
    trunk/blender/source/blender/blenkernel/intern/node.c
    trunk/blender/source/blender/editors/space_node/drawnode.c
    trunk/blender/source/blender/editors/space_node/node_draw.c
    trunk/blender/source/blender/editors/space_node/node_intern.h
    trunk/blender/source/blender/makesdna/DNA_node_types.h
    trunk/blender/source/blender/makesrna/RNA_enum_types.h
    trunk/blender/source/blender/makesrna/intern/rna_nodetree.c
    trunk/blender/source/blender/nodes/intern/CMP_nodes/CMP_filter.c
    trunk/blender/source/blender/nodes/intern/CMP_nodes/CMP_math.c
    trunk/blender/source/blender/nodes/intern/CMP_nodes/CMP_mixrgb.c
    trunk/blender/source/blender/nodes/intern/SHD_nodes/SHD_math.c
    trunk/blender/source/blender/nodes/intern/SHD_nodes/SHD_mixRgb.c
    trunk/blender/source/blender/nodes/intern/SHD_nodes/SHD_vectMath.c
    trunk/blender/source/blender/nodes/intern/TEX_nodes/TEX_math.c
    trunk/blender/source/blender/nodes/intern/TEX_nodes/TEX_mixRgb.c
    trunk/blender/source/blender/nodes/intern/node_util.c
    trunk/blender/source/blender/nodes/intern/node_util.h

Modified: trunk/blender/source/blender/blenkernel/BKE_node.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_node.h	2011-02-08 11:20:19 UTC (rev 34716)
+++ trunk/blender/source/blender/blenkernel/BKE_node.h	2011-02-08 12:54:32 UTC (rev 34717)
@@ -87,6 +87,7 @@
 	
 	/* this line is set on startup of blender */
 	void (*uifunc)(struct uiLayout *, struct bContext *C, struct PointerRNA *ptr);
+	const char *(*labelfunc)(struct bNode *);
 
 	void (*initfunc)(struct bNode *);
 	void (*freestoragefunc)(struct bNode *);
@@ -218,6 +219,7 @@
 								  void (*copystoragefunc)(struct bNode *, struct bNode *));
 void			node_type_exec(struct bNodeType *ntype, void (*execfunc)(void *data, struct bNode *, struct bNodeStack **, struct bNodeStack **));
 void			node_type_gpu(struct bNodeType *ntype, int (*gpufunc)(struct GPUMaterial *mat, struct bNode *node, struct GPUNodeStack *in, struct GPUNodeStack *out));
+void			node_type_label(struct bNodeType *ntype, const char *(*labelfunc)(struct bNode *));
 
 #define NODE_GROUP		2
 #define NODE_GROUP_MENU		1000

Modified: trunk/blender/source/blender/blenkernel/intern/node.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/node.c	2011-02-08 11:20:19 UTC (rev 34716)
+++ trunk/blender/source/blender/blenkernel/intern/node.c	2011-02-08 12:54:32 UTC (rev 34717)
@@ -268,10 +268,17 @@
 /* XXX group typeinfo struct is used directly in ntreeMakeOwnType, needs cleanup */
 static bNodeType ntype_group;
 
+/* groups display their internal tree name as label */
+const char *group_label(bNode *node)
+{
+	return node->id->name+2;
+}
+
 void register_node_type_group(ListBase *lb)
 {
 	node_type_base(&ntype_group, NODE_GROUP, "Group", NODE_CLASS_GROUP, NODE_OPTIONS, NULL, NULL);
 	node_type_size(&ntype_group, 120, 60, 200);
+	node_type_label(&ntype_group, group_label);
 	
 	nodeRegisterType(lb, &ntype_group);
 }
@@ -3290,6 +3297,10 @@
 	ntype->gpufunc = gpufunc;
 }
 
+void node_type_label(struct bNodeType *ntype, const char *(*labelfunc)(struct bNode *))
+{
+	ntype->labelfunc = labelfunc;
+}
 
 static bNodeType *is_nodetype_registered(ListBase *typelist, int type, ID *id) 
 {

Modified: trunk/blender/source/blender/editors/space_node/drawnode.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/drawnode.c	2011-02-08 11:20:19 UTC (rev 34716)
+++ trunk/blender/source/blender/editors/space_node/drawnode.c	2011-02-08 12:54:32 UTC (rev 34717)
@@ -78,11 +78,6 @@
 
 /* ****************** BUTTON CALLBACKS FOR ALL TREES ***************** */
 
-void node_buts_group(uiLayout *layout, bContext *C, PointerRNA *ptr)
-{
-	uiTemplateIDBrowse(layout, C, ptr, "node_tree", NULL, NULL, "");
-}
-
 static void node_buts_value(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
 {
 	PointerRNA sockptr;

Modified: trunk/blender/source/blender/editors/space_node/node_draw.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/node_draw.c	2011-02-08 11:20:19 UTC (rev 34716)
+++ trunk/blender/source/blender/editors/space_node/node_draw.c	2011-02-08 12:54:32 UTC (rev 34717)
@@ -45,6 +45,7 @@
 #include "BKE_context.h"
 #include "BKE_depsgraph.h"
 #include "BKE_main.h"
+#include "BKE_node.h"
 
 #include "BIF_gl.h"
 #include "BIF_glutil.h"
@@ -264,10 +265,6 @@
 		BLI_unlock_thread(LOCK_PREVIEW);
 	}
 
-	/* XXX ugly hack, typeinfo for group is generated */
-	if(node->type == NODE_GROUP)
-		node->typeinfo->uifunc= node_buts_group;
-	
 	/* buttons rect? */
 	if((node->flag & NODE_OPTIONS) && node->typeinfo->uifunc) {
 		dy-= NODE_DYS/2;
@@ -721,11 +718,10 @@
 	else
 		UI_ThemeColor(TH_TEXT); */
 	
-	if(node->flag & NODE_CUSTOM_NAME)
-		BLI_strncpy(showname, node->name, sizeof(showname));
+	if (node->typeinfo->labelfunc)
+		BLI_strncpy(showname, node->typeinfo->labelfunc(node), sizeof(showname));
 	else
-		/* todo: auto name display for node types */
-		BLI_strncpy(showname, node->name, sizeof(showname));
+		BLI_strncpy(showname, node->typeinfo->name, sizeof(showname));
 
 	//if(node->flag & NODE_MUTED)
 	//	sprintf(showname, "[%s]", showname);
@@ -894,14 +890,11 @@
 		UI_ThemeColor(TH_TEXT);
 	
 	if(node->miniwidth>0.0f) {
-
-
-		if(node->flag & NODE_CUSTOM_NAME)
-			BLI_strncpy(showname, node->name, sizeof(showname));
+		if (node->typeinfo->labelfunc)
+			BLI_strncpy(showname, node->typeinfo->labelfunc(node), sizeof(showname));
 		else
-			/* todo: auto name display */
-			BLI_strncpy(showname, node->name, sizeof(showname));
-	
+			BLI_strncpy(showname, node->typeinfo->name, sizeof(showname));
+		
 		//if(node->flag & NODE_MUTED)
 		//	sprintf(showname, "[%s]", showname);
 
@@ -1012,18 +1005,19 @@
 }
 
 /* groups are, on creation, centered around 0,0 */
-static void node_draw_group(const bContext *C, ARegion *ar, SpaceNode *snode, bNode *gnode)
+static void node_draw_group(const bContext *C, ARegion *ar, SpaceNode *snode, bNodeTree *ntree, bNode *gnode)
 {
 	bNodeTree *ngroup= (bNodeTree *)gnode->id;
 	bNodeSocket *sock;
 	rctf rect= gnode->totr;
-	char showname[128];
+	uiLayout *layout;
+	PointerRNA ptr;
 	
 	/* backdrop header */
 	glEnable(GL_BLEND);
 	uiSetRoundBox(3);
 	UI_ThemeColorShadeAlpha(TH_NODE_GROUP, 0, -70);
-	uiDrawBox(GL_POLYGON, rect.xmin, rect.ymax, rect.xmax, rect.ymax+NODE_DY, BASIS_RAD);
+	uiDrawBox(GL_POLYGON, rect.xmin, rect.ymax, rect.xmax, rect.ymax+26, BASIS_RAD);
 	
 	/* backdrop body */
 	UI_ThemeColorShadeAlpha(TH_BACK, -8, -70);
@@ -1034,21 +1028,19 @@
 	uiSetRoundBox(15);
 	glColor4ub(200, 200, 200, 140);
 	glEnable( GL_LINE_SMOOTH );
-	uiDrawBox(GL_LINE_LOOP, rect.xmin, rect.ymin, rect.xmax, rect.ymax+NODE_DY, BASIS_RAD);
+	uiDrawBox(GL_LINE_LOOP, rect.xmin, rect.ymin, rect.xmax, rect.ymax+26, BASIS_RAD);
 	glDisable( GL_LINE_SMOOTH );
 	glDisable(GL_BLEND);
 	
 	/* backdrop title */
 	UI_ThemeColor(TH_TEXT_HI);
 
-	if (gnode->flag & NODE_CUSTOM_NAME)
-		BLI_strncpy(showname, gnode->name, sizeof(showname));
-	else
-		BLI_strncpy(showname, ngroup->id.name+2, sizeof(showname));
+	layout = uiBlockLayout(gnode->block, UI_LAYOUT_VERTICAL, UI_LAYOUT_PANEL, (short)(rect.xmin+15), (short)(rect.ymax+23),
+						   MIN2((int)(rect.xmax - rect.xmin-18.0f), 140), 20, U.uistyles.first);
+	RNA_pointer_create(&ntree->id, &RNA_Node, gnode, &ptr);
+	uiTemplateIDBrowse(layout, (bContext*)C, &ptr, "node_tree", NULL, NULL, NULL);
+	uiBlockLayoutResolve(gnode->block, NULL, NULL);
 
-
-	uiDefBut(gnode->block, LABEL, 0, showname, (short)(rect.xmin+15), (short)(rect.ymax), 
-			 (int)(rect.xmax - rect.xmin-18.0f), NODE_DY,  NULL, 0, 0, 0, 0, "");
 	uiEndBlock(C, gnode->block);
 	uiDrawBlock(C, gnode->block);
 	gnode->block= NULL;
@@ -1128,7 +1120,7 @@
 		/* active group */
 		for(node= snode->nodetree->nodes.first; node; node= node->next) {
 			if(node->flag & NODE_GROUP_EDIT)
-				node_draw_group(C, ar, snode, node);
+				node_draw_group(C, ar, snode, snode->nodetree, node);
 		}
 	}
 	

Modified: trunk/blender/source/blender/editors/space_node/node_intern.h
===================================================================
--- trunk/blender/source/blender/editors/space_node/node_intern.h	2011-02-08 11:20:19 UTC (rev 34716)
+++ trunk/blender/source/blender/editors/space_node/node_intern.h	2011-02-08 12:54:32 UTC (rev 34717)
@@ -73,8 +73,6 @@
 void draw_nodespace_back_pix(ARegion *ar, SpaceNode *snode, int color_manage);
 void draw_nodespace_color_info(ARegion *ar, int channels, int x, int y, char *cp, float *fp);
 
-void node_buts_group(struct uiLayout *layout, struct bContext *C, struct PointerRNA *ptr);
-
 /* node_edit.c */
 void node_tree_from_ID(ID *id, bNodeTree **ntree, bNodeTree **edittree, int *treetype);
 void snode_notify(bContext *C, SpaceNode *snode);

Modified: trunk/blender/source/blender/makesdna/DNA_node_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_node_types.h	2011-02-08 11:20:19 UTC (rev 34716)
+++ trunk/blender/source/blender/makesdna/DNA_node_types.h	2011-02-08 12:54:32 UTC (rev 34717)
@@ -149,7 +149,7 @@
 #define NODE_TEST			256
 		/* composite: don't do node but pass on buffer(s) */
 #define NODE_MUTED			512
-#define NODE_CUSTOM_NAME		1024
+#define NODE_CUSTOM_NAME		1024	/* deprecated! */
 
 typedef struct bNodeLink {
 	struct bNodeLink *next, *prev;

Modified: trunk/blender/source/blender/makesrna/RNA_enum_types.h
===================================================================
--- trunk/blender/source/blender/makesrna/RNA_enum_types.h	2011-02-08 11:20:19 UTC (rev 34716)
+++ trunk/blender/source/blender/makesrna/RNA_enum_types.h	2011-02-08 12:54:32 UTC (rev 34717)
@@ -96,6 +96,11 @@
 
 extern EnumPropertyItem viewport_shade_items[];
 
+extern EnumPropertyItem node_blend_type_items[];
+extern EnumPropertyItem node_math_items[];
+extern EnumPropertyItem node_vec_math_items[];
+extern EnumPropertyItem node_filter_items[];
+
 struct bContext;
 struct PointerRNA;
 EnumPropertyItem *rna_TransformOrientation_itemf(struct bContext *C, struct PointerRNA *ptr, int *free);

Modified: trunk/blender/source/blender/makesrna/intern/rna_nodetree.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_nodetree.c	2011-02-08 11:20:19 UTC (rev 34716)
+++ trunk/blender/source/blender/makesrna/intern/rna_nodetree.c	2011-02-08 12:54:32 UTC (rev 34717)
@@ -47,6 +47,66 @@
 
 #include "MEM_guardedalloc.h"
 
+EnumPropertyItem node_blend_type_items[] = {
+{ 0, "MIX",          0, "Mix",         ""},
+{ 1, "ADD",          0, "Add",         ""},
+{ 3, "SUBTRACT",     0, "Subtract",    ""},
+{ 2, "MULTIPLY",     0, "Multiply",    ""},
+{ 4, "SCREEN",       0, "Screen",      ""},
+{ 9, "OVERLAY",      0, "Overlay",     ""},
+{ 5, "DIVIDE",       0, "Divide",      ""},
+{ 6, "DIFFERENCE",   0, "Difference",  ""},
+{ 7, "DARKEN",       0, "Darken",      ""},
+{ 8, "LIGHTEN",      0, "Lighten",     ""},
+{10, "DODGE",        0, "Dodge",       ""},
+{11, "BURN",         0, "Burn",        ""},
+{15, "COLOR",        0, "Color",       ""},
+{14, "VALUE",        0, "Value",       ""},
+{13, "SATURATION",   0, "Saturation",  ""},
+{12, "HUE",          0, "Hue",         ""},
+{16, "SOFT_LIGHT",   0, "Soft Light",  ""},
+{17, "LINEAR_LIGHT", 0, "Linear Light",""},
+{0, NULL, 0, NULL, NULL}};
+

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list