Sequencer: maintain start/end when exiting a meta
Old behavior of shuffling the meta made it hard to use metas in a complex edit since you couldn't be sure if exiting a meta would move it in the stack.
This commit is contained in:
@@ -1993,6 +1993,7 @@ static int sequencer_meta_toggle_exec(bContext *C, wmOperator *UNUSED(op))
|
|||||||
BLI_addtail(&ed->metastack, ms);
|
BLI_addtail(&ed->metastack, ms);
|
||||||
ms->parseq = last_seq;
|
ms->parseq = last_seq;
|
||||||
ms->oldbasep = ed->seqbasep;
|
ms->oldbasep = ed->seqbasep;
|
||||||
|
copy_v2_v2_int(ms->disp_range, &ms->parseq->startdisp);
|
||||||
|
|
||||||
ed->seqbasep = &last_seq->seqbase;
|
ed->seqbasep = &last_seq->seqbase;
|
||||||
|
|
||||||
@@ -2012,12 +2013,25 @@ static int sequencer_meta_toggle_exec(bContext *C, wmOperator *UNUSED(op))
|
|||||||
|
|
||||||
ed->seqbasep = ms->oldbasep;
|
ed->seqbasep = ms->oldbasep;
|
||||||
|
|
||||||
|
/* for old files, update from meta */
|
||||||
|
if (ms->disp_range[0] == ms->disp_range[1]) {
|
||||||
|
copy_v2_v2_int(ms->disp_range, &ms->parseq->startdisp);
|
||||||
|
}
|
||||||
|
|
||||||
/* recalc all: the meta can have effects connected to it */
|
/* recalc all: the meta can have effects connected to it */
|
||||||
for (seq = ed->seqbasep->first; seq; seq = seq->next)
|
for (seq = ed->seqbasep->first; seq; seq = seq->next)
|
||||||
BKE_sequence_calc(scene, seq);
|
BKE_sequence_calc(scene, seq);
|
||||||
|
|
||||||
|
/* 2.73+, keeping endpoings is important!
|
||||||
|
* moving them around means you can't usefully use metas in a complex edit */
|
||||||
|
#if 1
|
||||||
|
BKE_sequence_tx_set_final_left(ms->parseq, ms->disp_range[0]);
|
||||||
|
BKE_sequence_tx_set_final_right(ms->parseq, ms->disp_range[1]);
|
||||||
|
BKE_sequence_calc(scene, ms->parseq);
|
||||||
|
#else
|
||||||
if (BKE_sequence_test_overlap(ed->seqbasep, ms->parseq))
|
if (BKE_sequence_test_overlap(ed->seqbasep, ms->parseq))
|
||||||
BKE_sequence_base_shuffle(ed->seqbasep, ms->parseq, scene);
|
BKE_sequence_base_shuffle(ed->seqbasep, ms->parseq, scene);
|
||||||
|
#endif
|
||||||
|
|
||||||
BKE_sequencer_active_set(scene, ms->parseq);
|
BKE_sequencer_active_set(scene, ms->parseq);
|
||||||
|
|
||||||
|
@@ -193,6 +193,8 @@ typedef struct MetaStack {
|
|||||||
struct MetaStack *next, *prev;
|
struct MetaStack *next, *prev;
|
||||||
ListBase *oldbasep;
|
ListBase *oldbasep;
|
||||||
Sequence *parseq;
|
Sequence *parseq;
|
||||||
|
/* the startdisp/enddisp when entering the meta */
|
||||||
|
int disp_range[2];
|
||||||
} MetaStack;
|
} MetaStack;
|
||||||
|
|
||||||
typedef struct Editing {
|
typedef struct Editing {
|
||||||
|
Reference in New Issue
Block a user