diff --git a/source/blender/blenkernel/intern/node_tree_interface.cc b/source/blender/blenkernel/intern/node_tree_interface.cc index 998943f528a..0d3a7c186b0 100644 --- a/source/blender/blenkernel/intern/node_tree_interface.cc +++ b/source/blender/blenkernel/intern/node_tree_interface.cc @@ -1156,6 +1156,7 @@ bNodeTreeInterfaceSocket *add_interface_socket_from_node(bNodeTree &ntree, if (!decl->description.empty()) { description = decl->description; } + SET_FLAG_FROM_TEST(flag, decl->optional_label, NODE_INTERFACE_SOCKET_OPTIONAL_LABEL); } iosock = ntree.tree_interface.add_socket(name, description, socket_type, flag, nullptr); diff --git a/source/blender/editors/space_node/drawnode.cc b/source/blender/editors/space_node/drawnode.cc index 4756296a10a..96398b6ee35 100644 --- a/source/blender/editors/space_node/drawnode.cc +++ b/source/blender/editors/space_node/drawnode.cc @@ -1420,6 +1420,9 @@ static void std_node_socket_interface_draw(ID *id, } } + if (interface_socket->flag & NODE_INTERFACE_SOCKET_INPUT) { + col->prop(&ptr, "optional_label", DEFAULT_FLAGS, std::nullopt, ICON_NONE); + } { uiLayout *sub = &col->column(false); sub->active_set(interface_socket->default_input == NODE_DEFAULT_INPUT_VALUE); diff --git a/source/blender/makesdna/DNA_node_tree_interface_types.h b/source/blender/makesdna/DNA_node_tree_interface_types.h index 1edcb6fdd39..3c8ff4cd283 100644 --- a/source/blender/makesdna/DNA_node_tree_interface_types.h +++ b/source/blender/makesdna/DNA_node_tree_interface_types.h @@ -70,8 +70,13 @@ typedef enum NodeTreeInterfaceSocketFlag { NODE_INTERFACE_SOCKET_PANEL_TOGGLE = 1 << 8, /* Menu socket should be drawn expanded instead of as drop-down menu. */ NODE_INTERFACE_SOCKET_MENU_EXPANDED = 1 << 9, + /** + * Indicates that drawing code may decide not to draw the label if that would result in a + * cleaner UI. + */ + NODE_INTERFACE_SOCKET_OPTIONAL_LABEL = 1 << 10, } NodeTreeInterfaceSocketFlag; -ENUM_OPERATORS(NodeTreeInterfaceSocketFlag, NODE_INTERFACE_SOCKET_MENU_EXPANDED); +ENUM_OPERATORS(NodeTreeInterfaceSocketFlag, NODE_INTERFACE_SOCKET_OPTIONAL_LABEL); typedef enum NodeSocketInterfaceStructureType { NODE_INTERFACE_SOCKET_STRUCTURE_TYPE_AUTO = 0, diff --git a/source/blender/makesrna/intern/rna_node_tree_interface.cc b/source/blender/makesrna/intern/rna_node_tree_interface.cc index d4780c08334..2e0dc4fd3cb 100644 --- a/source/blender/makesrna/intern/rna_node_tree_interface.cc +++ b/source/blender/makesrna/intern/rna_node_tree_interface.cc @@ -1205,6 +1205,16 @@ static void rna_def_node_interface_socket(BlenderRNA *brna) prop, "Menu Expanded", "Draw the menu socket as an expanded drop-down menu"); RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceItem_update"); + prop = RNA_def_property(srna, "optional_label", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, nullptr, "flag", NODE_INTERFACE_SOCKET_OPTIONAL_LABEL); + RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); + RNA_def_property_ui_text( + prop, + "Optional Label", + "Indicate that the label of this socket is not necessary to understand its meaning. This " + "may result in the label being skipped in some cases"); + RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceItem_update"); + prop = RNA_def_property(srna, "attribute_domain", PROP_ENUM, PROP_NONE); RNA_def_property_enum_items(prop, rna_enum_attribute_domain_items); RNA_def_property_enum_funcs( diff --git a/source/blender/nodes/intern/node_common.cc b/source/blender/nodes/intern/node_common.cc index 91f41dbbe8d..3656f8cce3a 100644 --- a/source/blender/nodes/intern/node_common.cc +++ b/source/blender/nodes/intern/node_common.cc @@ -393,6 +393,7 @@ static BaseSocketDeclarationBuilder &build_interface_socket_declaration( decl->hide_value(io_socket.flag & NODE_INTERFACE_SOCKET_HIDE_VALUE); decl->compact(io_socket.flag & NODE_INTERFACE_SOCKET_COMPACT); decl->panel_toggle(io_socket.flag & NODE_INTERFACE_SOCKET_PANEL_TOGGLE); + decl->optional_label(io_socket.flag & NODE_INTERFACE_SOCKET_OPTIONAL_LABEL); decl->default_input_type(NodeDefaultInputType(io_socket.default_input)); if (structure_type) { decl->structure_type(*structure_type);