[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