[Bf-blender-cvs] [cb634d5204a] temp-compact-node-prototype: move to sidebar

Jacques Lucke noreply at git.blender.org
Thu Mar 25 16:11:06 CET 2021


Commit: cb634d5204a61616e73ed2ddec645db850aacc23
Author: Jacques Lucke
Date:   Thu Mar 25 12:27:01 2021 +0100
Branches: temp-compact-node-prototype
https://developer.blender.org/rBcb634d5204a61616e73ed2ddec645db850aacc23

move to sidebar

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

M	release/scripts/startup/bl_ui/space_node.py
M	source/blender/nodes/geometry/nodes/node_geo_attribute_fill.cc

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

diff --git a/release/scripts/startup/bl_ui/space_node.py b/release/scripts/startup/bl_ui/space_node.py
index d8cfa9dcc82..11685b3e7e0 100644
--- a/release/scripts/startup/bl_ui/space_node.py
+++ b/release/scripts/startup/bl_ui/space_node.py
@@ -548,21 +548,6 @@ class NODE_PT_active_node_properties(Panel):
         elif hasattr(node, "draw_buttons"):
             node.draw_buttons(context, layout)
 
-        # XXX this could be filtered further to exclude socket types
-        # which don't have meaningful input values (e.g. cycles shader)
-        value_inputs = [socket for socket in node.inputs if self.show_socket_input(socket)]
-        if value_inputs:
-            layout.separator()
-            layout.label(text="Inputs:")
-            for socket in value_inputs:
-                row = layout.row()
-                socket.draw(
-                    context,
-                    row,
-                    node,
-                    iface_(socket.label if socket.label else socket.name, socket.bl_rna.translation_context),
-                )
-
     def show_socket_input(self, socket):
         return hasattr(socket, 'draw') and socket.enabled and not socket.is_linked
 
