[Bf-blender-cvs] [d5550c7b2c6] master: Fix T97071: Duplicating strip in locked channel creates overlapping strips

Richard Antalik noreply at git.blender.org
Tue Apr 5 14:57:09 CEST 2022


Commit: d5550c7b2c6b3278444f1f377d62776736c5dff9
Author: Richard Antalik
Date:   Tue Apr 5 14:52:32 2022 +0200
Branches: master
https://developer.blender.org/rBd5550c7b2c6b3278444f1f377d62776736c5dff9

Fix T97071: Duplicating strip in locked channel creates overlapping strips

Add flag `SEQ_IGNORE_CHANNEL_LOCK` to indicate, that channel lock
should not apply to strip. This flag must be cleared after
transformation.

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

M	source/blender/editors/space_sequencer/sequencer_edit.c
M	source/blender/editors/transform/transform_convert_sequencer.c
M	source/blender/makesdna/DNA_sequence_types.h
M	source/blender/sequencer/intern/strip_transform.c

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

diff --git a/source/blender/editors/space_sequencer/sequencer_edit.c b/source/blender/editors/space_sequencer/sequencer_edit.c
index 70fba9d4ac9..0305ad279a0 100644
--- a/source/blender/editors/space_sequencer/sequencer_edit.c
+++ b/source/blender/editors/space_sequencer/sequencer_edit.c
@@ -1687,6 +1687,7 @@ static int sequencer_add_duplicate_exec(bContext *C, wmOperator *UNUSED(op))
       SEQ_select_active_set(scene, seq);
     }
     seq->flag &= ~(SEQ_LEFTSEL + SEQ_RIGHTSEL + SEQ_LOCK);
+    seq->flag |= SEQ_IGNORE_CHANNEL_LOCK;
     SEQ_animation_duplicate(scene, seq, &fcurves_original_backup);
     SEQ_ensure_unique_name(seq, scene);
   }
diff --git a/source/blender/editors/transform/transform_convert_sequencer.c b/source/blender/editors/transform/transform_convert_sequencer.c
index 16a96001fd2..990d3680057 100644
--- a/source/blender/editors/transform/transform_convert_sequencer.c
+++ b/source/blender/editors/transform/transform_convert_sequencer.c
@@ -606,6 +606,11 @@ static void freeSeqData(TransInfo *t, TransDataContainer *tc, TransCustomData *c
   SeqCollection *transformed_strips = seq_transform_collection_from_transdata(tc);
   SEQ_collection_expand(seqbase_active_get(t), transformed_strips, SEQ_query_strip_effect_chain);
 
+  Sequence *seq;
+  SEQ_ITERATOR_FOREACH (seq, transformed_strips) {
+    seq->flag &= ~SEQ_IGNORE_CHANNEL_LOCK;
+  }
+
   if (t->state == TRANS_CANCEL) {
     seq_transform_cancel(t, transformed_strips);
     SEQ_collection_free(transformed_strips);
diff --git a/source/blender/makesdna/DNA_sequence_types.h b/source/blender/makesdna/DNA_sequence_types.h
index cb660619a37..d28550b5456 100644
--- a/source/blender/makesdna/DNA_sequence_types.h
+++ b/source/blender/makesdna/DNA_sequence_types.h
@@ -562,7 +562,7 @@ enum {
   SEQ_MAKE_FLOAT = (1 << 13),
   SEQ_LOCK = (1 << 14),
   SEQ_USE_PROXY = (1 << 15),
-  SEQ_FLAG_UNUSED_23 = (1 << 16), /* cleared */
+  SEQ_IGNORE_CHANNEL_LOCK = (1 << 16),
   SEQ_FLAG_UNUSED_22 = (1 << 17), /* cleared */
   SEQ_FLAG_UNUSED_18 = (1 << 18), /* cleared */
   SEQ_FLAG_UNUSED_19 = (1 << 19), /* cleared */
diff --git a/source/blender/sequencer/intern/strip_transform.c b/source/blender/sequencer/intern/strip_transform.c
index 618fed079f4..087e2610bd6 100644
--- a/source/blender/sequencer/intern/strip_transform.c
+++ b/source/blender/sequencer/intern/strip_transform.c
@@ -395,7 +395,8 @@ void SEQ_transform_offset_after_frame(Scene *scene,
 bool SEQ_transform_is_locked(ListBase *channels, Sequence *seq)
 {
   SeqTimelineChannel *channel = SEQ_channel_get_by_index(channels, seq->machine);
-  return seq->flag & SEQ_LOCK || SEQ_channel_is_locked(channel);
+  return seq->flag & SEQ_LOCK ||
+         (SEQ_channel_is_locked(channel) && ((seq->flag & SEQ_IGNORE_CHANNEL_LOCK) == 0));
 }
 
 void SEQ_image_transform_mirror_factor_get(const Sequence *seq, float r_mirror[2])



More information about the Bf-blender-cvs mailing list