From c63bcbf9062d98ab08b4e1ff8e210fd8715310ea Mon Sep 17 00:00:00 2001 From: Colin Marmond Date: Wed, 9 Aug 2023 14:04:11 +0200 Subject: [PATCH] Nodes: Hide the node preview button when the overlays are disabled When the overlays are hidden or the previews overlays are hidden, it is more consistent to have the preview toggle button hidden than shown. This patch also removes the preview rendering when the previews are hidden. Pull Request: https://projects.blender.org/blender/blender/pulls/110949 --- source/blender/editors/space_node/node_draw.cc | 8 +++++--- source/blender/editors/space_node/node_edit.cc | 11 ++++++++--- source/blender/editors/space_node/node_intern.hh | 2 +- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/source/blender/editors/space_node/node_draw.cc b/source/blender/editors/space_node/node_draw.cc index a954857a5fa..34a1f1be072 100644 --- a/source/blender/editors/space_node/node_draw.cc +++ b/source/blender/editors/space_node/node_draw.cc @@ -2213,7 +2213,8 @@ static void node_draw_basis(const bContext &C, bNodeInstanceKey key) { const float iconbutw = NODE_HEADER_ICON_SIZE; - const bool show_preview = (snode.overlay.flag & SN_OVERLAY_SHOW_PREVIEWS) && + const bool show_preview = (snode.overlay.flag & SN_OVERLAY_SHOW_OVERLAYS) && + (snode.overlay.flag & SN_OVERLAY_SHOW_PREVIEWS) && (node.flag & NODE_PREVIEW) && (U.experimental.use_shader_node_previews || ntree.type != NTREE_SHADER); @@ -2302,7 +2303,7 @@ static void node_draw_basis(const bContext &C, float iconofs = rct.xmax - 0.35f * U.widget_unit; /* Preview. */ - if (node_is_previewable(ntree, node)) { + if (node_is_previewable(snode, ntree, node)) { iconofs -= iconbutw; UI_block_emboss_set(&block, UI_EMBOSS_NONE); uiBut *but = uiDefIconBut(&block, @@ -3511,7 +3512,8 @@ static void draw_nodetree(const bContext &C, } else if (ntree.type == NTREE_SHADER && U.experimental.use_shader_node_previews && BKE_scene_uses_shader_previews(CTX_data_scene(&C)) && - U.experimental.use_shader_node_previews) + snode->overlay.flag & SN_OVERLAY_SHOW_OVERLAYS && + snode->overlay.flag & SN_OVERLAY_SHOW_PREVIEWS) { tree_draw_ctx.nested_group_infos = get_nested_previews(C, *snode); } diff --git a/source/blender/editors/space_node/node_edit.cc b/source/blender/editors/space_node/node_edit.cc index a9f6948e751..f9f9b42bcbd 100644 --- a/source/blender/editors/space_node/node_edit.cc +++ b/source/blender/editors/space_node/node_edit.cc @@ -1124,8 +1124,13 @@ void node_set_hidden_sockets(bNode *node, int set) } } -bool node_is_previewable(const bNodeTree &ntree, const bNode &node) +bool node_is_previewable(const SpaceNode &snode, const bNodeTree &ntree, const bNode &node) { + if (!(snode.overlay.flag & SN_OVERLAY_SHOW_OVERLAYS) || + !(snode.overlay.flag & SN_OVERLAY_SHOW_PREVIEWS)) + { + return false; + } if (ntree.type == NTREE_SHADER) { return U.experimental.use_shader_node_previews && !(node.is_frame() || node.is_group_input() || node.is_group_output() || @@ -1578,7 +1583,7 @@ static void node_flag_toggle_exec(SpaceNode *snode, int toggle_flag) for (bNode *node : snode->edittree->all_nodes()) { if (node->flag & SELECT) { - if (toggle_flag == NODE_PREVIEW && !node_is_previewable(*snode->edittree, *node)) { + if (toggle_flag == NODE_PREVIEW && !node_is_previewable(*snode, *snode->edittree, *node)) { continue; } if (toggle_flag == NODE_OPTIONS && @@ -1598,7 +1603,7 @@ static void node_flag_toggle_exec(SpaceNode *snode, int toggle_flag) for (bNode *node : snode->edittree->all_nodes()) { if (node->flag & SELECT) { - if (toggle_flag == NODE_PREVIEW && !node_is_previewable(*snode->edittree, *node)) { + if (toggle_flag == NODE_PREVIEW && !node_is_previewable(*snode, *snode->edittree, *node)) { continue; } if (toggle_flag == NODE_OPTIONS && diff --git a/source/blender/editors/space_node/node_intern.hh b/source/blender/editors/space_node/node_intern.hh index 7a00cf2ce16..b16741ca6c6 100644 --- a/source/blender/editors/space_node/node_intern.hh +++ b/source/blender/editors/space_node/node_intern.hh @@ -339,7 +339,7 @@ bool composite_node_editable(bContext *C); bool node_has_hidden_sockets(bNode *node); void node_set_hidden_sockets(bNode *node, int set); -bool node_is_previewable(const bNodeTree &ntree, const bNode &node); +bool node_is_previewable(const SpaceNode &snode, const bNodeTree &ntree, const bNode &node); int node_render_changed_exec(bContext *, wmOperator *); bNodeSocket *node_find_indicated_socket(SpaceNode &snode, const float2 &cursor,