Fix #29073: keyframing integer properties now uses linear interpolation
authorBrecht Van Lommel <brechtvanlommel@pandora.be>
Fri, 2 Dec 2011 19:49:09 +0000 (19:49 +0000)
committerBrecht Van Lommel <brechtvanlommel@pandora.be>
Fri, 2 Dec 2011 19:49:09 +0000 (19:49 +0000)
by default, and enums use constant interpolation. Bezier doesn't make
much sense for these.

source/blender/editors/animation/keyframing.c

index 9f466ef52d303babaac9b7ee799fb6abaa172054..4595bf3f64fd0d0917e8462406eb7db769c9463f 100644 (file)
@@ -310,10 +310,17 @@ int insert_vert_fcurve (FCurve *fcu, float x, float y, short flag)
        beztr.vec[1][1]= y;
        beztr.vec[2][0]= x+1.0f;
        beztr.vec[2][1]= y;
-       beztr.ipo= U.ipo_new; /* use default interpolation mode here... */
        beztr.f1= beztr.f2= beztr.f3= SELECT;
        beztr.h1= beztr.h2= U.keyhandles_new; /* use default handle type here */
        //BEZKEYTYPE(&beztr)= scene->keytype; /* default keyframe type */
+
+       /* use default interpolation mode, with exceptions for int/discrete values */
+       beztr.ipo= U.ipo_new;
+
+       if(fcu->flag & FCURVE_DISCRETE_VALUES)
+               beztr.ipo = BEZT_IPO_CONST;
+       else if(beztr.ipo == BEZT_IPO_BEZ && (fcu->flag & FCURVE_INT_VALUES))
+               beztr.ipo = BEZT_IPO_LIN;
        
        /* add temp beztriple to keyframes */
        a= insert_bezt_fcurve(fcu, &beztr, flag);