Revision: 18641
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18641
Author:   campbellbarton
Date:     2009-01-24 00:14:02 +0100 (Sat, 24 Jan 2009)

Log Message:
-----------
* operators for toggling, making, separating metastrip's. (tab, m, alt+m)
* transform support for metastrips
* active strip is set to NULL if its freed again.

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/blenkernel/BKE_sequence.h
    branches/blender2.5/blender/source/blender/blenkernel/intern/sequence.c
    
branches/blender2.5/blender/source/blender/editors/space_sequencer/sequencer_add.c
    
branches/blender2.5/blender/source/blender/editors/space_sequencer/sequencer_edit.c
    
branches/blender2.5/blender/source/blender/editors/space_sequencer/sequencer_intern.h
    
branches/blender2.5/blender/source/blender/editors/space_sequencer/sequencer_ops.c
    branches/blender2.5/blender/source/blender/editors/transform/transform.c
    branches/blender2.5/blender/source/blender/editors/transform/transform.h
    
branches/blender2.5/blender/source/blender/editors/transform/transform_conversions.c

Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_sequence.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/BKE_sequence.h        
2009-01-23 23:11:12 UTC (rev 18640)
+++ branches/blender2.5/blender/source/blender/blenkernel/BKE_sequence.h        
2009-01-23 23:14:02 UTC (rev 18641)
@@ -137,7 +137,7 @@
 /* sequence.c */
 
 // extern
-void seq_free_sequence(struct Sequence *seq);
+void seq_free_sequence(struct Editing *ed, struct Sequence *seq);
 void seq_free_strip(struct Strip *strip);
 void seq_free_editing(struct Editing *ed);
 char *give_seqname(struct Sequence *seq);
@@ -175,5 +175,7 @@
 void seq_tx_set_final_left(struct Sequence *seq, int val);
 void seq_tx_set_final_right(struct Sequence *seq, int val);
 void seq_tx_handle_xlimits(struct Sequence *seq, int leftflag, int rightflag);
+int seq_tx_test(struct Sequence * seq);
 int check_single_seq(struct Sequence *seq);
 void fix_single_seq(struct Sequence *seq);
+

Modified: 
branches/blender2.5/blender/source/blender/blenkernel/intern/sequence.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/sequence.c     
2009-01-23 23:11:12 UTC (rev 18640)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/sequence.c     
2009-01-23 23:14:02 UTC (rev 18641)
@@ -165,10 +165,8 @@
        MEM_freeN(strip);
 }
 
-void seq_free_sequence(Sequence *seq)
+void seq_free_sequence(Editing *ed, Sequence *seq)
 {
-       //XXX Sequence *last_seq = get_last_seq();
-
        if(seq->strip) seq_free_strip(seq->strip);
 
        if(seq->anim) IMB_free_anim(seq->anim);
@@ -180,7 +178,8 @@
                sh.free(seq);
        }*/
 
-       //XXX if(seq==last_seq) set_last_seq(NULL);
+       if (ed->act_seq==seq)
+               ed->act_seq= NULL;
 
        MEM_freeN(seq);
 }
@@ -194,7 +193,7 @@
                return;
 
        SEQ_BEGIN(ed, seq) {
-               seq_free_sequence(seq);
+               seq_free_sequence(ed, seq);
        }
        SEQ_END
 
@@ -3192,4 +3191,9 @@
                seq_tx_set_final_right( seq, seq_tx_get_final_right(seq, 0) - 
offset );
                seq->start += offset;
        }
-}
\ No newline at end of file
+}
+
+int seq_tx_test(Sequence * seq)
+{
+       return (seq->type < SEQ_EFFECT) || 
(get_sequence_effect_num_inputs(seq->type) == 0);
+}

Modified: 
branches/blender2.5/blender/source/blender/editors/space_sequencer/sequencer_add.c
===================================================================
--- 
branches/blender2.5/blender/source/blender/editors/space_sequencer/sequencer_add.c
  2009-01-23 23:11:12 UTC (rev 18640)
