From 87ab1625ffae87769ee973e6ebee2723daf8ee89 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Wed, 21 Sep 2016 19:25:36 -0500 Subject: [PATCH] push2: volume pots now work like non-linear faders, as desired --- libs/surfaces/push2/knob.cc | 1 + libs/surfaces/push2/mix.cc | 11 ++++++++++- 2 files changed, 11 insertions(+), 1 deletion(-) 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 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); + } } }