[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [59596] branches/hive/source/blender: Applied patch https://codereview.appspot.com/12440043/: generic node socket display in the Node Editor

Sjoerd de Vries sjdv1982 at gmail.com
Wed Aug 28 13:16:15 CEST 2013


Revision: 59596
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=59596
Author:   sjoerddevries
Date:     2013-08-28 11:16:14 +0000 (Wed, 28 Aug 2013)
Log Message:
-----------
Applied patch https://codereview.appspot.com/12440043/: generic node socket display in the Node Editor

Modified Paths:
--------------
    branches/hive/source/blender/blenkernel/BKE_node.h
    branches/hive/source/blender/blenkernel/intern/node.c
    branches/hive/source/blender/editors/space_node/drawnode.c
    branches/hive/source/blender/editors/space_node/node_draw.c
    branches/hive/source/blender/editors/space_node/node_edit.c
    branches/hive/source/blender/makesdna/DNA_node_types.h
    branches/hive/source/blender/makesrna/intern/rna_nodetree.c

Modified: branches/hive/source/blender/blenkernel/BKE_node.h
===================================================================
--- branches/hive/source/blender/blenkernel/BKE_node.h	2013-08-28 11:00:20 UTC (rev 59595)
+++ branches/hive/source/blender/blenkernel/BKE_node.h	2013-08-28 11:16:14 UTC (rev 59596)
@@ -112,6 +112,7 @@
  */
 typedef struct bNodeSocketType {
 	char idname[64];				/* identifier name */
+	int flag; int pad;
 	
 	void (*draw)(struct bContext *C, struct uiLayout *layout, struct PointerRNA *ptr, struct PointerRNA *node_ptr, const char *text);
 	void (*draw_color)(struct bContext *C, struct PointerRNA *ptr, struct PointerRNA *node_ptr, float *r_color);

Modified: branches/hive/source/blender/blenkernel/intern/node.c
===================================================================
--- branches/hive/source/blender/blenkernel/intern/node.c	2013-08-28 11:00:20 UTC (rev 59595)
+++ branches/hive/source/blender/blenkernel/intern/node.c	2013-08-28 11:16:14 UTC (rev 59596)
@@ -1267,7 +1267,7 @@
 int BKE_node_preview_used(bNode *node)
 {
 	/* XXX check for closed nodes? */
-	return (node->typeinfo->flag & NODE_PREVIEW) != 0;
+	return (node->typeinfo->flag & NODETYPE_PREVIEW) != 0;
 }
 
 bNodePreview *BKE_node_preview_verify(bNodeInstanceHash *previews, bNodeInstanceKey key, int xsize, int ysize, int create)
@@ -1511,7 +1511,7 @@
 		return;
 	
 	for (node = ntree->nodes.first; node; node = node->next) {
-		if (node->typeinfo->flag & NODE_PREVIEW)
+		if (node->typeinfo->flag & NODETYPE_PREVIEW)
 			nodeClearPreview(node);
 		if (node->type == NODE_GROUP)
 			ntreeClearPreview((bNodeTree *)node->id);

Modified: branches/hive/source/blender/editors/space_node/drawnode.c
===================================================================
--- branches/hive/source/blender/editors/space_node/drawnode.c	2013-08-28 11:00:20 UTC (rev 59595)
+++ branches/hive/source/blender/editors/space_node/drawnode.c	2013-08-28 11:16:14 UTC (rev 59596)
@@ -98,6 +98,13 @@
 	node_socket_button_label(C, layout, ptr, node_ptr, IFACE_(sock->name));
 }
 
+static void node_draw_io_generic(bContext *C, uiLayout *layout, PointerRNA *ptr, PointerRNA *node_ptr)
+{
+	bNodeSocket *sock = (bNodeSocket *)ptr->data;
+	sock->typeinfo->draw(C, layout, ptr, node_ptr, IFACE_(sock->name));
+	if (!(sock->typeinfo->flag & SOCKTYPE_HIDE_LABEL))
+			node_socket_button_label(C, layout, ptr, node_ptr, IFACE_(sock->name));
+}
 
 /* ****************** BASE DRAW FUNCTIONS FOR NEW OPERATOR NODES ***************** */
 
@@ -2774,8 +2781,14 @@
 	/* default ui functions */
 	ntype->drawfunc = node_draw_default;
 	ntype->drawupdatefunc = node_update_default;
-	ntype->drawinputfunc = node_draw_input_default;
-	ntype->drawoutputfunc = node_draw_output_default;
+	if (ntype->flag & NODETYPE_SOCKETS_GENERIC) {
+		ntype->drawinputfunc = node_draw_io_generic;
+		ntype->drawoutputfunc = node_draw_io_generic;
+	}
+	else {
+		ntype->drawinputfunc = node_draw_input_default;
+		ntype->drawoutputfunc = node_draw_output_default;
+	}
 	ntype->resize_area_func = node_resize_area_default;
 	ntype->select_area_func = node_select_area_default;
 	ntype->tweak_area_func = node_tweak_area_default;

Modified: branches/hive/source/blender/editors/space_node/node_draw.c
===================================================================
--- branches/hive/source/blender/editors/space_node/node_draw.c	2013-08-28 11:00:20 UTC (rev 59595)
+++ branches/hive/source/blender/editors/space_node/node_draw.c	2013-08-28 11:16:14 UTC (rev 59596)
@@ -859,7 +859,7 @@
 	iconofs = rct->xmax - 0.35f * U.widget_unit;
 	
 	/* preview */
-	if (node->typeinfo->flag & NODE_PREVIEW) {
+	if (node->typeinfo->flag & NODETYPE_PREVIEW) {
 		uiBut *but;
 		iconofs -= iconbutw;
 		uiBlockSetEmboss(node->block, UI_EMBOSSN);

Modified: branches/hive/source/blender/editors/space_node/node_edit.c
===================================================================
--- branches/hive/source/blender/editors/space_node/node_edit.c	2013-08-28 11:00:20 UTC (rev 59595)
+++ branches/hive/source/blender/editors/space_node/node_edit.c	2013-08-28 11:16:14 UTC (rev 59596)
@@ -1417,7 +1417,7 @@
 	for (node = snode->edittree->nodes.first; node; node = node->next) {
 		if (node->flag & SELECT) {
 			
-			if (toggle_flag == NODE_PREVIEW && (node->typeinfo->flag & NODE_PREVIEW) == 0)
+			if (toggle_flag == NODE_PREVIEW && (node->typeinfo->flag & NODETYPE_PREVIEW) == 0)
 				continue;
 			if (toggle_flag == NODE_OPTIONS && !(node->typeinfo->uifunc || node->typeinfo->uifuncbut))
 				continue;
@@ -1431,7 +1431,7 @@
 	for (node = snode->edittree->nodes.first; node; node = node->next) {
 		if (node->flag & SELECT) {
 			
-			if (toggle_flag == NODE_PREVIEW && (node->typeinfo->flag & NODE_PREVIEW) == 0)
+			if (toggle_flag == NODE_PREVIEW && (node->typeinfo->flag & NODETYPE_PREVIEW) == 0)
 				continue;
 			if (toggle_flag == NODE_OPTIONS && !(node->typeinfo->uifunc || node->typeinfo->uifuncbut))
 				continue;

Modified: branches/hive/source/blender/makesdna/DNA_node_types.h
===================================================================
--- branches/hive/source/blender/makesdna/DNA_node_types.h	2013-08-28 11:00:20 UTC (rev 59595)
+++ branches/hive/source/blender/makesdna/DNA_node_types.h	2013-08-28 11:16:14 UTC (rev 59596)
@@ -173,6 +173,12 @@
 	/* DEPRECATED, only kept here to avoid reusing the flag */
 #define SOCK_AUTO_HIDDEN__DEPRECATED	256
 
+/* sock->typeinfo->flag
+ *  only used by generic input/output sockets
+*/
+#define SOCKTYPE_HIDE_LABEL 		1
+#define SOCKTYPE_SHARED_ROW		 	2
+
 /* limit data in bNode to what we want to see saved? */
 typedef struct bNode {
 	struct bNode *next, *prev, *new_node;
@@ -268,6 +274,18 @@
 	 */
 #define NODE_DO_OUTPUT_RECALC	(1<<17)
 
+
+/* node->typeinfo->flag
+ *  these are only 16-bits (32 bit for node->flag!)
+ */
+#define NODETYPE_PREVIEW 				 4    /* equal to NODE_PREVIEW */
+/* node->typeinfo->flag */
+/* node uses generic input/output sockets,
+ *  that can draw both labels and panel properties
+ * this is only used in node->typeinfo->flag
+ */
+#define NODETYPE_SOCKETS_GENERIC		 256
+
 /* node->update */
 /* XXX NODE_UPDATE is a generic update flag. More fine-grained updates
  * might be used in the future, but currently all work the same way.

Modified: branches/hive/source/blender/makesrna/intern/rna_nodetree.c
===================================================================
--- branches/hive/source/blender/makesrna/intern/rna_nodetree.c	2013-08-28 11:00:20 UTC (rev 59595)
+++ branches/hive/source/blender/makesrna/intern/rna_nodetree.c	2013-08-28 11:16:14 UTC (rev 59596)
@@ -6155,6 +6155,14 @@
 	RNA_def_property_flag(prop, PROP_REGISTER | PROP_NEVER_CLAMP);
 	RNA_def_property_ui_text(prop, "ID Name", "");
 
+	prop = RNA_def_property(srna, "bl_hide_label", PROP_BOOLEAN, PROP_NONE);
+	RNA_def_property_boolean_sdna(prop, NULL, "typeinfo->flag", SOCKTYPE_HIDE_LABEL);
+	RNA_def_property_flag(prop, PROP_REGISTER_OPTIONAL);
+
+	prop = RNA_def_property(srna, "bl_shared_row", PROP_BOOLEAN, PROP_NONE);
+	RNA_def_property_boolean_sdna(prop, NULL, "typeinfo->flag", SOCKTYPE_SHARED_ROW);
+	RNA_def_property_flag(prop, PROP_REGISTER_OPTIONAL);
+
 	/* draw socket */
 	func = RNA_def_function(srna, "draw", NULL);
 	RNA_def_function_ui_description(func, "Draw socket");
@@ -7007,6 +7015,10 @@
 	RNA_def_property_float_sdna(prop, NULL, "typeinfo->minheight");
 	RNA_def_property_flag(prop, PROP_REGISTER_OPTIONAL);
 
+	prop = RNA_def_property(srna, "bl_generic_sockets", PROP_BOOLEAN, PROP_NONE);
+	RNA_def_property_boolean_sdna(prop, NULL, "typeinfo->flag", NODETYPE_SOCKETS_GENERIC);
+	RNA_def_property_flag(prop, PROP_REGISTER_OPTIONAL);
+
 	/* poll */
 	func = RNA_def_function(srna, "poll", NULL);
 	RNA_def_function_ui_description(func, "If non-null output is returned, the node type can be added to the tree");




More information about the Bf-blender-cvs mailing list