[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [59595] branches/hive/source/blender: Applied patch https://codereview.appspot.com/12245043

Sjoerd de Vries sjdv1982 at gmail.com
Wed Aug 28 13:00:20 CEST 2013


Revision: 59595
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=59595
Author:   sjoerddevries
Date:     2013-08-28 11:00:20 +0000 (Wed, 28 Aug 2013)
Log Message:
-----------
Applied patch https://codereview.appspot.com/12245043

Modified Paths:
--------------
    branches/hive/source/blender/blenkernel/BKE_node.h
    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_intern.h
    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 10:49:08 UTC (rev 59594)
+++ branches/hive/source/blender/blenkernel/BKE_node.h	2013-08-28 11:00:20 UTC (rev 59595)
@@ -115,6 +115,7 @@
 	
 	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);
+	int (*draw_shape)(struct bContext *C, struct PointerRNA *ptr, struct PointerRNA *node_ptr);
 	
 	void (*interface_draw)(struct bContext *C, struct uiLayout *layout, struct PointerRNA *ptr);
 	void (*interface_draw_color)(struct bContext *C, struct PointerRNA *ptr, float *r_color);

Modified: branches/hive/source/blender/editors/space_node/drawnode.c
===================================================================
--- branches/hive/source/blender/editors/space_node/drawnode.c	2013-08-28 10:49:08 UTC (rev 59594)
+++ branches/hive/source/blender/editors/space_node/drawnode.c	2013-08-28 11:00:20 UTC (rev 59595)
@@ -606,7 +606,7 @@
 	 * highlight also if node itself is selected, since we don't display the node body separately!
 	 */
 	for (sock = node->inputs.first; sock; sock = sock->next) {
-		node_socket_circle_draw(C, ntree, node, sock, socket_size, (sock->flag & SELECT) || (node->flag & SELECT));
+		node_socket_shape_draw(C, ntree, node, sock, socket_size, (sock->flag & SELECT) || (node->flag & SELECT));
 	}
 
 	uiEndBlock(C, node->block);
@@ -2736,6 +2736,7 @@
 	
 	NodeSocketTypeUndefined.draw = node_socket_undefined_draw;
 	NodeSocketTypeUndefined.draw_color = node_socket_undefined_draw_color;
+	NodeSocketTypeUndefined.draw_shape = NULL;
 	NodeSocketTypeUndefined.interface_draw = node_socket_undefined_interface_draw;
 	NodeSocketTypeUndefined.interface_draw_color = node_socket_undefined_interface_draw_color;
 	
@@ -2911,6 +2912,7 @@
 {
 	stype->draw = std_node_socket_draw;
 	stype->draw_color = std_node_socket_draw_color;
+	stype->draw_shape = NULL;
 	stype->interface_draw = std_node_socket_interface_draw;
 	stype->interface_draw_color = std_node_socket_interface_draw_color;
 }
@@ -2925,6 +2927,7 @@
 {
 	stype->draw = node_socket_button_label;
 	stype->draw_color = node_socket_virtual_draw_color;
+	stype->draw_shape = NULL;
 }
 
 /* ************** Generic drawing ************** */

Modified: branches/hive/source/blender/editors/space_node/node_draw.c
===================================================================
--- branches/hive/source/blender/editors/space_node/node_draw.c	2013-08-28 10:49:08 UTC (rev 59594)
+++ branches/hive/source/blender/editors/space_node/node_draw.c	2013-08-28 11:00:20 UTC (rev 59595)
@@ -632,15 +632,69 @@
 	glLineWidth(1.0f);
 }
 
