13
0

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
This commit is contained in:
David Robillard 2012-04-11 04:53:47 +00:00
parent b017e2b236
commit d99311d21b
3 changed files with 35 additions and 2 deletions

View File

@ -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"

View File

@ -94,6 +94,12 @@ class LV2PluginUI : public PlugUIBase, public Gtk::VBox
uint32_t format,
const void* buffer);
static uint32_t port_index(void* controller, const char* symbol);
static void touch(void* controller,
uint32_t port_index,
bool grabbed);
void update_timeout();
void lv2ui_instantiate(const std::string& title);

View File

@ -265,6 +265,8 @@ def configure(conf):
if conf.is_defined('HAVE_LILV'):
autowaf.check_pkg(conf, 'suil-0', uselib_store='SUIL',
atleast_version='0.2.0', mandatory=False)
autowaf.check_pkg(conf, 'suil-0', uselib_store='NEW_SUIL',
atleast_version='0.5.0', mandatory=False)
# autowaf.check_pkg(conf, 'soundtouch-1.0', uselib_store='SOUNDTOUCH',
# mandatory=False)