update Evoral::Curve to honor ControlList::InterpolationStyle
authorRobin Gareus <robin@gareus.org>
Fri, 30 May 2014 15:00:28 +0000 (17:00 +0200)
committerRobin Gareus <robin@gareus.org>
Fri, 30 May 2014 15:00:28 +0000 (17:00 +0200)
libs/evoral/src/Curve.cpp

index 239339e50820de1c802df305df9f02cb2d1f0461..20cc5d9ec3a088b9f5ca311621d08f9c1e97e9b0 100644 (file)
@@ -402,17 +402,14 @@ Curve::multipoint_eval (double x)
 
                double tdelta = x - before->when;
                double trange = after->when - before->when;
-#if 1 // Linear Interpolation
-               return before->value + (vdelta * (tdelta / trange));
-#else // cubic spline
-               if (!after->coeff) {
-                       return before->value + (vdelta * (tdelta / trange));
+
+               if (_list.interpolation() == ControlList::Curved && after->coeff) {
+                               ControlEvent* ev = after;
+                               double x2 = x * x;
+                               return ev->coeff[0] + (ev->coeff[1] * x) + (ev->coeff[2] * x2) + (ev->coeff[3] * x2 * x);
                } else {
-                       ControlEvent* ev = after;
-                       double x2 = x * x;
-                       return ev->coeff[0] + (ev->coeff[1] * x) + (ev->coeff[2] * x2) + (ev->coeff[3] * x2 * x);
+                       return before->value + (vdelta * (tdelta / trange));
                }
-#endif
        }
 
        /* x is a control point in the data */