Revision: 18601
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18601
Author:   campbellbarton
Date:     2009-01-21 08:01:20 +0100 (Wed, 21 Jan 2009)

Log Message:
-----------
basic transform for sequencer strips
can transform the strips or move their handles
Still todo, click-drag transform, metastrips support, snapping, markers overlap 
checks and constrain to valid channels.

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_ops.c
    
branches/blender2.5/blender/source/blender/editors/space_sequencer/space_sequencer.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
    
branches/blender2.5/blender/source/blender/editors/transform/transform_generics.c
    branches/blender2.5/blender/source/blender/editors/transform/transform_ops.c
    branches/blender2.5/blender/source/blender/python/intern/bpy_compat.h

Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_sequence.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/BKE_sequence.h        
2009-01-21 06:14:37 UTC (rev 18600)
+++ branches/blender2.5/blender/source/blender/blenkernel/BKE_sequence.h        
2009-01-21 07:01:20 UTC (rev 18601)
@@ -166,3 +166,14 @@
 // extern
 struct SeqEffectHandle get_sequence_effect(struct Sequence *seq);
 int get_sequence_effect_num_inputs(int seq_type);
+
+/* for transform but also could use elsewhere */
+int seq_tx_get_start(struct Sequence *seq);
+int seq_tx_get_end(struct Sequence *seq);
+int seq_tx_get_final_left(struct Sequence *seq, int metaclip);
+int seq_tx_get_final_right(struct Sequence *seq, int metaclip);
+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 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-21 06:14:37 UTC (rev 18600)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/sequence.c     
2009-01-21 07:01:20 UTC (rev 18601)
@@ -3064,3 +3064,132 @@
 }
 
 #endif
+
+/* seq funcs's for transforming internally
+ notice the difference between start/end and left/right.
+
+ left and right are the bounds at which the sequence is rendered,
+start and end are from the start and fixed length of the sequence.
+*/
+int seq_tx_get_start(Sequence *seq) {
+       return seq->start;
+}
+int seq_tx_get_end(Sequence *seq)
+{
+       return seq->start+seq->len;
+}
+
+int seq_tx_get_final_left(Sequence *seq, int metaclip)
+{
+       if (metaclip && seq->tmp) {
+               /* return the range clipped by the parents range */
+               return MAX2( seq_tx_get_final_left(seq, 0), 
seq_tx_get_final_left((Sequence *)seq->tmp, 1) );
+       } else {
+               return (seq->start - seq->startstill) + seq->startofs;
+       }
+
+}
+int seq_tx_get_final_right(Sequence *seq, int metaclip)
+{
+       if (metaclip && seq->tmp) {
+               /* return the range clipped by the parents range */
+               return MIN2( seq_tx_get_final_right(seq, 0), 
seq_tx_get_final_right((Sequence *)seq->tmp, 1) );
+       } else {
+               return ((seq->start+seq->len) + seq->endstill) - seq->endofs;
+       }
+}
+
+void seq_tx_set_final_left(Sequence *seq, int val)
+{
+       if (val < (seq)->start) {
+               seq->startstill = abs(val - (seq)->start);
+                               (seq)->startofs = 0;
+       } else {
+               seq->startofs = abs(val - (seq)->start);
+               seq->startstill = 0;
+       }
+}
+
+void seq_tx_set_final_right(Sequence *seq, int val)
+{
+       if (val > (seq)->start + (seq)->len) {
+               seq->endstill = abs(val - (seq->start + (seq)->len));
+               (seq)->endofs = 0;
+       } else {
+               seq->endofs = abs(val - ((seq)->start + (seq)->len));
+               seq->endstill = 0;
+       }
+}
+
+/* used so we can do a quick check for single image seq
+   since they work a bit differently to normal image seq's (during transform) 
*/
+int check_single_seq(Sequence *seq)
+{
+       if ( seq->len==1 && (seq->type == SEQ_IMAGE || seq->type == SEQ_COLOR))
+               return 1;
+       else
+               return 0;
+}
+
+/* use to impose limits when dragging/extending - so impossible situations 
dont happen
+ * Cant use the SEQ_LEFTSEL and SEQ_LEFTSEL directly because the strip may be 
in a metastrip */
+void seq_tx_handle_xlimits(Sequence *seq, int leftflag, int rightflag)
+{
+       if(leftflag) {
+               if (seq_tx_get_final_left(seq, 0) >= 
seq_tx_get_final_right(seq, 0)) {
+                       seq_tx_set_final_left(seq, seq_tx_get_final_right(seq, 
0)-1);
+               }
+
+               if (check_single_seq(seq)==0) {
+                       if (seq_tx_get_final_left(seq, 0) >= 
seq_tx_get_end(seq)) {
+                               seq_tx_set_final_left(seq, 
seq_tx_get_end(seq)-1);
+                       }
+
+                       /* dosnt work now - TODO */
+                       /*
+                       if (seq_tx_get_start(seq) >= 
seq_tx_get_final_right(seq, 0)) {
+                               int ofs;
+                               ofs = seq_tx_get_start(seq) - 
seq_tx_get_final_right(seq, 0);
+                               seq->start -= ofs;
+                               seq_tx_set_final_left(seq, 
seq_tx_get_final_left(seq, 0) + ofs );
+                       }*/
+
+               }
+       }
+
+       if(rightflag) {
+               if (seq_tx_get_final_right(seq, 0) <=  
seq_tx_get_final_left(seq, 0)) {
+                       seq_tx_set_final_right(seq, seq_tx_get_final_left(seq, 
0)+1);
+               }
+
+               if (check_single_seq(seq)==0) {
+                       if (seq_tx_get_final_right(seq, 0) <= 
seq_tx_get_start(seq)) {
+                               seq_tx_set_final_right(seq, 
seq_tx_get_start(seq)+1);
+                       }
+               }
+       }
+
+       /* sounds cannot be extended past their endpoints */
+       if (seq->type == SEQ_RAM_SOUND || seq->type == SEQ_HD_SOUND) {
+               seq->startstill= 0;
+               seq->endstill= 0;
+       }
+}
+
+void fix_single_seq(Sequence *seq)
+{
+       int left, start, offset;
+       if (!check_single_seq(seq))
+               return;
+
+       /* make sure the image is always at the start since there is only one,
+          adjusting its start should be ok */
+       left = seq_tx_get_final_left(seq, 0);
+       start = seq->start;
+       if (start != left) {
+               offset = left - start;
+               seq_tx_set_final_left( seq, seq_tx_get_final_left(seq, 0) - 
offset );
+               seq_tx_set_final_right( seq, seq_tx_get_final_right(seq, 0) - 
offset );
+               seq->start += offset;
+       }
+}
\ No newline at end of file

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-21 06:14:37 UTC (rev 18600)
+++ 
branches/blender2.5/blender/source/blender/editors/space_sequencer/sequencer_add.c
  2009-01-21 07:01:20 UTC (rev 18601)