+++ 
branches/blender2.5/blender/source/blender/editors/space_sequencer/sequencer_add.c
  2009-01-23 23:14:02 UTC (rev 18641)
@@ -747,7 +747,7 @@
 
                if(newseq->plugin==0) {
                        BLI_remlink(ed->seqbasep, newseq);
-                       seq_free_sequence(newseq);
+                       seq_free_sequence(ed, newseq);
                        set_last_seq(scene, NULL);
                        return 0;
                }

Modified: 
branches/blender2.5/blender/source/blender/editors/space_sequencer/sequencer_edit.c
===================================================================
--- 
branches/blender2.5/blender/source/blender/editors/space_sequencer/sequencer_edit.c
 2009-01-23 23:11:12 UTC (rev 18640)
+++ 
branches/blender2.5/blender/source/blender/editors/space_sequencer/sequencer_edit.c
 2009-01-23 23:14:02 UTC (rev 18641)
@@ -64,6 +64,7 @@
 #include "BKE_sequence.h"
 #include "BKE_scene.h"
 #include "BKE_utildefines.h"
+#include "BKE_report.h"
 
 #include "BIF_gl.h"
 #include "BIF_glutil.h"
@@ -252,7 +253,7 @@
                        error("There is no more space to add a sequence strip");
                        
                        BLI_remlink(ed->seqbasep, test);
-                       seq_free_sequence(test);
+                       seq_free_sequence(ed, test);
                        return;
                }
                test->machine++;
@@ -312,12 +313,6 @@
 
 }
 
