diff options
author | Richard Antalik <richardantalik@gmail.com> | 2021-06-02 22:36:09 +0300 |
---|---|---|
committer | Richard Antalik <richardantalik@gmail.com> | 2021-06-02 22:41:17 +0300 |
commit | 2ee575fc1f2b13f083bc5996e20e7350570be546 (patch) | |
tree | a6106320272034b5e0d04335c834d67c16234a52 /source/blender | |
parent | 1f557867916bd6ab43ced4b4fd651a7d1d11f8ac (diff) |
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
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/editors/space_sequencer/sequencer_edit.c | 20 | ||||
-rw-r--r-- | source/blender/sequencer/SEQ_sequencer.h | 2 | ||||
-rw-r--r-- | source/blender/sequencer/SEQ_utils.h | 1 | ||||
-rw-r--r-- | source/blender/sequencer/intern/sequencer.c | 29 |
4 files changed, 23 insertions, 29 deletions
diff --git a/source/blender/editors/space_sequencer/sequencer_edit.c b/source/blender/editors/space_sequencer/sequencer_edit.c index 53ddc818cd1..d844b8c18c6 100644 --- a/source/blender/editors/space_sequencer/sequencer_edit.c +++ b/source/blender/editors/space_sequencer/sequencer_edit.c @@ -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}; + + SEQ_sequence_base_dupli_recursive(scene, scene, &duplicated, ed->seqbasep, 0, 0); + ED_sequencer_deselect_all(scene); - if (nseqbase.first) { - Sequence *seq = nseqbase.first; + 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); } diff --git a/source/blender/sequencer/SEQ_sequencer.h b/source/blender/sequencer/SEQ_sequencer.h index 63df886d31f..ad0815892f7 100644 --- a/source/blender/sequencer/SEQ_sequencer.h +++ b/source/blender/sequencer/SEQ_sequencer.h @@ -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) diff --git a/source/blender/sequencer/SEQ_utils.h b/source/blender/sequencer/SEQ_utils.h index 9d529089ffc..a4dc80d75db 100644 --- a/source/blender/sequencer/SEQ_utils.h +++ b/source/blender/sequencer/SEQ_utils.h @@ -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 diff --git a/source/blender/sequencer/intern/sequencer.c b/source/blender/sequencer/intern/sequencer.c index 4acb6a206be..d0bc41062a1 100644 --- a/source/blender/sequencer/intern/sequencer.c +++ b/source/blender/sequencer/intern/sequencer.c @@ -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); } } } |