[Bf-blender-cvs] [18fb8ed3fbd] simulation-tree: unify socket type freeing
Jacques Lucke
noreply at git.blender.org
Thu Feb 20 13:19:49 CET 2020
Commit: 18fb8ed3fbd81f1239b4707fbb751585f43224ea
Author: Jacques Lucke
Date: Thu Feb 20 11:09:43 2020 +0100
Branches: simulation-tree
https://developer.blender.org/rB18fb8ed3fbd81f1239b4707fbb751585f43224ea
unify socket type freeing
===================================================================
M source/blender/blenkernel/BKE_node.h
M source/blender/blenkernel/intern/node.c
M source/blender/makesrna/intern/rna_nodetree.c
M source/blender/nodes/intern/node_socket.c
M source/blender/simulations/nodes/my_test_node.cc
===================================================================
diff --git a/source/blender/blenkernel/BKE_node.h b/source/blender/blenkernel/BKE_node.h
index 98a6ff743ee..ae32093674b 100644
--- a/source/blender/blenkernel/BKE_node.h
+++ b/source/blender/blenkernel/BKE_node.h
@@ -148,7 +148,9 @@ typedef struct bNodeSocketType {
/* Custom data that can be passed into callbacks. */
void *userdata;
- void (*free_userdata)(void *userdata);
+
+ /* Callback to free the socket type. */
+ void (*free_self)(struct bNodeSocketType *stype);
} bNodeSocketType;
typedef void *(*NodeInitExecFunction)(struct bNodeExecContext *context,
diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c
index e06cd7665f8..4c66da6eed8 100644
--- a/source/blender/blenkernel/intern/node.c
+++ b/source/blender/blenkernel/intern/node.c
@@ -468,10 +468,7 @@ static void node_free_socket_type(void *socktype_v)
* or we'd want to update *all* active Mains, which we cannot do anyway currently. */
update_typeinfo(G_MAIN, NULL, NULL, NULL, socktype, true);
- if (socktype->free_userdata != NULL) {
- socktype->free_userdata(socktype->userdata);
- }
- MEM_freeN(socktype);
+ socktype->free_self(socktype);
}
void nodeRegisterSocketType(bNodeSocketType *st)
diff --git a/source/blender/makesrna/intern/rna_nodetree.c b/source/blender/makesrna/intern/rna_nodetree.c
index 43aa7e6d347..db2315ea804 100644
--- a/source/blender/makesrna/intern/rna_nodetree.c
+++ b/source/blender/makesrna/intern/rna_nodetree.c
@@ -2215,6 +2215,8 @@ static StructRNA *rna_NodeSocket_register(Main *UNUSED(bmain),
nodeRegisterSocketType(st);
}
+ st->free_self = (void (*)(bNodeSocketType * stype)) MEM_freeN;
+
/* if RNA type is already registered, unregister first */
if (st->ext_socket.srna) {
StructRNA *srna = st->ext_socket.srna;
@@ -2529,6 +2531,8 @@ static StructRNA *rna_NodeSocketInterface_register(Main *UNUSED(bmain),
nodeRegisterSocketType(st);
}
+ st->free_self = (void (*)(bNodeSocketType * stype)) MEM_freeN;
+
/* if RNA type is already registered, unregister first */
if (st->ext_interface.srna) {
StructRNA *srna = st->ext_interface.srna;
diff --git a/source/blender/nodes/intern/node_socket.c b/source/blender/nodes/intern/node_socket.c
index 13f9039379d..740e45bc5e1 100644
--- a/source/blender/nodes/intern/node_socket.c
+++ b/source/blender/nodes/intern/node_socket.c
@@ -403,6 +403,7 @@ static bNodeSocketType *make_standard_socket_type(int type, int subtype)
StructRNA *srna;
stype = MEM_callocN(sizeof(bNodeSocketType), "node socket C type");
+ stype->free_self = (void (*)(bNodeSocketType * stype)) MEM_freeN;
BLI_strncpy(stype->idname, socket_idname, sizeof(stype->idname));
/* set the RNA type
@@ -441,6 +442,7 @@ static bNodeSocketType *make_socket_type_virtual(void)
StructRNA *srna;
stype = MEM_callocN(sizeof(bNodeSocketType), "node socket C type");
+ stype->free_self = (void (*)(bNodeSocketType * stype)) MEM_freeN;
BLI_strncpy(stype->idname, socket_idname, sizeof(stype->idname));
/* set the RNA type
diff --git a/source/blender/simulations/nodes/my_test_node.cc b/source/blender/simulations/nodes/my_test_node.cc
index 9c3f9185dab..b9493832f53 100644
--- a/source/blender/simulations/nodes/my_test_node.cc
+++ b/source/blender/simulations/nodes/my_test_node.cc
@@ -355,6 +355,7 @@ class SocketTypeDefinition {
const char *text) { uiItemL(layout, text, 0); };
m_stype.draw_color = SocketTypeDefinition::get_draw_color;
+ m_stype.free_self = [](bNodeSocketType *UNUSED(stype)) {};
m_stype.userdata = (void *)this;
}
@@ -643,30 +644,6 @@ void register_node_type_my_test_node()
}
}
-static bNodeSocketType *register_new_simple_socket_type(StringRefNull idname, rgba_f color)
-{
- bNodeSocketType *stype = (bNodeSocketType *)MEM_callocN(sizeof(bNodeSocketType), __func__);
- BLI_strncpy(stype->idname, idname.data(), sizeof(stype->idname));
- stype->draw = [](struct bContext *UNUSED(C),
- struct uiLayout *layout,
- struct PointerRNA *UNUSED(ptr),
- struct PointerRNA *UNUSED(node_ptr),
- const char *text) { uiItemL(layout, text, 0); };
-
- stype->userdata = new rgba_f(color);
- stype->free_userdata = [](void *userdata) { delete (rgba_f *)userdata; };
-
- stype->draw_color = [](struct bContext *UNUSED(C),
- struct PointerRNA *ptr,
- struct PointerRNA *UNUSED(node_ptr),
- float *r_color) {
- rgba_f color = *(rgba_f *)((bNodeSocket *)ptr->data)->typeinfo->userdata;
- *(rgba_f *)r_color = color;
- };
- nodeRegisterSocketType(stype);
- return stype;
-}
-
void init_socket_data_types()
{
{
@@ -674,8 +651,11 @@ void init_socket_data_types()
stype.set_color({0.63, 0.63, 0.63, 0.5});
stype.register_type();
}
- // register_new_simple_socket_type("NodeSocketFloatList", {0.63, 0.63, 0.63, 0.5});
- register_new_simple_socket_type("NodeSocketIntList", {0.06, 0.52, 0.15, 0.5});
+ {
+ static SocketTypeDefinition stype("NodeSocketIntList");
+ stype.set_color({0.06, 0.52, 0.15, 0.5});
+ stype.register_type();
+ }
data_socket_float = new BaseSocketDataType("Float", nodeSocketTypeFind("NodeSocketFloat"));
data_socket_int = new BaseSocketDataType("Integer", nodeSocketTypeFind("NodeSocketInt"));
More information about the Bf-blender-cvs
mailing list