Graph Editor: Jump to Keyframes Operator now also sets the cursor value
authorJoshua Leung <aligorith@gmail.com>
Thu, 22 Oct 2009 09:15:56 +0000 (09:15 +0000)
committerJoshua Leung <aligorith@gmail.com>
Thu, 22 Oct 2009 09:15:56 +0000 (09:15 +0000)
source/blender/editors/animation/keyframes_edit.c
source/blender/editors/space_graph/graph_edit.c

index 7373edb6841e4756d45a42c27b961d643bd7ec41..7a167cb6c0c09cb427187f978054dd7e2b07bb11 100644 (file)
@@ -521,9 +521,14 @@ short bezt_calc_average(BeztEditData *bed, BezTriple *bezt)
 {
        /* only if selected */
        if (bezt->f2 & SELECT) {
-               /* store average time in float (only do rounding at last step */
+               /* store average time in float 1 (only do rounding at last step) */
                bed->f1 += bezt->vec[1][0];
                
+               /* store average value in float 2 (only do rounding at last step) 
+                *      - this isn't always needed, but some operators may also require this
+                */
+               bed->f2 += bezt->vec[1][1];
+               
                /* increment number of items */
                bed->i1++;
        }
@@ -682,7 +687,7 @@ static short mirror_bezier_value(BeztEditData *bed, BezTriple *bezt)
        return 0;
 }
 
-/* Note: for markers case, need to set global vars (eww...) */
+/* Note: for markers and 'value', the values to use must be supplied as the first float value */
 // calchandles_fcurve
 BeztEditFunc ANIM_editkeyframes_mirror(short type)
 {
index a87cc54fad927b3f9c397081bbe4d24e8e0b9bed..442b44bb482c14c2c213f72e5863b99b0ed34987 100644 (file)
@@ -1419,10 +1419,14 @@ static int graphkeys_framejump_exec(bContext *C, wmOperator *op)
        
        BLI_freelistN(&anim_data);
        
-       /* set the new current frame value, based on the average time */
+       /* set the new current frame and cursor values, based on the average time and value */
        if (bed.i1) {
+               SpaceIpo *sipo= ac.sa->spacedata.first;
                Scene *scene= ac.scene;
+               
+               /* take the average values, rounding to the nearest int for the current frame */
                CFRA= (int)floor((bed.f1 / bed.i1) + 0.5f);
+               sipo->cursorVal= bed.f2 / (float)bed.i1;
        }
        
        /* set notifier that things have changed */