Revision: 28629
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=28629
Author:   joeedh
Date:     2010-05-06 22:10:37 +0200 (Thu, 06 May 2010)

Log Message:
-----------
merged over last commit, 28428

Modified Paths:
--------------
    branches/render25/source/blender/editors/interface/interface_draw.c
    branches/render25/source/blender/editors/transform/transform.c
    branches/render25/source/blender/editors/transform/transform.h
    branches/render25/source/blender/editors/transform/transform_conversions.c
    branches/render25/source/blender/editors/transform/transform_generics.c

Modified: branches/render25/source/blender/editors/interface/interface_draw.c
===================================================================
--- branches/render25/source/blender/editors/interface/interface_draw.c 
2010-05-06 19:54:43 UTC (rev 28628)
+++ branches/render25/source/blender/editors/interface/interface_draw.c 
2010-05-06 20:10:37 UTC (rev 28629)
@@ -1088,9 +1088,13 @@
 
        glTranslatef(centerx, centery, 0.f);
        glScalef(diam, diam, 0.f);
-       glVertexPointer(2, GL_FLOAT, 0, scopes->vecscope);
-       glDrawArrays(GL_POINTS, 0, scopes->waveform_tot);
 
+       /*apparently this can sometimes be NULL? - joeedh*/
+       if (scopes) {
+               glVertexPointer(2, GL_FLOAT, 0, scopes->vecscope);
+               glDrawArrays(GL_POINTS, 0, scopes->waveform_tot);
+       }
+
        glDisableClientState(GL_VERTEX_ARRAY);
        glPopMatrix();
        

Modified: branches/render25/source/blender/editors/transform/transform.c
===================================================================
--- branches/render25/source/blender/editors/transform/transform.c      
2010-05-06 19:54:43 UTC (rev 28628)
+++ branches/render25/source/blender/editors/transform/transform.c      
2010-05-06 20:10:37 UTC (rev 28629)
@@ -202,17 +202,32 @@
 
                UI_view2d_to_region_no_clip(t->view, v[0], v[1], adr, adr+1);
        }
-       else if(ELEM3(t->spacetype, SPACE_IPO, SPACE_NLA, SPACE_ACTION)) {
+       else if(t->spacetype == SPACE_ACTION) {
+               SpaceAction *sact = t->sa->spacedata.first;
                int out[2] = {0, 0};
 
-               UI_view2d_view_to_region((View2D *)t->view, vec[0], vec[1], 
out, out+1);
+               if (sact->flag & SACTION_DRAWTIME) {
+                       //vec[0] = vec[0]/((t->scene->r.frs_sec / 
t->scene->r.frs_sec_base));
+
+                       UI_view2d_to_region_no_clip((View2D *)t->view, vec[0], 
vec[1], out, out+1);
+               } else {
+                       UI_view2d_to_region_no_clip((View2D *)t->view, vec[0], 
vec[1], out, out+1);
+               }
+
                adr[0]= out[0];
                adr[1]= out[1];
        }
+       else if(ELEM(t->spacetype, SPACE_IPO, SPACE_NLA)) {
+               int out[2] = {0, 0};
+
+               UI_view2d_to_region_no_clip((View2D *)t->view, vec[0], vec[1], 
out, out+1);
+               adr[0]= out[0];
+               adr[1]= out[1];
+       }
        else if(t->spacetype==SPACE_SEQ) { /* XXX not tested yet, but should 
work */
                int out[2] = {0, 0};
 
-               UI_view2d_view_to_region((View2D *)t->view, vec[0], vec[1], 
out, out+1);
+               UI_view2d_to_region_no_clip((View2D *)t->view, vec[0], vec[1], 
out, out+1);
                adr[0]= out[0];
                adr[1]= out[1];
        }
@@ -5285,12 +5300,12 @@
 /* This function is used by Animation Editor specific transform functions to do
  * the Snap Keyframe to Nearest Frame/Marker
  */
-static void doAnimEdit_SnapFrame(TransInfo *t, TransData *td, AnimData *adt, 
short autosnap)
+static void doAnimEdit_SnapFrame(TransInfo *t, TransData *td, TransData2D 
*td2d, AnimData *adt, short autosnap)
 {
        /* snap key to nearest frame? */
        if (autosnap == SACTSNAP_FRAME) {
                const Scene *scene= t->scene;
-               const short doTime= getAnimEdit_DrawTime(t);
+               const short doTime= 0; //XXX doesn't work - 
getAnimEdit_DrawTime(t);
                const double secf= FPS;
                double val;
 
@@ -5332,6 +5347,14 @@
                else
                        *(td->val)= val;
        }
+
+       if ((td->flag & TD_MOVEHANDLE1) && td2d->h1) {
+               td2d->h1[0] = td2d->ih1[0] + *td->val - td->ival;
+       }
+
+       if ((td->flag & TD_MOVEHANDLE2) && td2d->h2) {
+               td2d->h2[0] = td2d->ih2[0] + *td->val - td->ival;
+       }
 }
 
 /* ----------------- Translation ----------------------- */
@@ -5394,6 +5417,7 @@
 static void applyTimeTranslate(TransInfo *t, float sval)
 {
        TransData *td = t->data;
+       TransData2D *td2d = t->data2d;
        Scene *scene = t->scene;
        int i;
 
@@ -5402,16 +5426,18 @@
 
        const short autosnap= getAnimEdit_SnapMode(t);
 
-       float deltax, val;
+       float deltax, val, valprev;
 
        /* it doesn't matter whether we apply to t->data or t->data2d, but 
t->data2d is more convenient */
-       for (i = 0 ; i < t->total; i++, td++) {
+       for (i = 0 ; i < t->total; i++, td++, td2d++) {
                /* it is assumed that td->extra is a pointer to the AnimData,
                 * whose active action is where this keyframe comes from
                 * (this is only valid when not in NLA)
                 */
                AnimData *adt= (t->spacetype != SPACE_NLA) ? td->extra : NULL;
 
+               valprev = *td->val;
+
                /* check if any need to apply nla-mapping */
                if (adt && t->spacetype != SPACE_SEQ) {
                        deltax = t->values[0];
@@ -5441,7 +5467,7 @@
                }
 
                /* apply nearest snapping */
-               doAnimEdit_SnapFrame(t, td, adt, autosnap);
+               doAnimEdit_SnapFrame(t, td, td2d, adt, autosnap);
        }
 }
 
@@ -5652,6 +5678,7 @@
 static void applyTimeScale(TransInfo *t) {
        Scene *scene = t->scene;
        TransData *td = t->data;
+       TransData2D *td2d = t->data2d;
        int i;
 
        const short autosnap= getAnimEdit_SnapMode(t);
@@ -5659,7 +5686,7 @@
        const double secf= FPS;
 
 
-       for (i = 0 ; i < t->total; i++, td++) {
+       for (i = 0 ; i < t->total; i++, td++, td2d++) {
                /* it is assumed that td->extra is a pointer to the AnimData,
                 * whose active action is where this keyframe comes from
                 * (this is only valid when not in NLA)
@@ -5685,7 +5712,7 @@
                *(td->val) += startx;
 
                /* apply nearest snapping */
-               doAnimEdit_SnapFrame(t, td, adt, autosnap);
+               doAnimEdit_SnapFrame(t, td, td2d, adt, autosnap);
        }
 }
 

Modified: branches/render25/source/blender/editors/transform/transform.h
===================================================================
--- branches/render25/source/blender/editors/transform/transform.h      
2010-05-06 19:54:43 UTC (rev 28628)
+++ branches/render25/source/blender/editors/transform/transform.h      
2010-05-06 20:10:37 UTC (rev 28629)
@@ -151,6 +151,9 @@
 typedef struct TransData2D {
        float loc[3];           /* Location of data used to transform (x,y,0) */
        float *loc2d;           /* Pointer to real 2d location of data */
+
+       float *h1, *h2;     /* Pointer to handle locations, if handles aren't 
being moved independantly*/
+       float ih1[2], ih2[2];
 } TransData2D;
 
 /* we need to store 2 handles for each transdata incase the other handle wasnt 
selected */
@@ -427,6 +430,8 @@
 #define TD_NOTIMESNAP          (1 << 14)       /* for Graph Editor autosnap, 
indicates that point should not undergo autosnapping */
 #define TD_INTVALUES           (1 << 15)       /* for Graph Editor - curves 
that can only have int-values need their keyframes tagged with this */
 #define TD_MIRROR_EDGE         (1 << 16)       /* For editmode mirror, clamp 
to x = 0 */
+#define TD_MOVEHANDLE1         (1 << 17)       /* For fcurve handles, move 
them along with their keyframes */
+#define TD_MOVEHANDLE2         (1 << 18)
 
 /* transsnap->status */
 #define SNAP_FORCED            1

Modified: 
branches/render25/source/blender/editors/transform/transform_conversions.c
===================================================================
--- branches/render25/source/blender/editors/transform/transform_conversions.c  
2010-05-06 19:54:43 UTC (rev 28628)
+++ branches/render25/source/blender/editors/transform/transform_conversions.c  
2010-05-06 20:10:37 UTC (rev 28629)
@@ -2972,9 +2972,8 @@
                        bezt->f1 |= SELECT;
                        bezt->f3 |= SELECT;
 
-                       /* increment by 3, as there are 3 points (3 * 
x-coordinates) that need transform */
                        if (FrameOnMouseSide(side, bezt->vec[1][0], cfra))
-                               count += 3;
+                               count += 1;
                }
        }
 
@@ -3023,9 +3022,10 @@
  * The 'side' argument is needed for the extend mode. 'B' = both sides, 
