13
0

faderport: shift+encoder controls pan width (for ardour only), input trim now controlled by user+encoder.

User is now a modifier key
This commit is contained in:
Paul Davis 2015-11-27 16:41:26 -05:00
parent 779ec041b5
commit bbaa5c6f45
3 changed files with 48 additions and 6 deletions

View File

@ -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 ();

View File

@ -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);
};

View File

@ -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)
{