diff options
author | Térence Clastres <t.clastres@gmail.com> | 2018-08-10 18:44:10 +0200 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2018-08-13 13:57:06 -0400 |
commit | dab2513d9f4bdfe30a6bc7c30cbe821b0fb9e75c (patch) | |
tree | 10779493485b2b3be8f198d4ac2d4be148ed1677 /libs/surfaces/launch_control_xl/launch_control_xl.cc | |
parent | a0e75893e0ac2ce094556bbc952fc42916cd0b1b (diff) |
Add pick-up mode and use it for knobs and faders
The pick up mode ignores new controller values until they match with the current setting of the stripable's ac
Diffstat (limited to 'libs/surfaces/launch_control_xl/launch_control_xl.cc')
-rw-r--r-- | libs/surfaces/launch_control_xl/launch_control_xl.cc | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/libs/surfaces/launch_control_xl/launch_control_xl.cc b/libs/surfaces/launch_control_xl/launch_control_xl.cc index 0881d0647e..6f571794a8 100644 --- a/libs/surfaces/launch_control_xl/launch_control_xl.cc +++ b/libs/surfaces/launch_control_xl/launch_control_xl.cc @@ -444,6 +444,13 @@ LaunchControlXL::handle_button_message(Button* button, MIDI::EventTwoBytes* ev) } } +bool +LaunchControlXL::check_pick_up(Controller* controller, boost::shared_ptr<AutomationControl> ac) +{ + /* returns false until the controller value matches with the current setting of the stripable's ac */ + return ( abs( controller->value() / 127.0 - ac->internal_to_interface(ac->get_value()) ) < 0.007875 ); +} + void LaunchControlXL::handle_knob_message (Knob* knob) { @@ -462,7 +469,7 @@ LaunchControlXL::handle_knob_message (Knob* knob) ac = stripable[chan]->pan_azimuth_control(); } - if (ac) { + if (ac && check_pick_up(knob, ac)) { ac->set_value ( ac->interface_to_internal( knob->value() / 127.0), PBD::Controllable::UseGroup ); } } @@ -476,7 +483,7 @@ LaunchControlXL::handle_fader_message (Fader* fader) } boost::shared_ptr<AutomationControl> ac = stripable[fader->id()]->gain_control(); - if (ac) { + if (ac && check_pick_up(fader, ac)) { ac->set_value ( ac->interface_to_internal( fader->value() / 127.0), PBD::Controllable::UseGroup ); } } |