-void node_socket_circle_draw(const bContext *C, bNodeTree *ntree, bNode *node, bNodeSocket *sock, float size, int highlight)
+static void node_diamond_draw(float x, float y, float size, float *col, int highlight)
 {
+	static float py[4] = {
+		0.00000000f, 1.00000000f, 0.00000000f, -1.00000000f
+	};
+	static float px[4] = {
+		-1.00000000f, 0.00000000f, 1.00000000f, 0.00000000f
+	};
+
+	int a;
+
+	glColor4fv(col);
+
+	glEnable(GL_BLEND);
+	glBegin(GL_POLYGON);
+	for (a = 0; a < 4; a++)
+		glVertex2f(x + size * px[a], y + size * py[a]);
+	glEnd();
+	glDisable(GL_BLEND);
+
+	if (highlight) {
+		UI_ThemeColor(TH_TEXT_HI);
+		glLineWidth(1.5f);
+	}
+	else {
+		glColor4ub(0, 0, 0, 150);
+	}
+	glEnable(GL_BLEND);
+	glEnable(GL_LINE_SMOOTH);
+	glBegin(GL_LINE_LOOP);
+	for (a = 0; a < 4; a++)
+		glVertex2f(x + size * px[a], y + size * py[a]);
+	glEnd();
+	glDisable(GL_LINE_SMOOTH);
+	glDisable(GL_BLEND);
+	glLineWidth(1.0f);
+}
+
+void node_socket_shape_draw(const bContext *C, bNodeTree *ntree, bNode *node, bNodeSocket *sock, float size, int highlight)
+{
 	PointerRNA ptr, node_ptr;
 	float color[4];
+	int shape;
 	
 	RNA_pointer_create((ID *)ntree, &RNA_NodeSocket, sock, &ptr);
 	RNA_pointer_create((ID *)ntree, &RNA_Node, node, &node_ptr);
 	sock->typeinfo->draw_color((bContext *)C, &ptr, &node_ptr, color);
-	node_circle_draw(sock->locx, sock->locy, size, color, highlight);
+	if (!sock->typeinfo->draw_shape) {
+		node_circle_draw(sock->locx, sock->locy, size, color, highlight);
+	}
+	else {
+		shape = sock->typeinfo->draw_shape((bContext *)C, &ptr, &node_ptr);
+		switch (shape) {
+			case SOCK_SHAPE_CIRCLE:
+				node_circle_draw(sock->locx, sock->locy, size, color, highlight);
+				break;
+			case SOCK_SHAPE_DIAMOND:
+				node_diamond_draw(sock->locx, sock->locy, size, color, highlight);
+				break;
+			default:
+				node_circle_draw(sock->locx, sock->locy, size, color, highlight);
+		}
+	}
 }
 
 /* **************  Socket callbacks *********** */
@@ -911,7 +965,7 @@
 		if (nodeSocketIsHidden(sock))
 			continue;
 		
-		node_socket_circle_draw(C, ntree, node, sock, NODE_SOCKSIZE, sock->flag & SELECT);
+		node_socket_shape_draw(C, ntree, node, sock, NODE_SOCKSIZE, sock->flag & SELECT);
 	}
 	
 	/* socket outputs */
@@ -919,7 +973,7 @@
 		if (nodeSocketIsHidden(sock))
 			continue;
 		
-		node_socket_circle_draw(C, ntree, node, sock, NODE_SOCKSIZE, sock->flag & SELECT);
+		node_socket_shape_draw(C, ntree, node, sock, NODE_SOCKSIZE, sock->flag & SELECT);
 	}
 	
 	/* preview */
@@ -1050,12 +1104,12 @@
 	/* sockets */
 	for (sock = node->inputs.first; sock; sock = sock->next) {
 		if (!nodeSocketIsHidden(sock))
-			node_socket_circle_draw(C, ntree, node, sock, socket_size, sock->flag & SELECT);
+			node_socket_shape_draw(C, ntree, node, sock, socket_size, sock->flag & SELECT);
 	}
 	
 	for (sock = node->outputs.first; sock; sock = sock->next) {
 		if (!nodeSocketIsHidden(sock))
-			node_socket_circle_draw(C, ntree, node, sock, socket_size, sock->flag & SELECT);
+			node_socket_shape_draw(C, ntree, node, sock, socket_size, sock->flag & SELECT);
 	}
 	
 	uiEndBlock(C, node->block);

Modified: branches/hive/source/blender/editors/space_node/node_intern.h
===================================================================
--- branches/hive/source/blender/editors/space_node/node_intern.h	2013-08-28 10:49:08 UTC (rev 59594)
+++ branches/hive/source/blender/editors/space_node/node_intern.h	2013-08-28 11:00:20 UTC (rev 59595)
@@ -70,7 +70,7 @@
 
 /* node_draw.c */
 int node_get_colorid(struct bNode *node);
-void node_socket_circle_draw(const struct bContext *C, struct bNodeTree *ntree, struct bNode *node,
+void node_socket_shape_draw(const struct bContext *C, struct bNodeTree *ntree, struct bNode *node,
                              struct bNodeSocket *sock, float size, int highlight);
 int node_get_resize_cursor(int directions);
 void node_draw_shadow(struct SpaceNode *snode, struct bNode *node, float radius, float alpha);

Modified: branches/hive/source/blender/makesdna/DNA_node_types.h
===================================================================
--- branches/hive/source/blender/makesdna/DNA_node_types.h	2013-08-28 10:49:08 UTC (rev 59594)
+++ branches/hive/source/blender/makesdna/DNA_node_types.h	2013-08-28 11:00:20 UTC (rev 59595)
@@ -148,6 +148,12 @@
 	SOCK_OUT = 2
 } eNodeSocketInOut;
 
+/* socket shape */
+typedef enum eNodeSocketShape {
+	SOCK_SHAPE_CIRCLE = 1,
+	SOCK_SHAPE_DIAMOND = 2
+} eNodeSocketShape;
+
 /* sock->flag, first bit is select */
 	/* hidden is user defined, to hide unused */
 #define SOCK_HIDDEN				2

Modified: branches/hive/source/blender/makesrna/intern/rna_nodetree.c
===================================================================
--- branches/hive/source/blender/makesrna/intern/rna_nodetree.c	2013-08-28 10:49:08 UTC (rev 59594)
+++ branches/hive/source/blender/makesrna/intern/rna_nodetree.c	2013-08-28 11:00:20 UTC (rev 59595)
@@ -82,6 +82,12 @@
 	{0, NULL, 0, NULL, NULL}
 };
 
+EnumPropertyItem node_socket_shape_items[] = {
+	{SOCK_SHAPE_CIRCLE,		"CIRCLE",    	0,    "Circle",    	""},
+	{SOCK_SHAPE_DIAMOND,	"DIAMOND",     	0,    "Diamond",    ""},
+	{0, NULL, 0, NULL, NULL}
+};
+
 EnumPropertyItem node_quality_items[] = {
 	{NTREE_QUALITY_HIGH,   "HIGH",     0,    "High",     "High quality"},
 	{NTREE_QUALITY_MEDIUM, "MEDIUM",   0,    "Medium",   "Medium quality"},
@@ -1752,6 +1758,30 @@
 	RNA_parameter_list_free(&list);
 }
 
+static int rna_NodeSocket_draw_shape(bContext *C, PointerRNA *ptr, PointerRNA *node_ptr)
+{
+	extern FunctionRNA rna_NodeSocket_draw_shape_func;
+
+	bNodeSocket *sock = (bNodeSocket *)ptr->data;
+	ParameterList list;
+	FunctionRNA *func;
+	void *ret;
+	int shape;
+
+	func = &rna_NodeSocket_draw_shape_func; /* RNA_struct_find_function(&ptr, "draw_shape"); */
+
+	RNA_parameter_list_create(&list, ptr, func);
+	RNA_parameter_set_lookup(&list, "context", &C);
+	RNA_parameter_set_lookup(&list, "node", node_ptr);
+	sock->typeinfo->ext_socket.call(C, ptr, func, &list);
+
+	RNA_parameter_get_lookup(&list, "shape", &ret);
+	shape = *( (int *) ret);
+
+	RNA_parameter_list_free(&list);
+	return shape;
+}
+
 static void rna_NodeSocket_unregister(Main *UNUSED(bmain), StructRNA *type)
 {
 	bNodeSocketType *st = RNA_struct_blender_type_get(type);
@@ -1774,7 +1804,7 @@
 	bNodeSocketType *st, dummyst;
 	bNodeSocket dummysock;
 	PointerRNA dummyptr;
-	int have_function[2];
+	int have_function[3];
 
 	/* setup dummy socket & socket type to store static properties in */
 	memset(&dummyst, 0, sizeof(bNodeSocketType));
@@ -1820,6 +1850,7 @@
 
 	st->draw = (have_function[0]) ? rna_NodeSocket_draw : NULL;
 	st->draw_color = (have_function[1]) ? rna_NodeSocket_draw_color : NULL;
+	st->draw_shape = (have_function[2]) ? rna_NodeSocket_draw_shape : NULL;
 
 	/* update while blender is running */
 	WM_main_add_notifier(NC_NODE | NA_EDITED, NULL);
@@ -2166,6 +2197,15 @@
 	sock->typeinfo->draw_color(C, &ptr, nodeptr, r_color);
 }
 
+static int rna_NodeSocketStandard_draw_shape(ID *id, bNodeSocket *sock, struct bContext *C, PointerRNA *nodeptr)
+{
+	PointerRNA ptr;
+	RNA_pointer_create(id, &RNA_NodeSocket, sock, &ptr);
+    if (sock->typeinfo->draw_shape)
+    	return sock->typeinfo->draw_shape(C, &ptr, nodeptr);
+    return SOCK_SHAPE_CIRCLE;
+}
+
 static void rna_NodeSocketInterfaceStandard_draw(ID *id, bNodeSocket *sock, struct bContext *C, struct uiLayout *layout)
 {
 	PointerRNA ptr;
@@ -6145,6 +6185,19 @@
 	RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL | PROP_RNAPTR);

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list