[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [61237] trunk/blender/source/blender: Make dynamic node labels possible as a registerable function 'draw_label' (simple 'label' identifier is already in use, need to avoid API breakage).
Lukas Toenne
lukas.toenne at googlemail.com
Tue Nov 12 19:18:04 CET 2013
Revision: 61237
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=61237
Author: lukastoenne
Date: 2013-11-12 18:18:04 +0000 (Tue, 12 Nov 2013)
Log Message:
-----------
Make dynamic node labels possible as a registerable function 'draw_label' (simple 'label' identifier is already in use, need to avoid API breakage). This should simply return a string. The dynamic label can still be overridden by the user-defined node.label string.
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/makesrna/intern/rna_nodetree.c
trunk/blender/source/blender/nodes/composite/nodes/node_composite_moviedistortion.c
trunk/blender/source/blender/nodes/intern/node_common.c
trunk/blender/source/blender/nodes/intern/node_common.h
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 2013-11-12 18:17:58 UTC (rev 61236)
+++ trunk/blender/source/blender/blenkernel/BKE_node.h 2013-11-12 18:18:04 UTC (rev 61237)
@@ -175,7 +175,7 @@
void (*draw_backdrop)(struct SpaceNode *snode, struct ImBuf *backdrop, struct bNode *node, int x, int y);
/// Optional custom label function for the node header.
- void (*labelfunc)(struct bNode *node, char *label, int maxlen);
+ void (*labelfunc)(struct bNodeTree *ntree, struct bNode *node, char *label, int maxlen);
/// Optional custom resize handle polling.
int (*resize_area_func)(struct bNode *node, int x, int y);
/// Optional selection area polling.
@@ -556,7 +556,7 @@
/* ************** NODE TYPE ACCESS *************** */
-void nodeLabel(struct bNode *node, char *label, int maxlen);
+void nodeLabel(struct bNodeTree *ntree, struct bNode *node, char *label, int maxlen);
int nodeGroupPoll(struct bNodeTree *nodetree, struct bNodeTree *grouptree);
@@ -571,7 +571,7 @@
const char *storagename,
void (*freefunc)(struct bNode *node),
void (*copyfunc)(struct bNodeTree *dest_ntree, struct bNode *dest_node, struct bNode *src_node));
-void node_type_label(struct bNodeType *ntype, void (*labelfunc)(struct bNode *, char *label, int maxlen));
+void node_type_label(struct bNodeType *ntype, void (*labelfunc)(struct bNodeTree *ntree, struct bNode *, char *label, int maxlen));
void node_type_update(struct bNodeType *ntype,
void (*updatefunc)(struct bNodeTree *ntree, struct bNode *node),
void (*verifyfunc)(struct bNodeTree *ntree, struct bNode *node, struct ID *id));
Modified: trunk/blender/source/blender/blenkernel/intern/node.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/node.c 2013-11-12 18:17:58 UTC (rev 61236)
+++ trunk/blender/source/blender/blenkernel/intern/node.c 2013-11-12 18:18:04 UTC (rev 61237)
@@ -3089,12 +3089,12 @@
/* ************* node type access ********** */
-void nodeLabel(bNode *node, char *label, int maxlen)
+void nodeLabel(bNodeTree *ntree, bNode *node, char *label, int maxlen)
{
if (node->label[0] != '\0')
BLI_strncpy(label, node->label, maxlen);
else if (node->typeinfo->labelfunc)
- node->typeinfo->labelfunc(node, label, maxlen);
+ node->typeinfo->labelfunc(ntree, node, label, maxlen);
else
BLI_strncpy(label, IFACE_(node->typeinfo->ui_name), maxlen);
}
@@ -3267,7 +3267,7 @@
ntype->freefunc = freefunc;
}
-void node_type_label(struct bNodeType *ntype, void (*labelfunc)(struct bNode *, char *label, int maxlen))
+void node_type_label(struct bNodeType *ntype, void (*labelfunc)(struct bNodeTree *ntree, struct bNode *node, char *label, int maxlen))
{
ntype->labelfunc = labelfunc;
}
Modified: trunk/blender/source/blender/editors/space_node/drawnode.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/drawnode.c 2013-11-12 18:17:58 UTC (rev 61236)
+++ trunk/blender/source/blender/editors/space_node/drawnode.c 2013-11-12 18:18:04 UTC (rev 61237)
@@ -384,7 +384,7 @@
node->totr = rect;
}
-static void node_draw_frame_label(bNode *node, const float aspect)
+static void node_draw_frame_label(bNodeTree *ntree, bNode *node, const float aspect)
{
/* XXX font id is crap design */
const int fontid = UI_GetStyle()->widgetlabel.uifont_id;
@@ -397,7 +397,7 @@
float x, y;
const int font_size = data->label_size / aspect;
- nodeLabel(node, label, sizeof(label));
+ nodeLabel(ntree, node, label, sizeof(label));
BLF_enable(fontid, BLF_ASPECT);
BLF_aspect(fontid, aspect, aspect, 1.0f);
@@ -420,7 +420,7 @@
}
static void node_draw_frame(const bContext *C, ARegion *ar, SpaceNode *snode,
- bNodeTree *UNUSED(ntree), bNode *node, bNodeInstanceKey UNUSED(key))
+ bNodeTree *ntree, bNode *node, bNodeInstanceKey UNUSED(key))
{
rctf *rct = &node->totr;
int color_id = node_get_colorid(node);
@@ -469,7 +469,7 @@
}
/* label */
- node_draw_frame_label(node, snode->aspect);
+ node_draw_frame_label(ntree, node, snode->aspect);
UI_ThemeClearColor(color_id);
Modified: trunk/blender/source/blender/editors/space_node/node_draw.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/node_draw.c 2013-11-12 18:17:58 UTC (rev 61236)
+++ trunk/blender/source/blender/editors/space_node/node_draw.c 2013-11-12 18:18:04 UTC (rev 61237)
@@ -868,7 +868,7 @@
UI_ThemeColor(TH_TEXT);
#endif
- nodeLabel(node, showname, sizeof(showname));
+ nodeLabel(ntree, node, showname, sizeof(showname));
//if (node->flag & NODE_MUTED)
// BLI_snprintf(showname, sizeof(showname), "[%s]", showname); /* XXX - don't print into self! */
@@ -1035,7 +1035,7 @@
UI_ThemeColor(TH_TEXT);
if (node->miniwidth > 0.0f) {
- nodeLabel(node, showname, sizeof(showname));
+ nodeLabel(ntree, node, showname, sizeof(showname));
//if (node->flag & NODE_MUTED)
// BLI_snprintf(showname, sizeof(showname), "[%s]", showname); /* XXX - don't print into self! */
Modified: trunk/blender/source/blender/makesrna/intern/rna_nodetree.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_nodetree.c 2013-11-12 18:17:58 UTC (rev 61236)
+++ trunk/blender/source/blender/makesrna/intern/rna_nodetree.c 2013-11-12 18:18:04 UTC (rev 61237)
@@ -1280,6 +1280,29 @@
RNA_parameter_list_free(&list);
}
+static void rna_Node_draw_label(bNodeTree *ntree, bNode *node, char *label, int maxlen)
+{
+ extern FunctionRNA rna_Node_draw_label_func;
+
+ PointerRNA ptr;
+ ParameterList list;
+ FunctionRNA *func;
+ void *ret;
+ char *rlabel;
+
+ func = &rna_Node_draw_label_func; /* RNA_struct_find_function(&ptr, "draw_label"); */
+
+ RNA_pointer_create(&ntree->id, &RNA_Node, node, &ptr);
+ RNA_parameter_list_create(&list, &ptr, func);
+ node->typeinfo->ext.call(NULL, &ptr, func, &list);
+
+ RNA_parameter_get_lookup(&list, "label", &ret);
+ rlabel = *(char **)ret;
+ BLI_strncpy(label, rlabel != NULL ? rlabel : "", maxlen);
+
+ RNA_parameter_list_free(&list);
+}
+
static int rna_Node_is_registered_node_type(StructRNA *type)
{
return (RNA_struct_blender_type_get(type) != NULL);
@@ -1321,7 +1344,7 @@
PointerRNA dummyptr;
FunctionRNA *func;
PropertyRNA *parm;
- int have_function[8];
+ int have_function[9];
/* setup dummy node & node type to store static properties in */
memset(&dummynt, 0, sizeof(bNodeType));
@@ -1379,6 +1402,7 @@
nt->freefunc_api = (have_function[5]) ? rna_Node_free : NULL;
nt->draw_buttons = (have_function[6]) ? rna_Node_draw_buttons : NULL;
nt->draw_buttons_ex = (have_function[7]) ? rna_Node_draw_buttons_ext : NULL;
+ nt->labelfunc = (have_function[8]) ? rna_Node_draw_label : NULL;
/* sanitize size values in case not all have been registered */
if (nt->maxwidth < nt->minwidth)
@@ -7149,6 +7173,14 @@
RNA_def_property_struct_type(parm, "UILayout");
RNA_def_property_ui_text(parm, "Layout", "Layout in the UI");
RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL);
+
+ /* dynamic label */
+ func = RNA_def_function(srna, "draw_label", NULL);
+ RNA_def_function_ui_description(func, "Returns a dynamic label string");
+ RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL);
+ parm = RNA_def_string(func, "label", "", MAX_NAME, "Label", "");
+ RNA_def_property_flag(parm, PROP_THICK_WRAP); /* needed for string return value */
+ RNA_def_function_output(func, parm);
}
static void rna_def_node_link(BlenderRNA *brna)
Modified: trunk/blender/source/blender/nodes/composite/nodes/node_composite_moviedistortion.c
===================================================================
--- trunk/blender/source/blender/nodes/composite/nodes/node_composite_moviedistortion.c 2013-11-12 18:17:58 UTC (rev 61236)
+++ trunk/blender/source/blender/nodes/composite/nodes/node_composite_moviedistortion.c 2013-11-12 18:18:04 UTC (rev 61237)
@@ -48,7 +48,7 @@
{ -1, 0, "" }
};
-static void label(bNode *node, char *label, int maxlen)
+static void label(bNodeTree *UNUSED(ntree), bNode *node, char *label, int maxlen)
{
if (node->custom1 == 0)
BLI_strncpy(label, IFACE_("Undistortion"), maxlen);
Modified: trunk/blender/source/blender/nodes/intern/node_common.c
===================================================================
--- trunk/blender/source/blender/nodes/intern/node_common.c 2013-11-12 18:17:58 UTC (rev 61236)
+++ trunk/blender/source/blender/nodes/intern/node_common.c 2013-11-12 18:18:04 UTC (rev 61237)
@@ -82,7 +82,7 @@
}
/* groups display their internal tree name as label */
-void node_group_label(bNode *node, char *label, int maxlen)
+void node_group_label(bNodeTree *UNUSED(ntree), bNode *node, char *label, int maxlen)
{
BLI_strncpy(label, (node->id) ? node->id->name + 2 : IFACE_("Missing Datablock"), maxlen);
}
Modified: trunk/blender/source/blender/nodes/intern/node_common.h
===================================================================
--- trunk/blender/source/blender/nodes/intern/node_common.h 2013-11-12 18:17:58 UTC (rev 61236)
+++ trunk/blender/source/blender/nodes/intern/node_common.h 2013-11-12 18:18:04 UTC (rev 61237)
@@ -37,7 +37,7 @@
struct bNodeTree;
-void node_group_label(struct bNode *node, char *label, int maxlen);
+void node_group_label(struct bNodeTree *ntree, struct bNode *node, char *label, int maxlen);
int node_group_poll_instance(struct bNode *node, struct bNodeTree *nodetree);
void ntree_update_reroute_nodes(struct bNodeTree *ntree);
Modified: trunk/blender/source/blender/nodes/intern/node_util.c
===================================================================
--- trunk/blender/source/blender/nodes/intern/node_util.c 2013-11-12 18:17:58 UTC (rev 61236)
+++ trunk/blender/source/blender/nodes/intern/node_util.c 2013-11-12 18:18:04 UTC (rev 61237)
@@ -83,28 +83,28 @@
/**** Labels ****/
-void node_blend_label(bNode *node, char *label, int maxlen)
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list