'R'/'L' mean only data
  * on the named side are used.
  */
-static TransData *FCurveToTransData(TransData *td, FCurve *fcu, AnimData *adt, 
char side, float cfra)
+static TransData *ActionFCurveToTransData(TransData *td, TransData2D **td2dv, 
FCurve *fcu, AnimData *adt, char side, float cfra)
 {
        BezTriple *bezt;
+       TransData2D *td2d = *td2dv;
        int i;
 
        if (fcu == NULL)
@@ -3036,19 +3036,24 @@
                if (BEZSELECTED(bezt)) {
                        /* only add if on the right 'side' of the current frame 
*/
                        if (FrameOnMouseSide(side, bezt->vec[1][0], cfra)) {
-                               /* each control point needs to be added 
separetely */
-                               TimeToTransData(td, bezt->vec[0], adt);
-                               td++;
-
                                TimeToTransData(td, bezt->vec[1], adt);
-                               td++;
 
-                               TimeToTransData(td, bezt->vec[2], adt);
+                               /*set flags to move handles as necassary*/
+                               td->flag |= TD_MOVEHANDLE1|TD_MOVEHANDLE2;
+                               td2d->h1 = bezt->vec[0];
+                               td2d->h2 = bezt->vec[2];
+
+                               VECCOPY2D(td2d->ih1, td2d->h1);
+                               VECCOPY2D(td2d->ih2, td2d->h2);
+
                                td++;
+                               td2d++;
                        }
                }
        }
 
+       *td2dv = td2d;
+
        return td;
 }
 
@@ -3116,6 +3121,7 @@
 {
        Scene *scene= t->scene;
        TransData *td = NULL;
+       TransData2D *td2d = NULL;
        tGPFtransdata *tfd = NULL;
        
        bAnimContext ac;
@@ -3179,7 +3185,9 @@
        t->total= count;
        
        t->data= MEM_callocN(t->total*sizeof(TransData), "TransData(Action 
Editor)");
+       t->data2d= MEM_callocN(t->total*sizeof(TransData2D), "transdata2d");
        td= t->data;
+       td2d = t->data2d;
        
        if (ac.datatype == ANIMCONT_GPENCIL) {
                if (t->mode == TFM_TIME_SLIDE) {
@@ -3216,7 +3224,7 @@
                        else
                                cfra = (float)CFRA;
                        
-                       td= FCurveToTransData(td, fcu, adt, t->frame_side, 
cfra);
+                       td= ActionFCurveToTransData(td, &td2d, fcu, adt, 
t->frame_side, cfra);
                //}
        }
        
@@ -3248,8 +3256,11 @@
 /* Helper function for createTransGraphEditData, which is reponsible for 
associating
  * source data with transform data
  */
-static void bezt_to_transdata (TransData *td, TransData2D *td2d, AnimData 
*adt, float *loc, float *cent, short selected, short ishandle, short intvals)
+static void bezt_to_transdata (TransData *td, TransData2D *td2d, AnimData 
*adt, BezTriple *bezt, int bi, short selected, short ishandle, short intvals)
 {
+       float *loc = bezt->vec[bi];
+       float *cent = bezt->vec[1];
+
        /* New location from td gets dumped onto the old-location of td2d, 
which then
         * gets copied to the actual data at td2d->loc2d (bezt->vec[n])
         *
@@ -3280,7 +3291,17 @@
                VECCOPY(td->center, cent);
                VECCOPY(td->iloc, td->loc);
        }
-       
+
+       if (td->flag & TD_MOVEHANDLE1) {
+               td2d->h1 = bezt->vec[0];
+               VECCOPY2D(td2d->ih1, td2d->h1);
+       } else td2d->h1 = NULL;
+
+       if (td->flag & TD_MOVEHANDLE2) {
+               td2d->h2 = bezt->vec[2];
+               VECCOPY2D(td2d->ih2, td2d->h2);
+       } else td2d->h2 = NULL;
+
        memset(td->axismtx, 0, sizeof(td->axismtx));
        td->axismtx[2][2] = 1.0f;
        
@@ -3300,7 +3321,7 @@
                td->flag |= TD_NOTIMESNAP;
        if (intvals)
                td->flag |= TD_INTVALUES;
-       
+
        unit_m3(td->mtx);
        unit_m3(td->smtx);
 }
@@ -3362,11 +3383,11 @@
                /* F-Curve may not have any keyframes */
                if (fcu->bezt == NULL)
                        continue;
-               
+
                /* only include BezTriples whose 'keyframe' occurs on the same 
side of the current frame as mouse */
                for (i=0, bezt=fcu->bezt; i < fcu->totvert; i++, bezt++) {
                        if (FrameOnMouseSide(t->frame_side, bezt->vec[1][0], 
cfra)) {
-                               if (sipo->around == V3D_LOCAL) {

@@ 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