summaryrefslogtreecommitdiff
path: root/libs/surfaces
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2015-12-14 13:28:24 -0500
committerPaul Davis <paul@linuxaudiosystems.com>2015-12-14 13:28:31 -0500
commitd59739d728870843b39901a48216fe9109be6641 (patch)
tree839d2745486bc650f2d23c5eb7dd2abfc0ef2388 /libs/surfaces
parent40a352e8a1d6c4d91f06d542a2851346bc887cb6 (diff)
faderport: add 100msec (10Hz) periodic update to facilitate automation playback
Diffstat (limited to 'libs/surfaces')
-rw-r--r--libs/surfaces/faderport/faderport.cc20
-rw-r--r--libs/surfaces/faderport/faderport.h3
2 files changed, 23 insertions, 0 deletions
diff --git a/libs/surfaces/faderport/faderport.cc b/libs/surfaces/faderport/faderport.cc
index 46ff569c43..1f5352fdec 100644
--- a/libs/surfaces/faderport/faderport.cc
+++ b/libs/surfaces/faderport/faderport.cc
@@ -560,6 +560,10 @@ FaderPort::set_active (bool yn)
blink_connection = blink_timeout->connect (sigc::mem_fun (*this, &FaderPort::blink));
blink_timeout->attach (main_loop()->get_context());
+ Glib::RefPtr<Glib::TimeoutSource> periodic_timeout = Glib::TimeoutSource::create (100); // milliseconds
+ periodic_connection = blink_timeout->connect (sigc::mem_fun (*this, &FaderPort::periodic));
+ periodic_timeout->attach (main_loop()->get_context());
+
} else {
BaseUI::quit ();
@@ -574,6 +578,22 @@ FaderPort::set_active (bool yn)
return 0;
}
+bool
+FaderPort::periodic ()
+{
+ if (!_current_route) {
+ return true;
+ }
+
+ ARDOUR::AutoState gain_state = _current_route->gain_control()->automation_state();
+
+ if (gain_state == ARDOUR::Touch || gain_state == ARDOUR::Play) {
+ map_gain ();
+ }
+
+ return true;
+}
+
void
FaderPort::stop_blinking (ButtonID id)
{
diff --git a/libs/surfaces/faderport/faderport.h b/libs/surfaces/faderport/faderport.h
index 9227f1f39f..6643e22369 100644
--- a/libs/surfaces/faderport/faderport.h
+++ b/libs/surfaces/faderport/faderport.h
@@ -281,6 +281,9 @@ class FaderPort : public ARDOUR::ControlProtocol, public AbstractUI<FaderPortReq
void map_recenable_state ();
void map_transport_state ();
+ sigc::connection periodic_connection;
+ bool periodic ();
+
sigc::connection blink_connection;
typedef std::list<ButtonID> Blinkers;
Blinkers blinkers;