VSE: Implement Select Circle

This feature works like the select circle in any other modes. The user
can press "C" in preview or timeline and then select or deselect strips
by pressing the left or middle mouse button.

It’s an enhancement for the VSE preview because:
1. It makes it more similar to other editors in Blender
2. This behavior makes it easier to select specific overlapping strips
in preview, that is because the select circle only checks for the
origin of the strip.

Pull Request: https://projects.blender.org/blender/blender/pulls/141422
This commit is contained in:
Ramon Klauck
2025-09-03 17:57:00 +02:00
committed by Richard Antalik
parent ede8e3af91
commit 098be390ca
7 changed files with 259 additions and 5 deletions

View File

@@ -3031,6 +3031,7 @@ def km_sequencer(params):
("sequencer.select_box", {"type": 'B', "value": 'PRESS'}, None),
("sequencer.select_box", {"type": 'B', "value": 'PRESS', "ctrl": True},
{"properties": [("include_handles", True)]}),
("sequencer.select_circle", {"type": 'C', "value": 'PRESS'}, None),
("sequencer.select_grouped", {"type": 'G', "value": 'PRESS', "shift": True}, None),
*_template_items_select_actions(params, "sequencer.select_all"),
("sequencer.split", {"type": 'K', "value": 'PRESS'},
@@ -3099,7 +3100,7 @@ def km_sequencer(params):
)
),
op_menu("SEQUENCER_MT_add", {"type": 'A', "value": 'PRESS', "shift": True}),
op_menu("SEQUENCER_MT_change", {"type": 'C', "value": 'PRESS'}),
op_menu("SEQUENCER_MT_change", {"type": 'C', "value": 'PRESS', "shift": True}),
op_menu_pie("SEQUENCER_MT_view_pie", {"type": 'ACCENT_GRAVE', "value": 'PRESS'}),
("sequencer.slip", {"type": 'S', "value": 'PRESS'}, {"properties": [("use_cursor_position", False)]}),
("wm.context_set_int", {"type": 'O', "value": 'PRESS'},
@@ -3199,6 +3200,7 @@ def km_sequencer_preview(params):
),
*_template_items_select_actions(params, "sequencer.select_all"),
("sequencer.select_box", {"type": 'B', "value": 'PRESS'}, None),
("sequencer.select_circle", {"type": 'C', "value": 'PRESS'}, None),
# View.
("sequencer.view_selected", {"type": 'NUMPAD_PERIOD', "value": 'PRESS'}, None),
@@ -8448,6 +8450,18 @@ def km_sequencer_tool_generic_select_box(params, *, fallback):
]},
)
def km_sequencer_tool_generic_select_circle(params, *, fallback):
return (
_fallback_id("Sequencer Tool: Select Circle", fallback),
{"space_type": 'SEQUENCE_EDITOR', "region_type": 'WINDOW'},
{"items": [
*([] if (fallback and not params.use_fallback_tool) else _template_items_tool_select_actions_simple(
"sequencer.select_circle",
**(params.select_tweak_event if (fallback and params.use_fallback_tool_select_mouse) else
{"type": params.tool_mouse, "value": 'PRESS'}),
properties=[("wait_for_input", False)])),
]},
)
def km_sequencer_preview_tool_generic_select(params, *, fallback):
return (
@@ -8482,6 +8496,20 @@ def km_sequencer_preview_tool_generic_select_box(params, *, fallback):
)
def km_sequencer_preview_tool_generic_select_circle(params, *, fallback):
return (
_fallback_id("Preview Tool: Select Circle", fallback),
{"space_type": 'SEQUENCE_EDITOR', "region_type": 'WINDOW'},
{"items": [
*([] if (fallback and not params.use_fallback_tool) else _template_items_tool_select_actions_simple(
"sequencer.select_circle",
**(params.select_tweak_event if (fallback and params.use_fallback_tool_select_mouse) else
{"type": params.tool_mouse, "value": 'PRESS'}),
properties=[("wait_for_input", False)])),
]},
)
def km_sequencer_preview_tool_generic_cursor(params):
return (
"Preview Tool: Cursor",
@@ -8867,6 +8895,10 @@ def generate_keymaps(params=None):
for fallback in (False, True)),
*(km_sequencer_preview_tool_generic_select_box(params, fallback=fallback)
for fallback in (False, True)),
*(km_sequencer_preview_tool_generic_select_circle(params, fallback=fallback)
for fallback in (False, True)),
*(km_sequencer_tool_generic_select_circle(params, fallback=fallback)
for fallback in (False, True)),
km_3d_view_tool_paint_grease_pencil_trim(params),
km_3d_view_tool_edit_grease_pencil_texture_gradient(params),
km_sequencer_tool_blade(params),