diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2015-11-27 16:41:26 -0500 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2015-11-27 16:41:26 -0500 |
commit | bbaa5c6f45906dcf91072cf6d9a8fff96b3ac3b5 (patch) | |
tree | 2bb4d30b4dd405a583c658d0ea77ffe114a9d014 /libs | |
parent | 779ec041b598480d9d1b7595c3dbc605bcb70263 (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.cc | 25 | ||||
-rw-r--r-- | libs/surfaces/faderport/faderport.h | 4 | ||||
-rw-r--r-- | libs/surfaces/faderport/operations.cc | 25 |
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) { |