diff options
author | Robin Gareus <robin@gareus.org> | 2014-11-30 15:02:53 +0100 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2014-11-30 15:05:39 +0100 |
commit | 0622fc9d4b3589ef00a09a5f69515d8619fa051f (patch) | |
tree | 926ab9df279133462fc2f80389899f0962886e0e /libs/ardour/ardour/parameter_descriptor.h | |
parent | bd85c8ec43b540ca5b98e61dee0c20f295be5b56 (diff) |
update_steps(), properly handle integer ranges
Diffstat (limited to 'libs/ardour/ardour/parameter_descriptor.h')
-rw-r--r-- | libs/ardour/ardour/parameter_descriptor.h | 28 |
1 files changed, 16 insertions, 12 deletions
diff --git a/libs/ardour/ardour/parameter_descriptor.h b/libs/ardour/ardour/parameter_descriptor.h index 659304fb60..41b1f031d1 100644 --- a/libs/ardour/ardour/parameter_descriptor.h +++ b/libs/ardour/ardour/parameter_descriptor.h @@ -47,9 +47,9 @@ struct ParameterDescriptor , normal(parameter.normal()) , lower(parameter.min()) , upper(parameter.max()) - , step((upper - lower) / 100.0f) - , smallstep((upper - lower) / 1000.0f) - , largestep((upper - lower) / 10.0f) + , step(0) + , smallstep(0) + , largestep(0) , integer_step(parameter.type() >= MidiCCAutomation && parameter.type() <= MidiChannelPressureAutomation) , toggled(parameter.toggled()) @@ -62,6 +62,7 @@ struct ParameterDescriptor if (parameter.type() == GainAutomation) { unit = DB; } + update_steps(); } ParameterDescriptor() @@ -83,24 +84,27 @@ struct ParameterDescriptor , enumeration(false) {} - /// Set step, smallstep, and largestep, based on current description + /* Set step, smallstep, and largestep, based on current description */ void update_steps() { if (unit == ParameterDescriptor::MIDI_NOTE) { step = smallstep = 1; // semitone largestep = 12; // octave - } else { + } else if (integer_step) { const float delta = upper - lower; - step = delta / 1000.0f; smallstep = delta / 10000.0f; - largestep = delta / 10.0f; + step = delta / 1000.0f; + largestep = delta / 40.0f; - if (integer_step) { - step = rint(step); - largestep = rint(largestep); - // leave smallstep alone for fine tuning - } + smallstep = std::max(1.0, rint(smallstep)); + step = std::max(1.0, rint(step)); + largestep = std::max(1.0, rint(largestep)); } + /* else: leave all others as default '0' + * in that case the UI (eg. AutomationController::create) + * uses internal_to_interface() to map the value + * to an appropriate interface range + */ } std::string label; |