summaryrefslogtreecommitdiff
path: root/libs/surfaces
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2016-09-21 19:25:36 -0500
committerPaul Davis <paul@linuxaudiosystems.com>2016-09-27 14:59:31 -0500
commit87ab1625ffae87769ee973e6ebee2723daf8ee89 (patch)
tree32e7b5a2fabe6fc4a442cb68fef562c5c09e55fb /libs/surfaces
parent6f2ac5d6addd1562667c51bdda64ba471cc23d31 (diff)
push2: volume pots now work like non-linear faders, as desired
Diffstat (limited to 'libs/surfaces')
-rw-r--r--libs/surfaces/push2/knob.cc1
-rw-r--r--libs/surfaces/push2/mix.cc11
2 files changed, 11 insertions, 1 deletions
diff --git a/libs/surfaces/push2/knob.cc b/libs/surfaces/push2/knob.cc
index 71edaf5b5c..29dffe31bb 100644
--- a/libs/surfaces/push2/knob.cc
+++ b/libs/surfaces/push2/knob.cc
@@ -23,6 +23,7 @@
#include "ardour/automation_control.h"
#include "ardour/dB.h"
+#include "ardour/utils.h"
#include "gtkmm2ext/gui_thread.h"
#include "gtkmm2ext/rgb_macros.h"
diff --git a/libs/surfaces/push2/mix.cc b/libs/surfaces/push2/mix.cc
index 169eec3140..bf08dad873 100644
--- a/libs/surfaces/push2/mix.cc
+++ b/libs/surfaces/push2/mix.cc
@@ -40,6 +40,7 @@
#include "ardour/midi_port.h"
#include "ardour/session.h"
#include "ardour/tempo.h"
+#include "ardour/utils.h"
#include "ardour/vca_manager.h"
#include "canvas/colors.h"
@@ -399,7 +400,15 @@ MixLayout::strip_vpot (int n, int delta)
boost::shared_ptr<Controllable> ac = knobs[n]->controllable();
if (ac) {
- ac->set_value (ac->get_value() + ((2.0/64.0) * delta), PBD::Controllable::UseGroup);
+ if (ac->is_gain_like()) {
+ /* 128 steps from fader position 0 to 1.0 ..
+ */
+ const double new_fader_position = min (1.0, max (0.0, ac->internal_to_interface (ac->get_value()) + ((1.0 / 128.0) * delta)));
+ ac->set_value (ac->interface_to_internal (new_fader_position), PBD::Controllable::UseGroup);
+ } else {
+ /* 128 steps from min to max */
+ ac->set_value (ac->get_value() + (((ac->upper() - ac->lower()) / 128.0) * delta) , PBD::Controllable::UseGroup);
+ }
}
}