[Bf-blender-cvs] [2ee575fc1f2] master: Cleanup: Strip duplication code

Richard Antalik noreply at git.blender.org
Wed Jun 2 21:43:14 CEST 2021


Commit: 2ee575fc1f2b13f083bc5996e20e7350570be546
Author: Richard Antalik
Date:   Wed Jun 2 21:36:09 2021 +0200
Branches: master
https://developer.blender.org/rB2ee575fc1f2b13f083bc5996e20e7350570be546

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

===================================================================

M	source/blender/editors/space_sequencer/sequencer_edit.c
M	source/blender/sequencer/SEQ_sequencer.h
M	source/blender/sequencer/SEQ_utils.h
M	source/blender/sequencer/intern/sequencer.c

===================================================================

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



More information about the Bf-blender-cvs mailing list