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
path: root/source
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2009-12-09 19:46:41 +0300
committerCampbell Barton <ideasman42@gmail.com>2009-12-09 19:46:41 +0300
commit00b8e65f0aaefc34c91bdfee7f31233bb313f312 (patch)
tree6e500c447dbe5a2c3e88f835dd2395e83a55514f /source
parent2cc8ef127e1a626f4517c8a0ee9f555fb8b66758 (diff)
very very bad hack to have sequencer strips fcurve data transform with them.
ifdef'd so its not kept in by accident. Committing because without this animating with the sequencer isnt really usable and am not interensted in having many patches applied on artists systems.
Diffstat (limited to 'source')
-rw-r--r--source/blender/blenkernel/BKE_sequence.h1
-rw-r--r--source/blender/blenkernel/intern/sequence.c25
-rw-r--r--source/blender/editors/transform/transform_conversions.c21
3 files changed, 47 insertions, 0 deletions
diff --git a/source/blender/blenkernel/BKE_sequence.h b/source/blender/blenkernel/BKE_sequence.h
index acc0d8576a1..b42f023d12a 100644
--- a/source/blender/blenkernel/BKE_sequence.h
+++ b/source/blender/blenkernel/BKE_sequence.h
@@ -181,6 +181,7 @@ int seq_tx_test(struct Sequence * seq);
int check_single_seq(struct Sequence *seq);
void fix_single_seq(struct Sequence *seq);
int seq_test_overlap(struct ListBase * seqbasep, struct Sequence *test);
+void seq_offset_animdata(struct Scene *scene, struct Sequence *seq, int ofs);
int shuffle_seq(struct ListBase * seqbasep, struct Sequence *test);
int shuffle_seq_time(ListBase * seqbasep);
void free_imbuf_seq(struct Scene *scene, struct ListBase * seqbasep, int check_mem_usage);
diff --git a/source/blender/blenkernel/intern/sequence.c b/source/blender/blenkernel/intern/sequence.c
index f11aca32da7..bb1096c9e7e 100644
--- a/source/blender/blenkernel/intern/sequence.c
+++ b/source/blender/blenkernel/intern/sequence.c
@@ -3529,6 +3529,31 @@ void seq_update_muting(Editing *ed)
}
}
+
+/* XXX - hackish function needed for transforming strips! TODO - have some better solution */
+void seq_offset_animdata(Scene *scene, Sequence *seq, int ofs)
+{
+ if(scene->adt==NULL || ofs==0)
+ return;
+
+ char str[32];
+ sprintf(str, "[\"%s\"]", seq->name+2);
+
+ FCurve *fcu;
+ for (fcu= scene->adt->action->curves.first; fcu; fcu= fcu->next) {
+ if(strstr(fcu->rna_path, "sequence_editor.sequences_all[") && strstr(fcu->rna_path, str)) {
+ int i;
+ for (i = 0; i < fcu->totvert; i++) {
+ BezTriple *bezt= &fcu->bezt[i];
+ bezt->vec[0][0] += ofs;
+ bezt->vec[1][0] += ofs;
+ bezt->vec[2][0] += ofs;
+ }
+ }
+ }
+}
+
+
Sequence *active_seq_get(Scene *scene)
{
Editing *ed= seq_give_editing(scene, FALSE);
diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c
index 37e56874044..0840d709ef8 100644
--- a/source/blender/editors/transform/transform_conversions.c
+++ b/source/blender/editors/transform/transform_conversions.c
@@ -2346,6 +2346,7 @@ void flushTransNodes(TransInfo *t)
}
/* *** SEQUENCE EDITOR *** */
+#define XXX_DURIAN_ANIM_TX_HACK
void flushTransSeq(TransInfo *t)
{
ListBase *seqbasep= seq_give_editing(t->scene, FALSE)->seqbasep; /* Editing null check alredy done */
@@ -2374,6 +2375,13 @@ void flushTransSeq(TransInfo *t)
if (seq->type != SEQ_META && (seq->depth != 0 || seq_tx_test(seq))) /* for meta's, their children move */
seq->start= new_frame - tdsq->start_offset;
+#ifdef XXX_DURIAN_ANIM_TX_HACK
+ if (seq->type != SEQ_META && seq != seq_prev) {
+ int ofs = (new_frame - tdsq->start_offset) - seq->start;
+ seq_offset_animdata(t->scene, seq, ofs);
+ }
+#endif
+
if (seq->depth==0) {
seq->machine= (int)floor(td2d->loc[1] + 0.5f);
CLAMP(seq->machine, 1, MAXSEQ);
@@ -3828,6 +3836,19 @@ static short constraints_list_needinv(TransInfo *t, ListBase *list)
*/
static void SeqTransInfo(TransInfo *t, Sequence *seq, int *recursive, int *count, int *flag)
{
+
+#ifdef XXX_DURIAN_ANIM_TX_HACK
+ /* hack */
+ if((seq->flag & SELECT)==0 && seq->type & SEQ_EFFECT) {
+ Sequence *seq_t[3] = {seq->seq1, seq->seq2, seq->seq3};
+ int i;
+ for(i=0; i<3; i++) {
+ if (seq_t[i] && ((seq_t[i])->flag & SELECT) && !(seq_t[i]->flag & SEQ_LOCK) && !(seq_t[i]->flag & (SEQ_LEFTSEL|SEQ_RIGHTSEL)))
+ seq->flag |= SELECT;
+ }
+ }
+#endif
+
/* for extend we need to do some tricks */
if (t->mode == TFM_TIME_EXTEND) {