Cleanup: Strip duplication code
Remove unused flag `SEQ_DUPE_ANIM` and code used by this flag. Remove flag `SEQ_DUPE_CONTEXT` and refactor code, to split operator logic from duplication code. Reduce indentation level in for loop. Reviewed By: sergey Differential Revision: https://developer.blender.org/D11318
This commit is contained in:
parent
1f55786791
commit
2ee575fc1f
|
@ -1582,21 +1582,29 @@ static int sequencer_add_duplicate_exec(bContext *C, wmOperator *UNUSED(op))
|
|||
Scene *scene = CTX_data_scene(C);
|
||||
Editing *ed = SEQ_editing_get(scene, false);
|
||||
|
||||
ListBase nseqbase = {NULL, NULL};
|
||||
|
||||
if (ed == NULL) {
|
||||
return OPERATOR_CANCELLED;
|
||||
}
|
||||
|
||||
SEQ_sequence_base_dupli_recursive(scene, scene, &nseqbase, ed->seqbasep, SEQ_DUPE_CONTEXT, 0);
|
||||
Sequence *active_seq = SEQ_select_active_get(scene);
|
||||
ListBase duplicated = {NULL, NULL};
|
||||
|
||||
if (nseqbase.first) {
|
||||
Sequence *seq = nseqbase.first;
|
||||
SEQ_sequence_base_dupli_recursive(scene, scene, &duplicated, ed->seqbasep, 0, 0);
|
||||
ED_sequencer_deselect_all(scene);
|
||||
|
||||
if (duplicated.first) {
|
||||
Sequence *seq = duplicated.first;
|
||||
/* Rely on the nseqbase list being added at the end.
|
||||
* Their UUIDs has been re-generated by the SEQ_sequence_base_dupli_recursive(), */
|
||||
BLI_movelisttolist(ed->seqbasep, &nseqbase);
|
||||
BLI_movelisttolist(ed->seqbasep, &duplicated);
|
||||
|
||||
/* Handle duplicated strips: set active, select, ensure unique name and duplicate animation
|
||||
* data. */
|
||||
for (; seq; seq = seq->next) {
|
||||
if (STREQ(active_seq != NULL && seq->name, active_seq->name)) {
|
||||
SEQ_select_active_set(scene, seq);
|
||||
}
|
||||
seq->flag &= ~(SEQ_LEFTSEL + SEQ_RIGHTSEL + SEQ_LOCK);
|
||||
SEQ_ensure_unique_name(seq, scene);
|
||||
}
|
||||
|
||||
|
|
|
@ -46,8 +46,6 @@ enum {
|
|||
|
||||
/* seq_dupli' flags */
|
||||
#define SEQ_DUPE_UNIQUE_NAME (1 << 0)
|
||||
#define SEQ_DUPE_CONTEXT (1 << 1)
|
||||
#define SEQ_DUPE_ANIM (1 << 2)
|
||||
#define SEQ_DUPE_ALL (1 << 3) /* otherwise only selected are copied */
|
||||
#define SEQ_DUPE_IS_RECURSIVE_CALL (1 << 4)
|
||||
|
||||
|
|
|
@ -61,6 +61,7 @@ int SEQ_recursive_apply(struct Sequence *seq,
|
|||
int (*apply_fn)(struct Sequence *, void *),
|
||||
void *arg);
|
||||
void SEQ_ensure_unique_name(struct Sequence *seq, struct Scene *scene);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -516,10 +516,6 @@ static Sequence *seq_dupli(const Scene *scene_src,
|
|||
if (dupe_flag & SEQ_DUPE_UNIQUE_NAME) {
|
||||
SEQ_sequence_base_unique_name_recursive(&scene_dst->ed->seqbase, seqn);
|
||||
}
|
||||
|
||||
if (dupe_flag & SEQ_DUPE_ANIM) {
|
||||
SEQ_dupe_animdata(scene_dst, seq->name + 2, seqn->name + 2);
|
||||
}
|
||||
}
|
||||
|
||||
return seqn;
|
||||
|
@ -565,30 +561,21 @@ void SEQ_sequence_base_dupli_recursive(const Scene *scene_src,
|
|||
{
|
||||
Sequence *seq;
|
||||
Sequence *seqn = NULL;
|
||||
Sequence *last_seq = SEQ_select_active_get((Scene *)scene_src);
|
||||
/* always include meta's strips */
|
||||
int dupe_flag_recursive = dupe_flag | SEQ_DUPE_ALL | SEQ_DUPE_IS_RECURSIVE_CALL;
|
||||
|
||||
for (seq = seqbase->first; seq; seq = seq->next) {
|
||||
seq->tmp = NULL;
|
||||
if ((seq->flag & SELECT) || (dupe_flag & SEQ_DUPE_ALL)) {
|
||||
seqn = seq_dupli(scene_src, scene_dst, nseqbase, seq, dupe_flag, flag);
|
||||
if (seqn) { /*should never fail */
|
||||
if (dupe_flag & SEQ_DUPE_CONTEXT) {
|
||||
seq->flag &= ~SEQ_ALLSEL;
|
||||
seqn->flag &= ~(SEQ_LEFTSEL + SEQ_RIGHTSEL + SEQ_LOCK);
|
||||
}
|
||||
|
||||
if (seq->type == SEQ_TYPE_META) {
|
||||
SEQ_sequence_base_dupli_recursive(
|
||||
scene_src, scene_dst, &seqn->seqbase, &seq->seqbase, dupe_flag_recursive, flag);
|
||||
}
|
||||
if (seqn == NULL) {
|
||||
continue; /* Should never fail. */
|
||||
}
|
||||
|
||||
if (dupe_flag & SEQ_DUPE_CONTEXT) {
|
||||
if (seq == last_seq) {
|
||||
SEQ_select_active_set(scene_dst, seqn);
|
||||
}
|
||||
}
|
||||
if (seq->type == SEQ_TYPE_META) {
|
||||
/* Always include meta all strip children. */
|
||||
int dupe_flag_recursive = dupe_flag | SEQ_DUPE_ALL | SEQ_DUPE_IS_RECURSIVE_CALL;
|
||||
SEQ_sequence_base_dupli_recursive(
|
||||
scene_src, scene_dst, &seqn->seqbase, &seq->seqbase, dupe_flag_recursive, flag);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue