summaryrefslogtreecommitdiff
path: root/libs/surfaces/launch_control_xl/launch_control_xl.cc
diff options
context:
space:
mode:
authorTérence Clastres <t.clastres@gmail.com>2018-08-10 18:44:10 +0200
committerPaul Davis <paul@linuxaudiosystems.com>2018-08-13 13:57:06 -0400
commitdab2513d9f4bdfe30a6bc7c30cbe821b0fb9e75c (patch)
tree10779493485b2b3be8f198d4ac2d4be148ed1677 /libs/surfaces/launch_control_xl/launch_control_xl.cc
parenta0e75893e0ac2ce094556bbc952fc42916cd0b1b (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.cc11
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 );
}
}