[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