OSC: Add fake timeout based touch
This commit is contained in:
parent
d3738b087e
commit
84e1a216bc
@ -2349,6 +2349,20 @@ OSC::touch_detect (const char *path, lo_arg **argv, int argc, lo_message msg)
|
|||||||
return ret;
|
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
|
int
|
||||||
OSC::route_mute (int ssid, int yn, lo_message msg)
|
OSC::route_mute (int ssid, int yn, lo_message msg)
|
||||||
{
|
{
|
||||||
@ -2834,6 +2848,7 @@ OSC::route_set_gain_abs (int ssid, float level, lo_message msg)
|
|||||||
|
|
||||||
if (s) {
|
if (s) {
|
||||||
if (s->gain_control()) {
|
if (s->gain_control()) {
|
||||||
|
fake_touch (s->gain_control());
|
||||||
s->gain_control()->set_value (level, PBD::Controllable::NoGroup);
|
s->gain_control()->set_value (level, PBD::Controllable::NoGroup);
|
||||||
} else {
|
} else {
|
||||||
return 1;
|
return 1;
|
||||||
@ -2882,6 +2897,7 @@ OSC::sel_gain (float val, lo_message msg)
|
|||||||
abs = dB_to_coefficient (val);
|
abs = dB_to_coefficient (val);
|
||||||
}
|
}
|
||||||
if (s->gain_control()) {
|
if (s->gain_control()) {
|
||||||
|
fake_touch (s->gain_control());
|
||||||
s->gain_control()->set_value (abs, PBD::Controllable::NoGroup);
|
s->gain_control()->set_value (abs, PBD::Controllable::NoGroup);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -2918,6 +2934,7 @@ OSC::sel_fader (float val, lo_message msg)
|
|||||||
float abs;
|
float abs;
|
||||||
abs = slider_position_to_gain_with_max (val, 2.0);
|
abs = slider_position_to_gain_with_max (val, 2.0);
|
||||||
if (s->gain_control()) {
|
if (s->gain_control()) {
|
||||||
|
fake_touch (s->gain_control());
|
||||||
s->gain_control()->set_value (abs, PBD::Controllable::NoGroup);
|
s->gain_control()->set_value (abs, PBD::Controllable::NoGroup);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -3952,6 +3969,17 @@ OSC::periodic (void)
|
|||||||
co->tick();
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -110,6 +110,8 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
|
|||||||
|
|
||||||
typedef std::vector<boost::shared_ptr<ARDOUR::Stripable> > Sorted;
|
typedef std::vector<boost::shared_ptr<ARDOUR::Stripable> > Sorted;
|
||||||
Sorted get_sorted_stripables(std::bitset<32> types, bool cue);
|
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
|
// keep a surface's global setup by remote server url
|
||||||
struct OSCSurface {
|
struct OSCSurface {
|
||||||
@ -232,6 +234,7 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
|
|||||||
|
|
||||||
int set_automation (const char *path, lo_arg **argv, int argc, lo_message msg);
|
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 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_sends (lo_message msg);
|
||||||
int route_get_receives(lo_message msg);
|
int route_get_receives(lo_message msg);
|
||||||
|
Loading…
Reference in New Issue
Block a user