From befe6062c0b49e8abafcb19dac677226847d0be8 Mon Sep 17 00:00:00 2001 From: Christoph Lendenfeld Date: Tue, 5 Aug 2025 09:01:56 +0200 Subject: [PATCH] UI: Icons for playhead snapping The recently introduced feature of playhead snapping (#137278) added a popover menu for snap targets. This used text to indicate the contents of said popover. In order to bring it in line with the other snapping menu, this PR adds icons to indicate the enabled state of snapping. Part of #135794 Pull Request: https://projects.blender.org/blender/blender/pulls/139271 --- .../datafiles/icons_svg/playhead_snap_off.svg | 66 +++++++++++++++++++ .../datafiles/icons_svg/playhead_snap_on.svg | 66 +++++++++++++++++++ scripts/startup/bl_ui/space_dopesheet.py | 5 +- scripts/startup/bl_ui/space_graph.py | 6 +- scripts/startup/bl_ui/space_nla.py | 6 +- scripts/startup/bl_ui/space_sequencer.py | 5 +- scripts/startup/bl_ui/utils.py | 1 - .../blender/editors/datafiles/CMakeLists.txt | 2 + source/blender/editors/include/UI_icons.hh | 2 + source/blender/makesrna/intern/rna_scene.cc | 1 + 10 files changed, 155 insertions(+), 5 deletions(-) create mode 100644 release/datafiles/icons_svg/playhead_snap_off.svg create mode 100644 release/datafiles/icons_svg/playhead_snap_on.svg diff --git a/release/datafiles/icons_svg/playhead_snap_off.svg b/release/datafiles/icons_svg/playhead_snap_off.svg new file mode 100644 index 00000000000..6dd59e63ea8 --- /dev/null +++ b/release/datafiles/icons_svg/playhead_snap_off.svg @@ -0,0 +1,66 @@ + + + + diff --git a/release/datafiles/icons_svg/playhead_snap_on.svg b/release/datafiles/icons_svg/playhead_snap_on.svg new file mode 100644 index 00000000000..e08d9452f8a --- /dev/null +++ b/release/datafiles/icons_svg/playhead_snap_on.svg @@ -0,0 +1,66 @@ + + + + diff --git a/scripts/startup/bl_ui/space_dopesheet.py b/scripts/startup/bl_ui/space_dopesheet.py index d4fe7a9736d..a5792754705 100644 --- a/scripts/startup/bl_ui/space_dopesheet.py +++ b/scripts/startup/bl_ui/space_dopesheet.py @@ -285,7 +285,10 @@ class DOPESHEET_HT_editor_buttons: text="", ) - layout.popover(panel="DOPESHEET_PT_playhead_snapping") + row = layout.row(align=True) + row.prop(tool_settings, "use_snap_playhead", text="") + sub = row.row(align=True) + sub.popover(panel="DOPESHEET_PT_playhead_snapping", text="") row = layout.row(align=True) row.prop(tool_settings, "use_proportional_action", text="", icon_only=True) diff --git a/scripts/startup/bl_ui/space_graph.py b/scripts/startup/bl_ui/space_graph.py index 8ae6f2503e7..89a91c9f1e3 100644 --- a/scripts/startup/bl_ui/space_graph.py +++ b/scripts/startup/bl_ui/space_graph.py @@ -94,7 +94,11 @@ class GRAPH_HT_header(Header): panel="GRAPH_PT_snapping", text="", ) - layout.popover(panel="GRAPH_PT_playhead_snapping") + + row = layout.row(align=True) + row.prop(tool_settings, "use_snap_playhead", text="") + sub = row.row(align=True) + sub.popover(panel="GRAPH_PT_playhead_snapping", text="") row = layout.row(align=True) row.prop(tool_settings, "use_proportional_fcurve", text="", icon_only=True) diff --git a/scripts/startup/bl_ui/space_nla.py b/scripts/startup/bl_ui/space_nla.py index 2a7b129682a..bc94d5603ae 100644 --- a/scripts/startup/bl_ui/space_nla.py +++ b/scripts/startup/bl_ui/space_nla.py @@ -47,7 +47,11 @@ class NLA_HT_header(Header): panel="NLA_PT_snapping", text="", ) - layout.popover(panel="NLA_PT_playhead_snapping") + + row = layout.row(align=True) + row.prop(tool_settings, "use_snap_playhead", text="") + sub = row.row(align=True) + sub.popover(panel="NLA_PT_playhead_snapping", text="") class NLA_HT_playback_controls(Header): diff --git a/scripts/startup/bl_ui/space_sequencer.py b/scripts/startup/bl_ui/space_sequencer.py index 75ab7fa073e..a9b7f5e513e 100644 --- a/scripts/startup/bl_ui/space_sequencer.py +++ b/scripts/startup/bl_ui/space_sequencer.py @@ -192,7 +192,10 @@ class SEQUENCER_HT_header(Header): sub = row.row(align=True) sub.popover(panel="SEQUENCER_PT_snapping") if st.view_type in {'SEQUENCER', 'SEQUENCER_PREVIEW'}: - layout.popover(panel="SEQUENCER_PT_playhead_snapping") + row = layout.row(align=True) + row.prop(tool_settings, "use_snap_playhead", text="") + sub = row.row(align=True) + sub.popover(panel="SEQUENCER_PT_playhead_snapping", text="") layout.separator_spacer() if st.view_type in {'PREVIEW', 'SEQUENCER_PREVIEW'}: diff --git a/scripts/startup/bl_ui/utils.py b/scripts/startup/bl_ui/utils.py index a41a4747f89..52eadc16616 100644 --- a/scripts/startup/bl_ui/utils.py +++ b/scripts/startup/bl_ui/utils.py @@ -54,7 +54,6 @@ class PlayheadSnappingPanel: layout = self.layout col = layout.column() - col.prop(tool_settings, "use_snap_playhead") col.prop(tool_settings, "playhead_snap_distance") col.separator() col.label(text="Snap Target") diff --git a/source/blender/editors/datafiles/CMakeLists.txt b/source/blender/editors/datafiles/CMakeLists.txt index 1bbf944123f..efb0df19bc9 100644 --- a/source/blender/editors/datafiles/CMakeLists.txt +++ b/source/blender/editors/datafiles/CMakeLists.txt @@ -723,6 +723,8 @@ if(WITH_BLENDER) play play_reverse play_sound + playhead_snap_off + playhead_snap_on plugin plus pmarker diff --git a/source/blender/editors/include/UI_icons.hh b/source/blender/editors/include/UI_icons.hh index b790928b0a6..8c5477bca6f 100644 --- a/source/blender/editors/include/UI_icons.hh +++ b/source/blender/editors/include/UI_icons.hh @@ -86,6 +86,8 @@ DEF_ICON(SELECT_INTERSECT) DEF_ICON(SELECT_DIFFERENCE) DEF_ICON(SNAP_OFF) DEF_ICON(SNAP_ON) +DEF_ICON(PLAYHEAD_SNAP_OFF) +DEF_ICON(PLAYHEAD_SNAP_ON) DEF_ICON(UNLOCKED) DEF_ICON(LOCKED) DEF_ICON(VIS_SEL_11) diff --git a/source/blender/makesrna/intern/rna_scene.cc b/source/blender/makesrna/intern/rna_scene.cc index 809ae3cd2d8..52fec3903c3 100644 --- a/source/blender/makesrna/intern/rna_scene.cc +++ b/source/blender/makesrna/intern/rna_scene.cc @@ -3756,6 +3756,7 @@ static void rna_def_tool_settings(BlenderRNA *brna) prop = RNA_def_property(srna, "use_snap_playhead", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, nullptr, "snap_flag_playhead", SCE_SNAP); + RNA_def_property_ui_icon(prop, ICON_PLAYHEAD_SNAP_OFF, 1); RNA_def_property_flag(prop, PROP_DEG_SYNC_ONLY); RNA_def_property_ui_text(prop, "Use Snapping", "Snap playhead when scrubbing"); RNA_def_property_boolean_default(prop, false);