From fb86bf0367f7c7830fb312d41e1839fdc682de29 Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Fri, 9 May 2025 04:02:50 +0200 Subject: [PATCH] Nodes: support searching for color blend modes in Add menu This is a follow up to #138534. It adds support for searching for all color blend operations. It's supported in Geometry Nodes, Compositor and Shader Nodes. Pull Request: https://projects.blender.org/blender/blender/pulls/138581 --- scripts/startup/bl_ui/node_add_menu.py | 18 ++++++++++++++++++ .../startup/bl_ui/node_add_menu_compositor.py | 7 ++----- .../startup/bl_ui/node_add_menu_geometry.py | 7 ++----- scripts/startup/bl_ui/node_add_menu_shader.py | 7 ++----- 4 files changed, 24 insertions(+), 15 deletions(-) diff --git a/scripts/startup/bl_ui/node_add_menu.py b/scripts/startup/bl_ui/node_add_menu.py index 5a6b55240d3..d750b83a81c 100644 --- a/scripts/startup/bl_ui/node_add_menu.py +++ b/scripts/startup/bl_ui/node_add_menu.py @@ -78,6 +78,24 @@ def add_node_type_with_searchable_enum(context, layout, node_idname, property_na prop.value = repr(item.identifier) +def add_color_mix_node(context, layout): + label = iface_("Mix Color") + props = node_add_menu.add_node_type(layout, "ShaderNodeMix", label=label) + ops = props.settings.add() + ops.name = "data_type" + ops.value = "'RGBA'" + + if getattr(context, "is_menu_search", False): + for item in bpy.types.ShaderNodeMix.bl_rna.properties["blend_type"].enum_items_static: + props = node_add_menu.add_node_type(layout, "ShaderNodeMix", label=label + " ▸ " + item.name) + prop = props.settings.add() + prop.name = "data_type" + prop.value = "'RGBA'" + prop = props.settings.add() + prop.name = "blend_type" + prop.value = repr(item.identifier) + + def add_simulation_zone(layout, label): """Add simulation zone to a menu.""" props = layout.operator("node.add_simulation_zone", text=label, text_ctxt=i18n_contexts.default) diff --git a/scripts/startup/bl_ui/node_add_menu_compositor.py b/scripts/startup/bl_ui/node_add_menu_compositor.py index c25713bd177..24e55d4bbab 100644 --- a/scripts/startup/bl_ui/node_add_menu_compositor.py +++ b/scripts/startup/bl_ui/node_add_menu_compositor.py @@ -128,17 +128,14 @@ class NODE_MT_category_compositor_color_mix(Menu): bl_idname = "NODE_MT_category_compositor_color_mix" bl_label = "Mix" - def draw(self, _context): + def draw(self, context): layout = self.layout node_add_menu.add_node_type(layout, "CompositorNodeAlphaOver") layout.separator() node_add_menu.add_node_type(layout, "CompositorNodeCombineColor") node_add_menu.add_node_type(layout, "CompositorNodeSeparateColor") layout.separator() - props = node_add_menu.add_node_type(layout, "ShaderNodeMix", label=iface_("Mix Color")) - ops = props.settings.add() - ops.name = "data_type" - ops.value = "'RGBA'" + node_add_menu.add_color_mix_node(context, layout) node_add_menu.add_node_type(layout, "CompositorNodeZcombine") node_add_menu.draw_assets_for_catalog(layout, "Color/Mix") diff --git a/scripts/startup/bl_ui/node_add_menu_geometry.py b/scripts/startup/bl_ui/node_add_menu_geometry.py index 78df292d36d..b7374cd4af6 100644 --- a/scripts/startup/bl_ui/node_add_menu_geometry.py +++ b/scripts/startup/bl_ui/node_add_menu_geometry.py @@ -31,17 +31,14 @@ class NODE_MT_geometry_node_GEO_COLOR(Menu): bl_idname = "NODE_MT_geometry_node_GEO_COLOR" bl_label = "Color" - def draw(self, _context): + def draw(self, context): layout = self.layout node_add_menu.add_node_type(layout, "ShaderNodeBlackbody") node_add_menu.add_node_type(layout, "ShaderNodeValToRGB") node_add_menu.add_node_type(layout, "ShaderNodeRGBCurve") layout.separator() node_add_menu.add_node_type(layout, "FunctionNodeCombineColor") - props = node_add_menu.add_node_type(layout, "ShaderNodeMix", label=iface_("Mix Color")) - ops = props.settings.add() - ops.name = "data_type" - ops.value = "'RGBA'" + node_add_menu.add_color_mix_node(context, layout) node_add_menu.add_node_type(layout, "FunctionNodeSeparateColor") node_add_menu.draw_assets_for_catalog(layout, "Utilities/Color") diff --git a/scripts/startup/bl_ui/node_add_menu_shader.py b/scripts/startup/bl_ui/node_add_menu_shader.py index 53ae4eb3ca3..5bf38186f6f 100644 --- a/scripts/startup/bl_ui/node_add_menu_shader.py +++ b/scripts/startup/bl_ui/node_add_menu_shader.py @@ -244,7 +244,7 @@ class NODE_MT_category_shader_color(Menu): bl_idname = "NODE_MT_category_shader_color" bl_label = "Color" - def draw(self, _context): + def draw(self, context): layout = self.layout node_add_menu.add_node_type(layout, "ShaderNodeBrightContrast") @@ -252,10 +252,7 @@ class NODE_MT_category_shader_color(Menu): node_add_menu.add_node_type(layout, "ShaderNodeHueSaturation") node_add_menu.add_node_type(layout, "ShaderNodeInvert") node_add_menu.add_node_type(layout, "ShaderNodeLightFalloff") - props = node_add_menu.add_node_type(layout, "ShaderNodeMix", label=iface_("Mix Color")) - ops = props.settings.add() - ops.name = "data_type" - ops.value = "'RGBA'" + node_add_menu.add_color_mix_node(context, layout) node_add_menu.add_node_type(layout, "ShaderNodeRGBCurve") node_add_menu.draw_assets_for_catalog(layout, self.bl_label)