summaryrefslogtreecommitdiff
path: root/libs/ardour/parameter_descriptor.cc
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2017-06-21 14:41:40 +0200
committerRobin Gareus <robin@gareus.org>2017-06-21 18:13:26 +0200
commit7ab15def2be8bbf156442918e4b8e5f21c8962ba (patch)
tree2462b5fa834df167566f32a9029fd46690cf091c /libs/ardour/parameter_descriptor.cc
parentdf6655ac682ef99f4d637520d8d1bf8aa5b3beea (diff)
Consolidate ParameterDescriptor settings+ranges
Diffstat (limited to 'libs/ardour/parameter_descriptor.cc')
-rw-r--r--libs/ardour/parameter_descriptor.cc29
1 files changed, 26 insertions, 3 deletions
diff --git a/libs/ardour/parameter_descriptor.cc b/libs/ardour/parameter_descriptor.cc
index a63c90d1db..310ec1a483 100644
--- a/libs/ardour/parameter_descriptor.cc
+++ b/libs/ardour/parameter_descriptor.cc
@@ -143,6 +143,17 @@ ParameterDescriptor::ParameterDescriptor()
void
ParameterDescriptor::update_steps()
{
+ /* sanitize flags */
+ if (toggled || enumeration) {
+ logarithmic = false;
+ }
+ if (logarithmic && (upper <= lower || lower * upper <= 0)) {
+ logarithmic = false;
+ }
+ if (rangesteps < 2) {
+ rangesteps = 0;
+ }
+
if (unit == ParameterDescriptor::MIDI_NOTE) {
step = smallstep = 1; // semitone
largestep = 12; // octave
@@ -153,10 +164,22 @@ ParameterDescriptor::update_steps()
largestep = position_to_gain (dB_coeff_step(upper));
step = position_to_gain (largestep / 10.0);
smallstep = step;
+ } else if (rangesteps > 1) {
+ const float delta = upper - lower;
+
+ step = smallstep = (delta / (rangesteps - 1)); // XXX
+ largestep = std::min ((delta / 5.0f), 10.f * smallstep); // XXX
+
+ if (logarithmic) {
+ smallstep = smallstep / logf (rangesteps); // XXX
+ step = step / logf (rangesteps);
+ largestep = largestep / logf (rangesteps);
+ } else if (integer_step) {
+ smallstep = 1.0;
+ step = std::max(1.f, rintf (rangesteps));
+ largestep = std::max(1.f, rintf (largestep));
+ }
} else {
- /* note that LV2Plugin::get_parameter_descriptor ()
- * overrides this is lv2:rangeStep is set for a port.
- */
const float delta = upper - lower;
/* 30 happens to be the total number of steps for a fader with default