-int sequence_is_free_transformable(Sequence * seq)
-{
-       return seq->type < SEQ_EFFECT
-               || (get_sequence_effect_num_inputs(seq->type) == 0);
-}
-
 /* XXX - use mouse_frame_side instead */
 char mouse_cfra_side(View2D *v2d, int frame ) 
 {
@@ -458,7 +453,7 @@
                        if( ((seq->startdisp < seq->enddisp) && 
(seq->startdisp<=x && seq->enddisp>=x)) ||
                                ((seq->startdisp > seq->enddisp) && 
(seq->startdisp>=x && seq->enddisp<=x)) )
                        {
-                               if(sequence_is_free_transformable(seq)) {
+                               if(seq_tx_test(seq)) {
                                        
                                        /* clamp handles to defined size in 
pixel space */
                                        
@@ -662,7 +657,7 @@
                calc_sequence(seqact);
 
                seq->strip= 0;
-               seq_free_sequence(seq);
+               seq_free_sequence(ed, seq);
                BLI_remlink(ed->seqbasep, seq);
 
                seq= ed->seqbasep->first;
@@ -702,7 +697,7 @@
                calc_sequence(seqact);
 
                seq->strip= 0;
-               seq_free_sequence(seq);
+               seq_free_sequence(ed, seq);
                BLI_remlink(ed->seqbasep, seq);
 
                update_changed_seq_and_deps(scene, seqact, 1, 1);
@@ -969,7 +964,7 @@
                        if(seq==last_seq) set_last_seq(scene, NULL);
                        if(seq->type==SEQ_META) recurs_del_seq_flag(scene, 
&seq->seqbase, flag, 1);
                        if(seq->ipo) seq->ipo->id.us--;
-                       seq_free_sequence(seq);
+                       seq_free_sequence((Editing *)scene->ed, seq);
                }
                seq= seqn;
        }
@@ -1453,203 +1448,6 @@
 }
 
 
-/* ****************** META ************************* */
-
-void make_meta(Scene *scene)
-{
-       Sequence *seq, *seqm, *next;
-       Editing *ed;
-       int tot;
-       
-       ed= scene->ed;
-       if(ed==NULL) return;
-
-       /* is there more than 1 select */
-       tot= 0;
-       seq= ed->seqbasep->first;
-       while(seq) {
-               if(seq->flag & SELECT) {
-                       tot++;
-                       if (seq->type == SEQ_RAM_SOUND) { 
-                               error("Can't make Meta Strip from audio"); 
-                               return; 
-                       }
-               }
-               seq= seq->next;
-       }
-       if(tot < 1) return;
-
-       if(okee("Make Meta Strip")==0) return;
-
-       /* test relationships */
-       seq= ed->seqbasep->first;
-       while(seq) {
-               if(seq->flag & SELECT) {
-                       if(seq->type & SEQ_EFFECT) {
-                               if(seq->seq1 && 
-                                  (seq->seq1->flag & SELECT)==0) tot= 0;
-                               if(seq->seq2 &&
-                                  (seq->seq2->flag & SELECT)==0) tot= 0;
-                               if(seq->seq3 &&
-                                  (seq->seq3->flag & SELECT)==0) tot= 0;
-                       }
-               }
-               else if(seq->type & SEQ_EFFECT) {
-                       if(seq->seq1 &&
-                          (seq->seq1->flag & SELECT)) tot= 0;
-                       if(seq->seq2 &&
-                          (seq->seq2->flag & SELECT)) tot= 0;
-                       if(seq->seq3 &&
-                          (seq->seq3->flag & SELECT)) tot= 0;
-               }
-               if(tot==0) break;
-               seq= seq->next;
-       }
-       if(tot==0) {
-               error("Please select all related strips");
-               return;
-       }
-
-       /* remove all selected from main list, and put in meta */
-
-       seqm= alloc_sequence(((Editing *)scene->ed)->seqbasep, 1, 1);
-       seqm->type= SEQ_META;
-       seqm->flag= SELECT;
-
-       seq= ed->seqbasep->first;
-       while(seq) {
-               next= seq->next;
-               if(seq!=seqm && (seq->flag & SELECT)) {
-                       BLI_remlink(ed->seqbasep, seq);
-                       BLI_addtail(&seqm->seqbase, seq);
-               }
-               seq= next;
-       }
-       calc_sequence(seqm);
-
-       seqm->strip= MEM_callocN(sizeof(Strip), "metastrip");
-       seqm->strip->len= seqm->len;
-       seqm->strip->us= 1;
-
-       if( test_overlap_seq(scene, seqm) ) shuffle_seq(scene, seqm);
-       
-       BIF_undo_push("Make Meta Strip, Sequencer");
-}
-
-static int seq_depends_on_meta(Sequence *seq, Sequence *seqm)
-{
-       if (seq == seqm) return 1;
-       else if (seq->seq1 && seq_depends_on_meta(seq->seq1, seqm)) return 1;
-       else if (seq->seq2 && seq_depends_on_meta(seq->seq2, seqm)) return 1;
-       else if (seq->seq3 && seq_depends_on_meta(seq->seq3, seqm)) return 1;
-       else return 0;
-}
-
-void un_meta(Scene *scene)
-{
-       Editing *ed;
-       Sequence *seq, *last_seq = get_last_seq(scene);
-
-       ed= scene->ed;
-       if(ed==NULL) return;
-
-       if(last_seq==0 || last_seq->type!=SEQ_META) return;
-
-       if(okee("Un Meta Strip")==0) return;
-
-       addlisttolist(ed->seqbasep, &last_seq->seqbase);
-
-       last_seq->seqbase.first= 0;
-       last_seq->seqbase.last= 0;
-
-       BLI_remlink(ed->seqbasep, last_seq);
-       seq_free_sequence(last_seq);
-
-       /* emtpy meta strip, delete all effects depending on it */
-       for(seq=ed->seqbasep->first; seq; seq=seq->next)
-               if((seq->type & SEQ_EFFECT) && seq_depends_on_meta(seq, 
last_seq))
-                       seq->flag |= SEQ_FLAG_DELETE;
-
-       recurs_del_seq_flag(scene, ed->seqbasep, SEQ_FLAG_DELETE, 0);
-
-       /* test for effects and overlap */
-       SEQP_BEGIN(ed, seq) {
-               if(seq->flag & SELECT) {
-                       seq->flag &= ~SEQ_OVERLAP;
-                       if( test_overlap_seq(scene, seq) ) {
-                               shuffle_seq(scene, seq);
-                       }
-               }
-       }
-       SEQ_END;
-
-       sort_seq(scene);
-
-       BIF_undo_push("Un-Make Meta Strip, Sequencer");
-}
-
-void exit_meta(Scene *scene)
-{
-       Sequence *seq;
-       MetaStack *ms;
-       Editing *ed;
-
-       ed= scene->ed;
-       if(ed==NULL) return;
-
-       if(ed->metastack.first==0) return;
-
-       ms= ed->metastack.last;
-       BLI_remlink(&ed->metastack, ms);
-
-       ed->seqbasep= ms->oldbasep;
-
-       /* recalc all: the meta can have effects connected to it */
-       seq= ed->seqbasep->first;
-       while(seq) {
-               calc_sequence(seq);
-               seq= seq->next;
-       }
-
-       set_last_seq(scene, ms->parseq);
-
-       ms->parseq->flag |= SELECT;
-       recurs_sel_seq(ms->parseq);
-
-       MEM_freeN(ms);
-
-       BIF_undo_push("Exit Meta Strip, Sequence");
-}
-
-
-void enter_meta(Scene *scene)
-{
-       MetaStack *ms;
-       Editing *ed;
-       Sequence *last_seq= get_last_seq(scene);
-
-       ed= scene->ed;
-       if(ed==NULL) return;
-
-       if(last_seq==0 || last_seq->type!=SEQ_META || (last_seq->flag & 
SELECT)==0) {
-               exit_meta(scene);
-               return;
-       }
-
-       ms= MEM_mallocN(sizeof(MetaStack), "metastack");
-       BLI_addtail(&ed->metastack, ms);
-       ms->parseq= last_seq;
-       ms->oldbasep= ed->seqbasep;
-
-       ed->seqbasep= &last_seq->seqbase;
-
-       set_last_seq(scene, NULL);
-       BIF_undo_push("Enter Meta Strip, Sequence");
-}
-
-
-/* ****************** END META ************************* */
-
 static int seq_get_snaplimit(View2D *v2d)
 {
        /* fake mouse coords to get the snap value
@@ -1970,7 +1768,7 @@
                                                seq_tx_handle_xlimits(seq, 
sel_flag & SEQ_LEFTSEL, sel_flag & SEQ_RIGHTSEL);
                                                
                                                if( (sel_flag & 
(SEQ_LEFTSEL+SEQ_RIGHTSEL))==0 ) {
-                                                       
if(sequence_is_free_transformable(seq)) seq->start= ts->start+ ix;
+                                                       if(seq_tx_test(seq)) 
seq->start= ts->start+ ix;
 
                                                        /* Y Transformation */
                                                        if(seq->depth==0) 
seq->machine= ts->machine+ iy;
@@ -2008,7 +1806,7 @@
                                for(seq_index=0, seq=seqar[0]; seq_index < 
totseq_index; seq=seqar[++seq_index]) {
                                        if(seq->flag & SELECT && 
!(seq->depth==0 && seq->flag & SEQ_LOCK)) {
                                                /* only move the contents of 
the metastrip otherwise the transformation is applied twice */
-                                               if 
(sequence_is_free_transformable(seq) && seq->type != SEQ_META) {
+                                               if (seq_tx_test(seq) && 
seq->type != SEQ_META) {
                                                        
                                                        move_left = move_right 
= 0;
                                                        
@@ -2292,7 +2090,7 @@
        /* also check metas */
        SEQP_BEGIN(ed, seq) {
                if (seq->flag & SELECT && !(seq->depth==0 && seq->flag & 
SEQ_LOCK) &&
-                   sequence_is_free_transformable(seq)) {
+                   seq_tx_test(seq)) {
                        if((seq->flag & (SEQ_LEFTSEL+SEQ_RIGHTSEL))==0) {

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to