diff options
author | Campbell Barton <ideasman42@gmail.com> | 2009-12-16 19:35:31 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2009-12-16 19:35:31 +0300 |
commit | b6d2d9f63a188aa49e24b4c30c48947b62c6a19c (patch) | |
tree | 200ed960b5393eea76951bed6948c7b02cc95dd8 /source | |
parent | 3ea2d08e1a6dbdbe6f7d5a3ff4207fac728908dd (diff) |
have sequence strip rna not depend on the current editing sequencer context (TODO- rename)
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/blenkernel/BKE_sequencer.h | 9 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/sequencer.c | 17 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_sequencer.c | 26 |
3 files changed, 42 insertions, 10 deletions
diff --git a/source/blender/blenkernel/BKE_sequencer.h b/source/blender/blenkernel/BKE_sequencer.h index 95fe8fb5eb9..a50b03861d7 100644 --- a/source/blender/blenkernel/BKE_sequencer.h +++ b/source/blender/blenkernel/BKE_sequencer.h @@ -60,17 +60,17 @@ void seq_next(SeqIterator *iter); void seq_end(SeqIterator *iter); void seq_array(struct Editing *ed, struct Sequence ***seqarray, int *tot, int use_pointer); -#define SEQP_BEGIN(ed, seq) \ +#define SEQP_BEGIN(ed, _seq) \ { \ SeqIterator iter;\ for(seq_begin(ed, &iter, 1); iter.valid; seq_next(&iter)) { \ - seq= iter.seq; + _seq= iter.seq; -#define SEQ_BEGIN(ed, seq) \ +#define SEQ_BEGIN(ed, _seq) \ { \ SeqIterator iter;\ for(seq_begin(ed, &iter, 0); iter.valid; seq_next(&iter)) { \ - seq= iter.seq; + _seq= iter.seq; #define SEQ_END \ } \ @@ -181,6 +181,7 @@ int seq_tx_test(struct Sequence * seq); int seq_single_check(struct Sequence *seq); void seq_single_fix(struct Sequence *seq); int seq_test_overlap(struct ListBase * seqbasep, struct Sequence *test); +struct ListBase *seq_seqbase(struct ListBase *seqbase, struct Sequence *seq); 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); diff --git a/source/blender/blenkernel/intern/sequencer.c b/source/blender/blenkernel/intern/sequencer.c index 4d6033e4f4a..a7b9cf7f74c 100644 --- a/source/blender/blenkernel/intern/sequencer.c +++ b/source/blender/blenkernel/intern/sequencer.c @@ -3532,6 +3532,23 @@ void seq_update_muting(Editing *ed) } } +/* in cases where we done know the sequence's listbase */ +ListBase *seq_seqbase(ListBase *seqbase, Sequence *seq) +{ + Sequence *iseq; + ListBase *lb= NULL; + + for(iseq= seqbase->first; iseq; iseq= iseq->next) { + if(seq==iseq) { + return seqbase; + } + else if(iseq->seqbase.first && (lb= seq_seqbase(&iseq->seqbase, seq))) { + return lb; + } + } + + return NULL; +} /* XXX - hackish function needed for transforming strips! TODO - have some better solution */ void seq_offset_animdata(Scene *scene, Sequence *seq, int ofs) diff --git a/source/blender/makesrna/intern/rna_sequencer.c b/source/blender/makesrna/intern/rna_sequencer.c index b8cd2c56483..c1ca156c9bf 100644 --- a/source/blender/makesrna/intern/rna_sequencer.c +++ b/source/blender/makesrna/intern/rna_sequencer.c @@ -92,11 +92,11 @@ static void rna_SequenceEditor_sequences_all_next(CollectionPropertyIterator *it static void rna_Sequence_frame_change_update(Scene *scene, Sequence *seq) { Editing *ed= seq_give_editing(scene, FALSE); - + ListBase *seqbase= seq_seqbase(&ed->seqbase, seq); calc_sequence_disp(seq); - if( seq_test_overlap(ed->seqbasep, seq) ) { - shuffle_seq(ed->seqbasep, seq); + if(seq_test_overlap(seqbase, seq)) { + shuffle_seq(seqbase, seq); } sort_seq(scene); } @@ -150,11 +150,12 @@ static void rna_Sequence_channel_set(PointerRNA *ptr, int value) Sequence *seq= (Sequence*)ptr->data; Scene *scene= (Scene*)ptr->id.data; Editing *ed= seq_give_editing(scene, FALSE); - + ListBase *seqbase= seq_seqbase(&ed->seqbase, seq); + seq->machine= value; - if( seq_test_overlap(ed->seqbasep, seq) ) { - shuffle_seq(ed->seqbasep, seq); + if( seq_test_overlap(seqbase, seq) ) { + shuffle_seq(seqbase, seq); } sort_seq(scene); } @@ -234,9 +235,22 @@ static int rna_Sequence_name_length(PointerRNA *ptr) static void rna_Sequence_name_set(PointerRNA *ptr, const char *value) { Scene *scene= (Scene*)ptr->id.data; + Editing *ed= seq_give_editing(scene, FALSE); Sequence *seq= (Sequence*)ptr->data; + Sequence *iseq; BLI_strncpy(seq->name+2, value, sizeof(seq->name)-2); + seqUniqueName(&scene->ed->seqbase, seq); + + // TODO, unique name for all meta's + /* + SEQ_BEGIN(ed, iseq) { + if(iseq->seqbase.first) + seqUniqueName(&iseq->seqbase, seq); + + } + SEQ_END + */ } static StructRNA* rna_Sequence_refine(struct PointerRNA *ptr) |