return ret;
}
+int
+OSC::fake_touch (boost::shared_ptr<ARDOUR::AutomationControl> ctrl)
+{
+ if (ctrl) {
+ //start touch
+ if (!ctrl->touching ()) {
+ ctrl->start_touch (ctrl->session().transport_frame());
+ }
+ _touch_timeout[ctrl] = 10;
+ }
+
+ return 0;
+}
+
int
OSC::route_mute (int ssid, int yn, lo_message msg)
{
if (s) {
if (s->gain_control()) {
+ fake_touch (s->gain_control());
s->gain_control()->set_value (level, PBD::Controllable::NoGroup);
} else {
return 1;
abs = dB_to_coefficient (val);
}
if (s->gain_control()) {
+ fake_touch (s->gain_control());
s->gain_control()->set_value (abs, PBD::Controllable::NoGroup);
return 0;
}
float abs;
abs = slider_position_to_gain_with_max (val, 2.0);
if (s->gain_control()) {
+ fake_touch (s->gain_control());
s->gain_control()->set_value (abs, PBD::Controllable::NoGroup);
return 0;
}
co->tick();
}
}
+ for (FakeTouchMap::iterator x = _touch_timeout.begin(); x != _touch_timeout.end();) {
+ _touch_timeout[(*x).first] = (*x).second - 1;
+ if (!(*x).second) {
+ boost::shared_ptr<ARDOUR::AutomationControl> ctrl = (*x).first;
+ // turn touch off
+ ctrl->stop_touch (true, ctrl->session().transport_frame());
+ x = _touch_timeout.erase (x);
+ } else {
+ ++x;
+ }
+ }
return true;
}
typedef std::vector<boost::shared_ptr<ARDOUR::Stripable> > Sorted;
Sorted get_sorted_stripables(std::bitset<32> types, bool cue);
+ typedef std::map<boost::shared_ptr<ARDOUR::AutomationControl>, uint32_t> FakeTouchMap;
+ FakeTouchMap _touch_timeout;
// keep a surface's global setup by remote server url
struct OSCSurface {
int set_automation (const char *path, lo_arg **argv, int argc, lo_message msg);
int touch_detect (const char *path, lo_arg **argv, int argc, lo_message msg);
+ int fake_touch (boost::shared_ptr<ARDOUR::AutomationControl> ctrl);
int route_get_sends (lo_message msg);
int route_get_receives(lo_message msg);