Fix computation of AutomationController steps
authorRobin Gareus <robin@gareus.org>
Sun, 24 Sep 2017 19:10:31 +0000 (21:10 +0200)
committerJulien "_FrnchFrgg_" RIVAUD <frnchfrgg@free.fr>
Sun, 24 Sep 2017 20:58:59 +0000 (22:58 +0200)
smallstep (resp. largestep) is intended to be the interface delta
corresponding to a desc.smallstep (resp. largestep) in internal scale,
and is computed by incrementing from desc.lower.

But ac->internal_to_interface(desc.lower) isn't necessarily zero. In
fact it currently is 0.5 / (M - m + 1) for integer parameters where M is
the maximum and m is the minimum possible value since it is the center
of the [0,1/(M-m+1)] interval.

Since the lower bound of the delta isn't always zero, don't ignore it
when computing the actual increment.

gtk2_ardour/automation_controller.cc

index ac4fcc253ec18c58c0b66457accc5daca7e9696f..5502cf50017f137364f0b3e1e40698d991b75a99 100644 (file)
@@ -142,8 +142,8 @@ AutomationController::create(const Evoral::Parameter&             param,
        const double lo        = ac->internal_to_interface(desc.lower);
        const double up        = ac->internal_to_interface(desc.upper);
        const double normal    = ac->internal_to_interface(desc.normal);
-       const double smallstep = ac->internal_to_interface(desc.lower + desc.smallstep);
-       const double largestep = ac->internal_to_interface(desc.lower + desc.largestep);
+       const double smallstep = ac->internal_to_interface(desc.lower + desc.smallstep) - lo;
+       const double largestep = ac->internal_to_interface(desc.lower + desc.largestep) - lo;
 
        Gtk::Adjustment* adjustment = manage (
                new Gtk::Adjustment (normal, lo, up, smallstep, largestep));