diff --git a/source/blender/nodes/geometry/nodes/node_geo_attribute_fill.cc b/source/blender/nodes/geometry/nodes/node_geo_attribute_fill.cc
index 2d45577f017..0d9dcabaebd 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_attribute_fill.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_attribute_fill.cc
@@ -82,6 +82,7 @@ struct SocketMenuInfo {
   bNodeTree *ntree;
   bNode *node;
   bNodeSocket *socket;
+  std::string enum_name;
 };
 
 struct SocketMenuInfoPtr {
@@ -115,14 +116,12 @@ static void draw_socket_menu(bContext *UNUSED(C), uiLayout *layout, void *arg)
   PointerRNA socket_ptr;
   RNA_pointer_create(&socket_info->ntree->id, &RNA_NodeSocket, socket_info->socket, &socket_ptr);
 
-  // uiItemR(layout, &socket_ptr, "hide", 0, "Expose", ICON_NONE);
-
   if (socket_info->socket->flag & SOCK_HIDDEN) {
     PointerRNA expose_props;
     uiItemFullO(layout,
                 "node.expose_input_socket",
                 "Expose",
-                ICON_NONE,
+                ICON_TRACKING_FORWARDS_SINGLE,
                 nullptr,
                 WM_OP_EXEC_DEFAULT,
                 0,
@@ -137,7 +136,7 @@ static void draw_socket_menu(bContext *UNUSED(C), uiLayout *layout, void *arg)
     uiItemFullO(layout,
                 "node.expose_input_socket",
                 "Unexpose",
-                ICON_NONE,
+                ICON_TRACKING_CLEAR_FORWARDS,
                 nullptr,
                 WM_OP_EXEC_DEFAULT,
                 0,
@@ -148,7 +147,9 @@ static void draw_socket_menu(bContext *UNUSED(C), uiLayout *layout, void *arg)
     RNA_boolean_set(&expose_props, "expose", false);
   }
 
-  uiItemsEnumR(layout, &node_ptr, "data_type");
+  if (!socket_info->enum_name.empty()) {
+    uiItemsEnumR(layout, &node_ptr, socket_info->enum_name.c_str());
+  }
 }
 
 static void geo_node_attribute_fill_layout(uiLayout *layout, bContext *C, PointerRNA *node_ptr)
@@ -156,37 +157,66 @@ static void geo_node_attribute_fill_layout(uiLayout *layout, bContext *C, Pointe
   bNodeTree *ntree = (bNodeTree *)node_ptr->owner_id;
   bNode *node = (bNode *)node_ptr->data;
 
-  bNodeSocket *value_socket = nullptr;
-  LISTBASE_FOREACH (bNodeSocket *, socket, &node->inputs) {
-    if ((socket->flag & SOCK_UNAVAIL) == 0 && STREQ(socket->name, "Value")) {
-      value_socket = socket;
-      break;
+  uiItemR(layout, node_ptr, "domain", 0, IFACE_("Domain"), ICON_NONE);
+
+  {
+    bNodeSocket *attribute_socket = (bNodeSocket *)BLI_findlink(&node->inputs, 1);
+    PointerRNA socket_ptr;
+    RNA_pointer_create(node_ptr->owner_id, &RNA_NodeSocket, attribute_socket, &socket_ptr);
+
+    Set<SocketMenuInfoPtr> &set = get_socket_menu_info_set();
+    {
+      auto info = SocketMenuInfoPtr{std::make_unique<SocketMenuInfo>()};
+      info.value->ntree = ntree;
+      info.value->node = node;
+      info.value->socket = attribute_socket;
+      set.add(std::move(info));
     }
+    auto info = SocketMenuInfoPtr{std::make_unique<SocketMenuInfo>()};
+    info.value->ntree = ntree;
+    info.value->node = node;
+    info.value->socket = attribute_socket;
+    SocketMenuInfo *stored_info = set.lookup_key(info).value.get();
+
+    uiLayout *row = uiLayoutRow(layout, false);
+    uiLayout *sub_row = uiLayoutRow(row, false);
+    uiLayoutSetActive(sub_row, (attribute_socket->flag & SOCK_HIDDEN) != 0);
+    attribute_socket->typeinfo->draw(C, sub_row, &socket_ptr, node_ptr, attribute_socket->name);
+    uiItemMenuF(row, "", ICON_DOWNARROW_HLT, draw_socket_menu, stored_info);
   }
-  PointerRNA socket_ptr;
-  RNA_pointer_create(node_ptr->owner_id, &RNA_NodeSocket, value_socket, &socket_ptr);
-
-  uiItemR(layout, node_ptr, "domain", 0, "", ICON_NONE);
 
-  Set<SocketMenuInfoPtr> &set = get_socket_menu_info_set();
   {
+    bNodeSocket *value_socket = nullptr;
+    LISTBASE_FOREACH (bNodeSocket *, socket, &node->inputs) {
+      if ((socket->flag & SOCK_UNAVAIL) == 0 && STREQ(socket->name, "Value")) {
+        value_socket = socket;
+        break;
+      }
+    }
+    PointerRNA socket_ptr;
+    RNA_pointer_create(node_ptr->owner_id, &RNA_NodeSocket, value_socket, &socket_ptr);
+
+    Set<SocketMenuInfoPtr> &set = get_socket_menu_info_set();
+    {
+      auto info = SocketMenuInfoPtr{std::make_unique<SocketMenuInfo>()};
+      info.value->ntree = ntree;
+      info.value->node = node;
+      info.value->socket = value_socket;
+      info.value->enum_name = "data_type";
+      set.add(std::move(info));
+    }
     auto info = SocketMenuInfoPtr{std::make_unique<SocketMenuInfo>()};
     info.value->ntree = ntree;
     info.value->node = node;
     info.value->socket = value_socket;
-    set.add(std::move(info));
+    SocketMenuInfo *stored_info = set.lookup_key(info).value.get();
+
+    uiLayout *row = uiLayoutRow(layout, false);
+    uiLayout *sub_row = uiLayoutRow(row, false);
+    uiLayoutSetActive(sub_row, (value_socket->flag & SOCK_HIDDEN) != 0);
+    value_socket->typeinfo->draw(C, sub_row, &socket_ptr, node_ptr, value_socket->name);
+    uiItemMenuF(row, "", ICON_DOWNARROW_HLT, draw_socket_menu, stored_info);
   }
-  auto info = SocketMenuInfoPtr{std::make_unique<SocketMenuInfo>()};
-  info.value->ntree = ntree;
-  info.value->node = node;
-  info.value->socket = value_socket;
-  SocketMenuInfo *stored_info = set.lookup_key(info).value.get();
-
-  uiLayout *row = uiLayoutRow(layout, false);
-  uiLayout *sub_row = uiLayoutRow(row, false);
-  uiLayoutSetActive(sub_row, (value_socket->flag & SOCK_HIDDEN) != 0);
-  value_socket->typeinfo->draw(C, sub_row, &socket_ptr, node_ptr, value_socket->name);
-  uiItemMenuF(row, "", ICON_DOWNARROW_HLT, draw_socket_menu, stored_info);
 }
 
 static AttributeDomain get_result_domain(const GeometryComponent &component,
@@ -284,6 +314,6 @@ void register_node_type_geo_attribute_fill()
   node_type_init(&ntype, geo_node_attribute_fill_init);
   node_type_update(&ntype, geo_node_attribute_fill_update);
   ntype.geometry_node_execute = blender::nodes::geo_node_attribute_fill_exec;
-  ntype.draw_buttons = blender::nodes::geo_node_attribute_fill_layout;
+  ntype.draw_buttons_ex = blender::nodes::geo_node_attribute_fill_layout;
   nodeRegisterType(&ntype);
 }



More information about the Bf-blender-cvs mailing list