From 72e810a45aba32e5c461225c019fe55067c56110 Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Mon, 4 Aug 2025 18:35:20 +0200 Subject: [PATCH] Geometry Nodes: put closure sockets in panel This moves the closure interface sockets into a separate panel so that they can't be confused with the main closure input. Pull Request: https://projects.blender.org/blender/blender/pulls/143821 --- .../nodes/node_geo_evaluate_closure.cc | 27 ++++++++++--------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/source/blender/nodes/geometry/nodes/node_geo_evaluate_closure.cc b/source/blender/nodes/geometry/nodes/node_geo_evaluate_closure.cc index b6f7b8dd1b3..8f42e361b86 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_evaluate_closure.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_evaluate_closure.cc @@ -24,31 +24,34 @@ NODE_STORAGE_FUNCS(NodeEvaluateClosure) static void node_declare(NodeDeclarationBuilder &b) { + b.use_custom_socket_order(); + b.allow_any_socket_order(); + b.add_input("Closure"); const bNode *node = b.node_or_null(); + auto &panel = b.add_panel("Interface"); if (node) { const auto &storage = node_storage(*node); - for (const int i : IndexRange(storage.input_items.items_num)) { - const NodeEvaluateClosureInputItem &item = storage.input_items.items[i]; - const eNodeSocketDatatype socket_type = eNodeSocketDatatype(item.socket_type); - const std::string identifier = EvaluateClosureInputItemsAccessor::socket_identifier_for_item( - item); - b.add_input(socket_type, item.name, identifier) - .structure_type(StructureType(item.structure_type)); - } for (const int i : IndexRange(storage.output_items.items_num)) { const NodeEvaluateClosureOutputItem &item = storage.output_items.items[i]; const eNodeSocketDatatype socket_type = eNodeSocketDatatype(item.socket_type); const std::string identifier = EvaluateClosureOutputItemsAccessor::socket_identifier_for_item(item); - b.add_output(socket_type, item.name, identifier) + panel.add_output(socket_type, item.name, identifier) .structure_type(StructureType(item.structure_type)); } + panel.add_output("", "__extend__"); + for (const int i : IndexRange(storage.input_items.items_num)) { + const NodeEvaluateClosureInputItem &item = storage.input_items.items[i]; + const eNodeSocketDatatype socket_type = eNodeSocketDatatype(item.socket_type); + const std::string identifier = EvaluateClosureInputItemsAccessor::socket_identifier_for_item( + item); + panel.add_input(socket_type, item.name, identifier) + .structure_type(StructureType(item.structure_type)); + } + panel.add_input("", "__extend__"); } - - b.add_input("", "__extend__"); - b.add_output("", "__extend__"); } static void node_init(bNodeTree * /*tree*/, bNode *node)