summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2015-11-27 16:41:26 -0500
committerPaul Davis <paul@linuxaudiosystems.com>2015-11-27 16:41:26 -0500
commitbbaa5c6f45906dcf91072cf6d9a8fff96b3ac3b5 (patch)
tree2bb4d30b4dd405a583c658d0ea77ffe114a9d014 /libs
parent779ec041b598480d9d1b7595c3dbc605bcb70263 (diff)
faderport: shift+encoder controls pan width (for ardour only), input trim now controlled by user+encoder.
User is now a modifier key
Diffstat (limited to 'libs')
-rw-r--r--libs/surfaces/faderport/faderport.cc25
-rw-r--r--libs/surfaces/faderport/faderport.h4
-rw-r--r--libs/surfaces/faderport/operations.cc25
3 files changed, 48 insertions, 6 deletions
diff --git a/libs/surfaces/faderport/faderport.cc b/libs/surfaces/faderport/faderport.cc
index 6111a4ef95..9ec34f0d43 100644
--- a/libs/surfaces/faderport/faderport.cc
+++ b/libs/surfaces/faderport/faderport.cc
@@ -286,6 +286,9 @@ FaderPort::switch_handler (MIDI::Parser &, MIDI::EventTwoBytes* tb)
case Rewind:
button_state = (tb->value ? ButtonState (button_state|RewindDown) : ButtonState (button_state&~RewindDown));
break;
+ case User:
+ button_state = (tb->value ? ButtonState (button_state|UserDown) : ButtonState (button_state&~UserDown));
+ break;
case FaderTouch:
fader_is_touched = tb->value;
if (_current_route) {
@@ -348,16 +351,30 @@ FaderPort::encoder_handler (MIDI::Parser &, MIDI::pitchbend_t pb)
if (_current_route) {
- if ( (button_state & ShiftDown) == ShiftDown ) { //shift+encoder = input trim
+ ButtonState trim_modifier;
+ ButtonState width_modifier;
+
+ if (Profile->get_mixbus()) {
+ trim_modifier = ShiftDown;
+ width_modifier = ButtonState (0);
+ } else {
+ trim_modifier = UserDown;
+ width_modifier = ShiftDown;
+ }
+
+ if ((button_state & trim_modifier) == trim_modifier ) { // mod+encoder = input trim
boost::shared_ptr<AutomationControl> gain = _current_route->trim()->gain_control ();
if (gain) {
float val = gain->get_user(); //for gain elements, the "user" value is in dB
val += delta;
gain->set_user(val);
}
- } else { //pan / balance
+ } else if (width_modifier && ((button_state & width_modifier) == width_modifier)) {
+ ardour_pan_width (delta);
+
+ } else { // pan/balance
if (!Profile->get_mixbus()) {
- ardour_pan (delta);
+ ardour_pan_azimuth (delta);
} else {
mixbus_pan (delta);
}
@@ -820,7 +837,7 @@ FaderPort::set_current_route (boost::shared_ptr<Route> r)
mp->cut_control()->Changed.connect (route_connections, MISSING_INVALIDATOR, boost::bind (&FaderPort::map_cut, this), this);
}
}
-
+
//ToDo: subscribe to the fader automation modes so we can light the LEDs
map_route_state ();
diff --git a/libs/surfaces/faderport/faderport.h b/libs/surfaces/faderport/faderport.h
index 3af6280e2e..14b8e5c3f6 100644
--- a/libs/surfaces/faderport/faderport.h
+++ b/libs/surfaces/faderport/faderport.h
@@ -172,6 +172,7 @@ class FaderPort : public ARDOUR::ControlProtocol, public AbstractUI<FaderPortReq
ShiftDown = 0x1,
RewindDown = 0x2,
StopDown = 0x4,
+ UserDown = 0x8,
};
ButtonState button_state;
@@ -279,7 +280,8 @@ class FaderPort : public ARDOUR::ControlProtocol, public AbstractUI<FaderPortReq
void mute ();
void rec_enable ();
- void ardour_pan (int);
+ void ardour_pan_azimuth (int);
+ void ardour_pan_width (int);
void mixbus_pan (int);
};
diff --git a/libs/surfaces/faderport/operations.cc b/libs/surfaces/faderport/operations.cc
index 73a8e25f51..9693986e00 100644
--- a/libs/surfaces/faderport/operations.cc
+++ b/libs/surfaces/faderport/operations.cc
@@ -208,7 +208,7 @@ FaderPort::use_monitor ()
}
void
-FaderPort::ardour_pan (int delta)
+FaderPort::ardour_pan_azimuth (int delta)
{
if (!_current_route) {
return;
@@ -229,6 +229,29 @@ FaderPort::ardour_pan (int delta)
azimuth->set_value (azimuth->interface_to_internal (azimuth->internal_to_interface (azimuth->get_value()) + (delta / 64.0)));
}
+
+void
+FaderPort::ardour_pan_width(int delta)
+{
+ if (!_current_route) {
+ return;
+ }
+
+ boost::shared_ptr<Pannable> pannable = _current_route->pannable ();
+
+ if (!pannable) {
+ return;
+ }
+
+ boost::shared_ptr<AutomationControl> width = pannable->pan_width_control;
+
+ if (!width) {
+ return;
+ }
+
+ width->set_value (width->interface_to_internal (width->internal_to_interface (width->get_value()) + (delta / 64.0)));
+}
+
void
FaderPort::mixbus_pan (int delta)
{