[Bf-blender-cvs] [6f67a829110] simulation-tree: initial socket type definition (memory freeing ist still wrong)

Jacques Lucke noreply at git.blender.org
Thu Feb 20 13:19:41 CET 2020


Commit: 6f67a8291100ea05985c17b52af3c22be0e8ac41
Author: Jacques Lucke
Date:   Thu Feb 20 10:35:10 2020 +0100
Branches: simulation-tree
https://developer.blender.org/rB6f67a8291100ea05985c17b52af3c22be0e8ac41

initial socket type definition (memory freeing ist still wrong)

===================================================================

M	source/blender/simulations/nodes/my_test_node.cc

===================================================================

diff --git a/source/blender/simulations/nodes/my_test_node.cc b/source/blender/simulations/nodes/my_test_node.cc
index 8073007529c..5e9f0947006 100644
--- a/source/blender/simulations/nodes/my_test_node.cc
+++ b/source/blender/simulations/nodes/my_test_node.cc
@@ -329,6 +329,75 @@ static void declare_test_node(NodeBuilder &builder)
   }
 }
 
+class SocketTypeDefinition {
+ public:
+  using DrawInNodeFn = std::function<void(struct bContext *C,
+                                          struct uiLayout *layout,
+                                          struct PointerRNA *ptr,
+                                          struct PointerRNA *node_ptr,
+                                          const char *text)>;
+
+ private:
+  bNodeSocketType m_stype;
+  DrawInNodeFn m_draw_in_node_fn;
+  rgba_f m_color = {0.0f, 0.0f, 0.0f, 1.0f};
+
+ public:
+  SocketTypeDefinition(StringRef idname)
+  {
+    idname.copy(m_stype.idname);
+
+    m_stype.draw = SocketTypeDefinition::draw_in_node;
+    m_draw_in_node_fn = [](struct bContext *UNUSED(C),
+                           struct uiLayout *layout,
+                           struct PointerRNA *UNUSED(ptr),
+                           struct PointerRNA *UNUSED(node_ptr),
+                           const char *text) { uiItemL(layout, text, 0); };
+
+    m_stype.draw_color = SocketTypeDefinition::get_draw_color;
+
+    m_stype.userdata = (void *)this;
+  }
+
+  void set_color(rgba_f color)
+  {
+    m_color = color;
+  }
+
+  void register_type()
+  {
+    nodeRegisterSocketType(&m_stype);
+  }
+
+ private:
+  static SocketTypeDefinition *get_from_socket(bNodeSocket *socket)
+  {
+    return (SocketTypeDefinition *)socket->typeinfo->userdata;
+  }
+
+  static void draw_in_node(struct bContext *C,
+                           struct uiLayout *layout,
+                           struct PointerRNA *ptr,
+                           struct PointerRNA *node_ptr,
+                           const char *text)
+  {
+    bNodeSocket *socket = (bNodeSocket *)ptr->data;
+    SocketTypeDefinition *def = get_from_socket(socket);
+    def->m_draw_in_node_fn(C, layout, ptr, node_ptr, text);
+  }
+
+  static void get_draw_color(struct bContext *UNUSED(C),
+                             struct PointerRNA *ptr,
+                             struct PointerRNA *UNUSED(node_ptr),
+                             const void *UNUSED(userdata),
+                             float *r_color)
+  {
+    bNodeSocket *socket = (bNodeSocket *)ptr->data;
+    SocketTypeDefinition *def = get_from_socket(socket);
+    memcpy(r_color, def->m_color, sizeof(rgba_f));
+  }
+};
+
 class NodeTypeDefinition {
  public:
   using DeclareNodeFn = std::function<void(NodeBuilder &node_builder)>;
@@ -602,7 +671,12 @@ static bNodeSocketType *register_new_simple_socket_type(StringRefNull idname, rg
 
 void init_socket_data_types()
 {
-  register_new_simple_socket_type("NodeSocketFloatList", {0.63, 0.63, 0.63, 0.5});
+  {
+    static SocketTypeDefinition stype("NodeSocketFloatList");
+    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});
 
   data_socket_float = new BaseSocketDataType("Float", nodeSocketTypeFind("NodeSocketFloat"));



More information about the Bf-blender-cvs mailing list