From 95e3356a2760fc90c161f2e1e21d3dd25734ce40 Mon Sep 17 00:00:00 2001 From: Peter Fog Date: Mon, 1 Jun 2020 04:14:54 +0200 Subject: VSE: Add select under playhead, and shortcuts for left, right, under. Add `UNDER` option for `left_right` property of `sequencer.select` operator. Add Equal as shortcut for select under playhead, and move Insert Gaps to backspace + ctrl. Add extend shortcut for left, right under options. The function is added to Select > Playhead menu. Reviewed By: ISS Differential Revision: https://developer.blender.org/D7679 --- .../keyconfig/keymap_data/blender_default.py | 11 ++++++++++- release/scripts/startup/bl_ui/space_sequencer.py | 3 +++ .../editors/space_sequencer/sequencer_intern.h | 1 + .../editors/space_sequencer/sequencer_select.c | 22 +++++++++++++++++++--- 4 files changed, 33 insertions(+), 4 deletions(-) diff --git a/release/scripts/presets/keyconfig/keymap_data/blender_default.py b/release/scripts/presets/keyconfig/keymap_data/blender_default.py index 2559a2f1df5..3a95b3e4e0e 100644 --- a/release/scripts/presets/keyconfig/keymap_data/blender_default.py +++ b/release/scripts/presets/keyconfig/keymap_data/blender_default.py @@ -2463,7 +2463,7 @@ def km_sequencer(params): {"properties": [("all", False)]}), ("sequencer.gap_remove", {"type": 'BACK_SPACE', "value": 'PRESS', "shift": True}, {"properties": [("all", True)]}), - ("sequencer.gap_insert", {"type": 'EQUAL', "value": 'PRESS', "shift": True}, None), + ("sequencer.gap_insert", {"type": 'BACK_SPACE', "value": 'PRESS', "ctrl": True}, None), ("sequencer.snap", {"type": 'S', "value": 'PRESS', "shift": True}, None), ("sequencer.swap_inputs", {"type": 'S', "value": 'PRESS', "alt": True}, None), *( @@ -2521,6 +2521,15 @@ def km_sequencer(params): {"properties": [("left_right", 'LEFT'), ("linked_time", True)]}), ("sequencer.select", {"type": 'RIGHT_BRACKET', "value": 'PRESS'}, {"properties": [("left_right", 'RIGHT'), ("linked_time", True)]}), + ("sequencer.select", {"type": 'EQUAL', "value": 'PRESS'}, + {"properties": [("left_right", 'UNDER'), ("linked_time", True)]}), + ("sequencer.select", {"type": 'LEFT_BRACKET', "value": 'PRESS', "shift": True}, + {"properties": [("left_right", 'LEFT'), ("linked_time", True), ("extend", True)]}), + ("sequencer.select", {"type": 'RIGHT_BRACKET', "value": 'PRESS', "shift": True}, + {"properties": [("left_right", 'RIGHT'), ("linked_time", True), ("extend", True)]}), + ("sequencer.select", {"type": 'EQUAL', "value": 'PRESS', "shift": True}, + {"properties": [("left_right", 'UNDER'), ("linked_time", True), ("extend", True)]}), + *_template_items_context_menu("SEQUENCER_MT_context_menu", params.context_menu_event), ]) diff --git a/release/scripts/startup/bl_ui/space_sequencer.py b/release/scripts/startup/bl_ui/space_sequencer.py index 41c220f7ee4..d30f75c06ff 100644 --- a/release/scripts/startup/bl_ui/space_sequencer.py +++ b/release/scripts/startup/bl_ui/space_sequencer.py @@ -382,6 +382,9 @@ class SEQUENCER_MT_select_playhead(Menu): def draw(self, _context): layout = self.layout + props = layout.operator("sequencer.select", text="Under") + props.left_right = 'UNDER' + props.linked_time = True props = layout.operator("sequencer.select", text="Left") props.left_right = 'LEFT' props.linked_time = True diff --git a/source/blender/editors/space_sequencer/sequencer_intern.h b/source/blender/editors/space_sequencer/sequencer_intern.h index 708682cd04f..5f525bf913c 100644 --- a/source/blender/editors/space_sequencer/sequencer_intern.h +++ b/source/blender/editors/space_sequencer/sequencer_intern.h @@ -191,6 +191,7 @@ enum { SEQ_SELECT_LR_MOUSE, SEQ_SELECT_LR_LEFT, SEQ_SELECT_LR_RIGHT, + SEQ_SELECT_LR_UNDER_PLAYHEAD, }; /* Defines used internally. */ diff --git a/source/blender/editors/space_sequencer/sequencer_select.c b/source/blender/editors/space_sequencer/sequencer_select.c index c5472ed88e5..bf5d788464c 100644 --- a/source/blender/editors/space_sequencer/sequencer_select.c +++ b/source/blender/editors/space_sequencer/sequencer_select.c @@ -412,6 +412,7 @@ static int sequencer_select_exec(bContext *C, wmOperator *op) ret_value = OPERATOR_FINISHED; } + /* Select left, right or under playhead. */ else if (left_right != SEQ_SELECT_LR_NONE) { /* Use different logic for this. */ float x; @@ -421,19 +422,33 @@ static int sequencer_select_exec(bContext *C, wmOperator *op) switch (left_right) { case SEQ_SELECT_LR_MOUSE: + /* 10px margin around playhead to select under playhead with mouse. */ + float margin = BLI_rctf_size_x(&v2d->cur) / BLI_rcti_size_x(&v2d->mask) * 10; x = UI_view2d_region_to_view_x(v2d, mval[0]); + if (x >= CFRA - margin && x <= CFRA + margin) { + x = CFRA; + } break; case SEQ_SELECT_LR_LEFT: x = CFRA - 1.0f; break; case SEQ_SELECT_LR_RIGHT: + x = CFRA + 1.0f; + break; + case SEQ_SELECT_LR_UNDER_PLAYHEAD: default: x = CFRA; break; } SEQP_BEGIN (ed, seq) { - if (((x < CFRA) && (seq->enddisp <= CFRA)) || ((x >= CFRA) && (seq->startdisp >= CFRA))) { + /* Select under playhead. */ + if ((x == CFRA) && (seq->startdisp <= CFRA) && (seq->enddisp >= CFRA)) { + seq->flag = SELECT; + recurs_sel_seq(seq); + } + /* Select left or right. */ + else if ((x < CFRA && seq->enddisp <= CFRA) || (x > CFRA && seq->startdisp >= CFRA)) { seq->flag |= SELECT; recurs_sel_seq(seq); } @@ -627,8 +642,9 @@ void SEQUENCER_OT_select(wmOperatorType *ot) static const EnumPropertyItem sequencer_select_left_right_types[] = { {SEQ_SELECT_LR_NONE, "NONE", 0, "None", "Don't do left-right selection"}, {SEQ_SELECT_LR_MOUSE, "MOUSE", 0, "Mouse", "Use mouse position for selection"}, - {SEQ_SELECT_LR_LEFT, "LEFT", 0, "Left", "Select left"}, - {SEQ_SELECT_LR_RIGHT, "RIGHT", 0, "Right", "Select right"}, + {SEQ_SELECT_LR_LEFT, "LEFT", 0, "Left", "Select to the left of the playhead"}, + {SEQ_SELECT_LR_RIGHT, "RIGHT", 0, "Right", "Select to the right of the playhead"}, + {SEQ_SELECT_LR_UNDER_PLAYHEAD, "UNDER", 0, "Under", "Select under the playhead"}, {0, NULL, 0, NULL, NULL}, }; PropertyRNA *prop; -- cgit v1.2.3