Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2011-06-07 20:47:25 +0400
committerCampbell Barton <ideasman42@gmail.com>2011-06-07 20:47:25 +0400
commitd16c1f36653196d32f9915b4ba633a9c4c6569d0 (patch)
tree9cd78d09dab79b1a24d8273321be2542a55c9dde /source/blender/editors/transform/transform_conversions.c
parente44ae2c2a982cd3c98e5544bfe0a241f0b063485 (diff)
fix for sequencer transform with effects strips where the effects could be moved to invalid times to avoid overlap but would immediately refresh back to overlapping locations after.
Diffstat (limited to 'source/blender/editors/transform/transform_conversions.c')
-rw-r--r--source/blender/editors/transform/transform_conversions.c41
1 files changed, 39 insertions, 2 deletions
diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c
index c7699f7249c..593ab7b61e9 100644
--- a/source/blender/editors/transform/transform_conversions.c
+++ b/source/blender/editors/transform/transform_conversions.c
@@ -4016,6 +4016,7 @@ static void freeSeqData(TransInfo *t)
}
if(overlap) {
+ int has_effect= 0;
for(seq= seqbasep->first; seq; seq= seq->next)
seq->tmp= NULL;
@@ -4024,12 +4025,48 @@ static void freeSeqData(TransInfo *t)
for(a=0; a<t->total; a++, td++) {
seq= ((TransDataSeq *)td->extra)->seq;
if ((seq != seq_prev)) {
- /* Tag seq with a non zero value, used by shuffle_seq_time to identify the ones to shuffle */
- seq->tmp= (void*)1;
+ /* check effects strips, we cant change their time */
+ if((seq->type & SEQ_EFFECT) && seq->seq1) {
+ // shuffle_seq(seqbasep, seq, t->scene);
+ has_effect= TRUE;
+ }
+ else {
+ /* Tag seq with a non zero value, used by shuffle_seq_time to identify the ones to shuffle */
+ seq->tmp= (void*)1;
+ }
}
}
shuffle_seq_time(seqbasep, t->scene);
+
+ if(has_effect) {
+ /* update effects strips based on strips just moved in time */
+ td= t->data;
+ seq_prev= NULL;
+ for(a=0; a<t->total; a++, td++) {
+ seq= ((TransDataSeq *)td->extra)->seq;
+ if ((seq != seq_prev)) {
+ if((seq->type & SEQ_EFFECT) && seq->seq1) {
+ calc_sequence(t->scene, seq);
+ }
+ }
+ }
+
+ /* now if any effects _still_ overlap, we need to move them up */
+ td= t->data;
+ seq_prev= NULL;
+ for(a=0; a<t->total; a++, td++) {
+ seq= ((TransDataSeq *)td->extra)->seq;
+ if ((seq != seq_prev)) {
+ if((seq->type & SEQ_EFFECT) && seq->seq1) {
+ if(seq_test_overlap(seqbasep, seq)) {
+ shuffle_seq(seqbasep, seq, t->scene);
+ }
+ }
+ }
+ }
+ /* done with effects */
+ }
}
}
#endif