[Bf-blender-cvs] [17c75b653f5] simulation-tree: experiment with NodeTypeDefinition class

Jacques Lucke noreply at git.blender.org
Wed Feb 19 16:12:31 CET 2020


Commit: 17c75b653f59ee7abded35d7668ae6472dd2a9b8
Author: Jacques Lucke
Date:   Wed Feb 19 14:05:00 2020 +0100
Branches: simulation-tree
https://developer.blender.org/rB17c75b653f59ee7abded35d7668ae6472dd2a9b8

experiment with NodeTypeDefinition class

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

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 6a33ba8c2c2..3cd066c0436 100644
--- a/source/blender/simulations/nodes/my_test_node.cc
+++ b/source/blender/simulations/nodes/my_test_node.cc
@@ -469,57 +469,105 @@ void setup_node_copy(bNodeType *ntype,
   });
 }
 
+class NodeTypeDefinition {
+ private:
+  bNodeType m_ntype;
+
+ public:
+  NodeTypeDefinition(StringRef idname,
+                     StringRef ui_name,
+                     StringRef ui_description,
+                     DeclareNodeFunc declare_fn)
+  {
+    setup_node_base(&m_ntype, idname, ui_name, ui_description, declare_fn);
+  }
+
+  void add_dna_storage(StringRef struct_name,
+                       InitStorageFunc init_storage_fn,
+                       CopyStorageFunc copy_storage_fn,
+                       FreeStorageFunc free_storage_fn)
+  {
+    setup_node_storage(&m_ntype, struct_name, init_storage_fn, copy_storage_fn, free_storage_fn);
+  }
+
+  template<typename T>
+  void add_dna_storage(StringRef struct_name, TypedInitStorageFunc<T> init_storage_fn)
+  {
+    setup_node_storage(&m_ntype, struct_name, init_storage_fn);
+  }
+
+  void add_copy_behavior(CopyNodeFunc copy_fn)
+  {
+    setup_node_copy(&m_ntype, copy_fn);
+  }
+
+  template<typename T>
+  void add_copy_behavior(std::function<void(T *dst_storage, const T *src_storage)> copy_fn)
+  {
+    setup_node_copy(&m_ntype, copy_fn);
+  }
+
+  void add_draw_fn(DrawFunc draw_fn)
+  {
+    setup_node_draw(&m_ntype, draw_fn);
+  }
+
+  void register_type()
+  {
+    nodeRegisterType(&m_ntype);
+  }
+};
+
 void register_node_type_my_test_node()
 {
   {
-    static bNodeType ntype;
-    setup_node_base(&ntype, "MyTestNode", "My Test Node", "My Description", declare_test_node);
-    setup_node_storage<MyTestNodeStorage>(
-        &ntype, "MyTestNodeStorage", [](MyTestNodeStorage *storage) { storage->x = 3; });
-    setup_node_copy<MyTestNodeStorage>(
-        &ntype, [](MyTestNodeStorage *dst_storage, const MyTestNodeStorage *UNUSED(src_storage)) {
+    static NodeTypeDefinition ntype(
+        "MyTestNode", "My Test Node", "My Description", declare_test_node);
+    ntype.add_dna_storage<MyTestNodeStorage>("MyTestNodeStorage",
+                                             [](MyTestNodeStorage *storage) { storage->x = 3; });
+    ntype.add_copy_behavior<MyTestNodeStorage>(
+        [](MyTestNodeStorage *dst_storage, const MyTestNodeStorage *UNUSED(src_storage)) {
           dst_storage->x += 1;
         });
-    setup_node_draw(&ntype,
-                    [](uiLayout *layout, struct bContext *UNUSED(C), struct PointerRNA *ptr) {
-                      bNode *node = (bNode *)ptr->data;
-                      MyTestNodeStorage *storage = (MyTestNodeStorage *)node->storage;
-                      uiBut *but = uiDefButI(uiLayoutGetBlock(layout),
-                                             UI_BTYPE_NUM,
-                                             0,
-                                             "X value",
-                                             0,
-                                             0,
-                                             50,
-                                             50,
-                                             &storage->x,
-                                             -1000,
-                                             1000,
-                                             3,
-                                             20,
-                                             "my x value");
-                      uiItemL(layout, "Hello World", 0);
-                      UI_but_func_set(
-                          but,
-                          [](bContext *C, void *UNUSED(arg1), void *UNUSED(arg2)) {
-                            bNodeTree *ntree = CTX_wm_space_node(C)->edittree;
-                            ntree->update = NTREE_UPDATE;
-                            ntreeUpdateTree(CTX_data_main(C), ntree);
-                          },
-                          nullptr,
-                          nullptr);
-                    });
-
-    nodeRegisterType(&ntype);
+    ntype.add_draw_fn([](uiLayout *layout, struct bContext *UNUSED(C), struct PointerRNA *ptr) {
+      bNode *node = (bNode *)ptr->data;
+      MyTestNodeStorage *storage = (MyTestNodeStorage *)node->storage;
+      uiBut *but = uiDefButI(uiLayoutGetBlock(layout),
+                             UI_BTYPE_NUM,
+                             0,
+                             "X value",
+                             0,
+                             0,
+                             50,
+                             50,
+                             &storage->x,
+                             -1000,
+                             1000,
+                             3,
+                             20,
+                             "my x value");
+      uiItemL(layout, "Hello World", 0);
+      UI_but_func_set(
+          but,
+          [](bContext *C, void *UNUSED(arg1), void *UNUSED(arg2)) {
+            bNodeTree *ntree = CTX_wm_space_node(C)->edittree;
+            ntree->update = NTREE_UPDATE;
+            ntreeUpdateTree(CTX_data_main(C), ntree);
+          },
+          nullptr,
+          nullptr);
+    });
+
+    ntype.register_type();
   }
   {
-    static bNodeType ntype;
-    setup_node_base(&ntype, "MyTestNode2", "Node 2", "Description", [](NodeBuilder &node_builder) {
-      node_builder.fixed_input("a", "A", *data_socket_float);
-      node_builder.fixed_input("b", "B", *data_socket_float);
-      node_builder.fixed_output("result", "Result", *data_socket_float);
-    });
-    nodeRegisterType(&ntype);
+    static NodeTypeDefinition ntype(
+        "MyTestNode2", "Node 2", "Description", [](NodeBuilder &node_builder) {
+          node_builder.fixed_input("a", "A", *data_socket_float);
+          node_builder.fixed_input("b", "B", *data_socket_float);
+          node_builder.fixed_output("result", "Result", *data_socket_float);
+        });
+    ntype.register_type();
   }
 }



More information about the Bf-blender-cvs mailing list