Page Menu
Home
Search
Configure Global Search
Log In
Paste
P2053
(An Untitled Masterwork)
Active
Public
Actions
Authored by
Richard Antalik (ISS)
on Mar 30 2021, 8:19 AM.
Edit Paste
Archive Paste
View Raw File
Subscribe
Mute Notifications
Award Token
Tags
None
Subscribers
None
diff --git a/source/blender/editors/space_sequencer/sequencer_add.c b/source/blender/editors/space_sequencer/sequencer_add.c
index 2df8dce0b3c..fa2f9e0dc8e 100644
--- a/source/blender/editors/space_sequencer/sequencer_add.c
+++ b/source/blender/editors/space_sequencer/sequencer_add.c
@@ -1148,20 +1148,50 @@ static int sequencer_add_effect_strip_exec(bContext *C, wmOperator *op)
}
Sequence *seq = SEQ_add_effect_strip(scene, ed->seqbasep, &load_data);
seq_load_apply_generic_options(C, op, seq);
if (seq->type == SEQ_TYPE_COLOR) {
SolidColorVars *colvars = (SolidColorVars *)seq->effectdata;
RNA_float_get_array(op->ptr, "color", colvars->col);
}
+ /* Special handling for transition strips. */
+ if (seq1 != NULL && seq2 != NULL &&
+ ELEM(seq->type, SEQ_TYPE_CROSS, SEQ_TYPE_GAMCROSS, SEQ_TYPE_WIPE)) {
+ /* Ensure correct order of inputs based on position. */
+ if (seq1->startdisp > seq2->startdisp) {
+ seq->seq1 = seq2;
+ seq->seq2 = seq1;
+ }
+ else if (seq1->startdisp == seq2->startdisp && seq1->enddisp > seq2->enddisp) {
+ seq->seq1 = seq2;
+ seq->seq2 = seq1;
+ }
+
+ /* Offset for 1 second long transition between 2 strips. */
+ const int transition_offset = round_fl_to_int((float)scene->r.frs_sec / scene->r.frs_sec_base /
+ 2.0f);
+
+ /* If there is no gap between input strips and they are long enough for inserting transition,
+ * move their handles to create room for transition effect. */
+ if ((seq->seq1->enddisp - seq->seq1->startdisp) > transition_offset &&
+ (seq->seq2->enddisp - seq->seq2->startdisp) > transition_offset &&
+ (seq->seq1->enddisp == seq->seq2->startdisp)) {
+ SEQ_transform_set_right_handle_frame(seq->seq1, seq->seq1->enddisp - transition_offset);
+ SEQ_time_update_sequence(scene, seq->seq1);
+ SEQ_transform_set_left_handle_frame(seq->seq2, seq->seq2->startdisp + transition_offset);
+ SEQ_time_update_sequence(scene, seq->seq2);
+ SEQ_time_update_sequence(scene, seq);
+ }
+ }
+
DEG_id_tag_update(&scene->id, ID_RECALC_SEQUENCER_STRIPS);
WM_event_add_notifier(C, NC_SCENE | ND_SEQUENCER, scene);
return OPERATOR_FINISHED;
}
static int sequencer_add_effect_strip_invoke(bContext *C,
wmOperator *op,
const wmEvent *UNUSED(event))
{
Event Timeline
Richard Antalik (ISS)
created this paste.
Mar 30 2021, 8:19 AM
Richard Antalik (ISS)
mentioned this in
D10207: VSE: Fix invisible and reversed transitions
.
Mar 30 2021, 8:25 AM
Log In to Comment