summaryrefslogtreecommitdiff
path: root/libs/ardour/parameter_descriptor.cc
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2018-07-18 10:48:03 +0200
committerRobin Gareus <robin@gareus.org>2018-07-18 10:57:57 +0200
commit14517e13ecb160511a36f0104f6e4b5210751fc7 (patch)
tree525de0d7ac1b0cf87f8a2f023987f99b0f285c60 /libs/ardour/parameter_descriptor.cc
parentfa17364977030616072a0e5f35c9c024f5bf1899 (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.cc6
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;