summaryrefslogtreecommitdiff
path: root/libs/ardour/ardour/parameter_descriptor.h
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2014-11-30 15:02:53 +0100
committerRobin Gareus <robin@gareus.org>2014-11-30 15:05:39 +0100
commit0622fc9d4b3589ef00a09a5f69515d8619fa051f (patch)
tree926ab9df279133462fc2f80389899f0962886e0e /libs/ardour/ardour/parameter_descriptor.h
parentbd85c8ec43b540ca5b98e61dee0c20f295be5b56 (diff)
update_steps(), properly handle integer ranges
Diffstat (limited to 'libs/ardour/ardour/parameter_descriptor.h')
-rw-r--r--libs/ardour/ardour/parameter_descriptor.h28
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;