diff options
author | Robin Gareus <robin@gareus.org> | 2018-07-18 10:48:03 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2018-07-18 10:57:57 +0200 |
commit | 14517e13ecb160511a36f0104f6e4b5210751fc7 (patch) | |
tree | 525de0d7ac1b0cf87f8a2f023987f99b0f285c60 /libs/ardour/parameter_descriptor.cc | |
parent | fa17364977030616072a0e5f35c9c024f5bf1899 (diff) |
Fix and tweak LV2:RangeStep
Explicit cast to float (rangestep is unsigned int) when calculating
interface steps.
Also prefer to round to nearest value-point (rather than round-down).
Diffstat (limited to 'libs/ardour/parameter_descriptor.cc')
-rw-r--r-- | libs/ardour/parameter_descriptor.cc | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/libs/ardour/parameter_descriptor.cc b/libs/ardour/parameter_descriptor.cc index 0bc81fa064..200987db8f 100644 --- a/libs/ardour/parameter_descriptor.cc +++ b/libs/ardour/parameter_descriptor.cc @@ -207,9 +207,9 @@ ParameterDescriptor::update_steps() largestep = (powf (delta, std::max (0.5f, 10.f / (float)rangesteps)) - 1.f) * lower; } else if (integer_step) { smallstep = step = 1.0; - largestep = std::max(1.f, rintf (delta / (rangesteps - 1))); + largestep = std::max(1.f, rintf (delta / (rangesteps - 1.f))); } else { - step = smallstep = delta / (rangesteps - 1); + step = smallstep = delta / (rangesteps - 1.f); largestep = std::min ((delta / 4.0f), 10.f * smallstep); // XXX } } else { @@ -387,7 +387,7 @@ ParameterDescriptor::from_interface (float val) const val = floor (lower + val * (1.f + upper - lower)); } else if (rangesteps > 1) { /* similar to above, but for float controls */ - val = floor (val * (rangesteps - 1.f)) / (rangesteps - 1.f); // XXX + val = round (val * (rangesteps - 1.f)) / (rangesteps - 1.f); // XXX val = val * (upper - lower) + lower; } else { val = val * (upper - lower) + lower; |