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.
This commit is contained in:
Richard Antalik 2024-01-14 19:44:33 +01:00
parent a86ed166d7
commit daa0219a57
4 changed files with 30 additions and 11 deletions

View File

@ -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")

View File

@ -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");
}

View File

@ -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");

View File

@ -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)