@@ -997,7 +997,7 @@
        
        /* basic defaults */
        seq->strip= strip= MEM_callocN(sizeof(Strip), "strip");
-       strip->len = seq->len = end_frame-start_frame; /* Color strips are 
different in that they can be any length */
+       strip->len = seq->len = 1; /* Color strips are different in that they 
can be any length */
        strip->us= 1;
        
        strip->stripdata= se= MEM_callocN(seq->len*sizeof(StripElem), 
"stripelem");
@@ -1005,6 +1005,8 @@
        RNA_string_get(op->ptr, "name", seq->name);
        RNA_float_get_array(op->ptr, "color", colvars->col);
        
+       seq_tx_set_final_right(seq, end_frame);
+
        calc_sequence_disp(seq);
        sort_seq(scene);
        

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-21 06:14:37 UTC (rev 18600)
+++ 
branches/blender2.5/blender/source/blender/editors/space_sequencer/sequencer_edit.c
 2009-01-21 07:01:20 UTC (rev 18601)
@@ -158,62 +158,6 @@
        return best_seq;
 }
 
-/* seq funcs's for transforming internally
- notice the difference between start/end and left/right.
- 
- left and right are the bounds at which the sequence is rendered,
-start and end are from the start and fixed length of the sequence.
-*/
-int seq_tx_get_start(Sequence *seq) {
-       return seq->start;
-}
-int seq_tx_get_end(Sequence *seq)
-{
-       return seq->start+seq->len;
-}
-
-int seq_tx_get_final_left(Sequence *seq, int metaclip)
-{
-       if (metaclip && seq->tmp) {
-               /* return the range clipped by the parents range */
-               return MAX2( seq_tx_get_final_left(seq, 0), 
seq_tx_get_final_left((Sequence *)seq->tmp, 1) );
-       } else {
-               return (seq->start - seq->startstill) + seq->startofs;
-       }
-       
-}
-int seq_tx_get_final_right(Sequence *seq, int metaclip)
-{
-       if (metaclip && seq->tmp) {
-               /* return the range clipped by the parents range */
-               return MIN2( seq_tx_get_final_right(seq, 0), 
seq_tx_get_final_right((Sequence *)seq->tmp, 1) );
-       } else {
-               return ((seq->start+seq->len) + seq->endstill) - seq->endofs;   
-       }
-}
-
-void seq_tx_set_final_left(Sequence *seq, int val)
-{
-       if (val < (seq)->start) {
-               seq->startstill = abs(val - (seq)->start);
-                               (seq)->startofs = 0;
-       } else {
-               seq->startofs = abs(val - (seq)->start);
-               seq->startstill = 0;
-       }
-}
-
-void seq_tx_set_final_right(Sequence *seq, int val)
-{
-       if (val > (seq)->start + (seq)->len) {
-               seq->endstill = abs(val - (seq->start + (seq)->len));
-               (seq)->endofs = 0;
-       } else {
-               seq->endofs = abs(val - ((seq)->start + (seq)->len));
-               seq->endstill = 0;
-       }
-}
-
 /* check if one side can be transformed */
 int seq_tx_check_left(Sequence *seq)
 {
@@ -251,34 +195,6 @@
        rectf->ymax= seq->machine+0.8;
 }
 
