From daa0219a5786cad972acde47f0cabe9eec237444 Mon Sep 17 00:00:00 2001 From: Richard Antalik Date: Sun, 14 Jan 2024 19:44:33 +0100 Subject: [PATCH] VSE: Add retiming operator macros Add retiming_add_freeze_frame_slide and retiming_add_transition_slide operator macros to move keys after adding, instead of using fixed duration. --- scripts/startup/bl_ui/space_sequencer.py | 10 +++++----- .../editors/space_sequencer/sequencer_ops.cc | 15 +++++++++++++++ .../editors/space_sequencer/sequencer_retiming.cc | 12 ++++++++---- source/blender/sequencer/intern/strip_retiming.cc | 4 ++-- 4 files changed, 30 insertions(+), 11 deletions(-) diff --git a/scripts/startup/bl_ui/space_sequencer.py b/scripts/startup/bl_ui/space_sequencer.py index fb0aacf74c3..90313ec4dfb 100644 --- a/scripts/startup/bl_ui/space_sequencer.py +++ b/scripts/startup/bl_ui/space_sequencer.py @@ -946,9 +946,9 @@ class SEQUENCER_MT_strip_retiming(Menu): layout = self.layout layout.operator("sequencer.retiming_key_add") - layout.operator("sequencer.retiming_freeze_frame_add") + layout.operator("sequencer.retiming_add_freeze_frame_slide") col = layout.column() - col.operator("sequencer.retiming_transition_add") + col.operator("sequencer.retiming_add_transition_slide") col.enabled = is_retiming layout.separator() @@ -1112,7 +1112,7 @@ class SEQUENCER_MT_retiming(Menu): layout.operator_context = 'INVOKE_REGION_WIN' layout.operator("sequencer.retiming_key_add") - layout.operator("sequencer.retiming_freeze_frame_add") + layout.operator("sequencer.retiming_add_freeze_frame_slide") class SEQUENCER_MT_context_menu(Menu): @@ -1219,8 +1219,8 @@ class SEQUENCER_MT_context_menu(Menu): layout.operator_context = 'INVOKE_REGION_WIN' if context.scene.sequence_editor.selected_retiming_keys: - layout.operator("sequencer.retiming_freeze_frame_add") - layout.operator("sequencer.retiming_transition_add") + layout.operator("sequencer.retiming_add_freeze_frame_slide") + layout.operator("sequencer.retiming_add_transition_slide") layout.separator() layout.operator("sequencer.retiming_segment_speed_set") diff --git a/source/blender/editors/space_sequencer/sequencer_ops.cc b/source/blender/editors/space_sequencer/sequencer_ops.cc index 109ec5add18..cc3f1965340 100644 --- a/source/blender/editors/space_sequencer/sequencer_ops.cc +++ b/source/blender/editors/space_sequencer/sequencer_ops.cc @@ -146,4 +146,19 @@ void ED_operatormacros_sequencer() WM_operatortype_macro_define(ot, "SEQUENCER_OT_duplicate"); WM_operatortype_macro_define(ot, "TRANSFORM_OT_seq_slide"); + + ot = WM_operatortype_append_macro("SEQUENCER_OT_retiming_add_freeze_frame_slide", + "Add Freeze Frame And Slide", + "Add freeze frame and move it", + OPTYPE_UNDO | OPTYPE_REGISTER); + WM_operatortype_macro_define(ot, "SEQUENCER_OT_retiming_freeze_frame_add"); + WM_operatortype_macro_define(ot, "TRANSFORM_OT_seq_slide"); + + ot = WM_operatortype_append_macro( + "SEQUENCER_OT_retiming_add_transition_slide", + "Add Speed Transition And Slide", + "Add smooth transition between 2 retimed segments and change its duration", + OPTYPE_UNDO | OPTYPE_REGISTER); + WM_operatortype_macro_define(ot, "SEQUENCER_OT_retiming_transition_add"); + WM_operatortype_macro_define(ot, "TRANSFORM_OT_seq_slide"); } diff --git a/source/blender/editors/space_sequencer/sequencer_retiming.cc b/source/blender/editors/space_sequencer/sequencer_retiming.cc index 8f666186da2..b4905103df8 100644 --- a/source/blender/editors/space_sequencer/sequencer_retiming.cc +++ b/source/blender/editors/space_sequencer/sequencer_retiming.cc @@ -340,6 +340,9 @@ static bool freeze_frame_add_new_for_seq(const bContext *C, return false; } + ED_sequencer_deselect_all(scene); + SEQ_retiming_selection_append(freeze); + SEQ_relations_invalidate_cache_raw(scene, seq); return true; } @@ -380,8 +383,7 @@ static int sequencer_retiming_freeze_frame_add_exec(bContext *C, wmOperator *op) Scene *scene = CTX_data_scene(C); bool success = false; - const float fps = scene->r.frs_sec / scene->r.frs_sec_base; - int duration = 4 * fps; + int duration = 1; if (RNA_property_is_set(op->ptr, RNA_struct_find_property(op->ptr, "duration"))) { duration = RNA_int_get(op->ptr, "duration"); @@ -458,6 +460,9 @@ static bool transition_add_new_for_seq(const bContext *C, return false; } + ED_sequencer_deselect_all(scene); + SEQ_retiming_selection_append(transition); + SEQ_relations_invalidate_cache_raw(scene, seq); return true; } @@ -481,8 +486,7 @@ static int sequencer_retiming_transition_add_exec(bContext *C, wmOperator *op) Scene *scene = CTX_data_scene(C); bool success = false; - const float fps = scene->r.frs_sec / scene->r.frs_sec_base; - int duration = 4 * fps; + int duration = 1; if (RNA_property_is_set(op->ptr, RNA_struct_find_property(op->ptr, "duration"))) { duration = RNA_int_get(op->ptr, "duration"); diff --git a/source/blender/sequencer/intern/strip_retiming.cc b/source/blender/sequencer/intern/strip_retiming.cc index 6450211dbb4..3f862322b0f 100644 --- a/source/blender/sequencer/intern/strip_retiming.cc +++ b/source/blender/sequencer/intern/strip_retiming.cc @@ -527,7 +527,7 @@ SeqRetimingKey *SEQ_retiming_add_freeze_frame(const Scene *scene, /* Tag previous key as freeze frame key. This is only a convenient way to prevent creating * speed transitions. When freeze frame is deleted, this flag should be cleared. */ - return new_key; + return new_key + 1; } SeqRetimingKey *SEQ_retiming_add_transition(const Scene *scene, @@ -567,7 +567,7 @@ SeqRetimingKey *SEQ_retiming_add_transition(const Scene *scene, transition_in->original_retiming_factor = orig_retiming_factor; seq_retiming_remove_key_ex(seq, seq->retiming_keys + orig_key_index + 1); - return seq->retiming_keys + orig_key_index; + return seq->retiming_keys + orig_key_index + 1; } float SEQ_retiming_key_speed_get(const Sequence *seq, const SeqRetimingKey *key)