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:
parent
779ec041b5
commit
bbaa5c6f45
@ -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 ();
|
||||
|
@ -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);
|
||||
};
|
||||
|
||||
|
@ -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)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user