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:
parent
b017e2b236
commit
d99311d21b
@ -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"
|
||||
|
@ -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);
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user