summaryrefslogtreecommitdiff
path: root/gtk2_ardour/lv2_plugin_ui.cc
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2012-04-11 04:53:47 +0000
committerDavid Robillard <d@drobilla.net>2012-04-11 04:53:47 +0000
commitd99311d21ba47338920abdb0acf3f95cf9ad8639 (patch)
tree87c6172311e9f0f5b58b7e55803f741150702bc3 /gtk2_ardour/lv2_plugin_ui.cc
parentb017e2b236694bdec6ad6b8475f0c72b1167e454 (diff)
Implement ui:portIndex and ui:touch features.
Touch should allow custom plugin UIs to work properly with automation as the generic UI does. IIRC this was requested for mixbus, however, no current plugin UI I am aware of implements it, so it is completely untested. git-svn-id: svn://localhost/ardour2/branches/3.0@11888 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/lv2_plugin_ui.cc')
-rw-r--r--gtk2_ardour/lv2_plugin_ui.cc29
1 files changed, 27 insertions, 2 deletions
diff --git a/gtk2_ardour/lv2_plugin_ui.cc b/gtk2_ardour/lv2_plugin_ui.cc
index dec02a7ebc..96f2a182b7 100644
--- a/gtk2_ardour/lv2_plugin_ui.cc
+++ b/gtk2_ardour/lv2_plugin_ui.cc
@@ -20,6 +20,7 @@
#include "ardour/lv2_plugin.h"
#include "ardour/plugin_manager.h"
#include "ardour/processor.h"
+#include "ardour/session.h"
#include "ardour_ui.h"
#include "gui_thread.h"
@@ -68,13 +69,32 @@ LV2PluginUI::write_to_ui(void* controller,
const void* buffer)
{
LV2PluginUI* me = (LV2PluginUI*)controller;
-
if (me->_inst) {
suil_instance_port_event((SuilInstance*)me->_inst,
port_index, buffer_size, format, buffer);
}
}
+uint32_t
+LV2PluginUI::port_index(void* controller, const char* symbol)
+{
+ return ((LV2PluginUI*)controller)->_lv2->port_index(symbol);
+}
+
+void
+LV2PluginUI::touch(void* controller,
+ uint32_t port_index,
+ bool grabbed)
+{
+ LV2PluginUI* me = (LV2PluginUI*)controller;
+ ControllableRef control = me->_controllables[port_index];
+ if (grabbed) {
+ control->start_touch(control->session().transport_frame());
+ } else {
+ control->stop_touch(false, control->session().transport_frame());
+ }
+}
+
void
LV2PluginUI::update_timeout()
{
@@ -196,7 +216,12 @@ LV2PluginUI::lv2ui_instantiate(const std::string& title)
}
if (!ui_host) {
- ui_host = suil_host_new(LV2PluginUI::write_from_ui, NULL, NULL, NULL);
+ ui_host = suil_host_new(LV2PluginUI::write_from_ui,
+ LV2PluginUI::port_index,
+ NULL, NULL);
+#ifdef HAVE_NEW_SUIL
+ suil_host_set_touch_func(ui_host, LV2PluginUI::touch);
+#endif
}
const char* container_type = (is_external_ui)
? NS_UI "external"