-/* used so we can do a quick check for single image seq
-   since they work a bit differently to normal image seq's (during transform) 
*/
-int check_single_seq(Sequence *seq)
-{
-       if ( seq->len==1 && (seq->type == SEQ_IMAGE || seq->type == SEQ_COLOR))
-               return 1;
-       else
-               return 0;
-}
-
-static void fix_single_image_seq(Sequence *seq)
-{
-       int left, start, offset;
-       if (!check_single_seq(seq))
-               return;
-       
-       /* make sure the image is always at the start since there is only one,
-          adjusting its start should be ok */
-       left = seq_tx_get_final_left(seq, 0);
-       start = seq->start;
-       if (start != left) {
-               offset = left - start;
-               seq_tx_set_final_left( seq, seq_tx_get_final_left(seq, 0) - 
offset );
-               seq_tx_set_final_right( seq, seq_tx_get_final_right(seq, 0) - 
offset );
-               seq->start += offset;
-       }
-}
-
 int test_overlap_seq(Scene *scene, Sequence *test)
 {
        Sequence *seq;
@@ -1824,50 +1740,6 @@
        return (int)(x - xmouse);
 }
 
-/* use to impose limits when dragging/extending - so impossible situations 
dont happen */
-static void transform_grab_xlimits(Sequence *seq, int leftflag, int rightflag)
-{
-       if(leftflag) {
-               if (seq_tx_get_final_left(seq, 0) >= 
seq_tx_get_final_right(seq, 0)) {
-                       seq_tx_set_final_left(seq, seq_tx_get_final_right(seq, 
0)-1);
-               }
-               
-               if (check_single_seq(seq)==0) {
-                       if (seq_tx_get_final_left(seq, 0) >= 
seq_tx_get_end(seq)) {
-                               seq_tx_set_final_left(seq, 
seq_tx_get_end(seq)-1);
-                       }
-                       
-                       /* dosnt work now - TODO */
-                       /*
-                       if (seq_tx_get_start(seq) >= 
seq_tx_get_final_right(seq, 0)) {
-                               int ofs;
-                               ofs = seq_tx_get_start(seq) - 
seq_tx_get_final_right(seq, 0);
-                               seq->start -= ofs;
-                               seq_tx_set_final_left(seq, 
seq_tx_get_final_left(seq, 0) + ofs );
-                       }*/
-                       
-               }
-       }
-       
-       if(rightflag) {
-               if (seq_tx_get_final_right(seq, 0) <=  
seq_tx_get_final_left(seq, 0)) {
-                       seq_tx_set_final_right(seq, seq_tx_get_final_left(seq, 
0)+1);
-               }
-                                                                       
-               if (check_single_seq(seq)==0) {
-                       if (seq_tx_get_final_right(seq, 0) <= 
seq_tx_get_start(seq)) {
-                               seq_tx_set_final_right(seq, 
seq_tx_get_start(seq)+1);
-                       }

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to