mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-19 05:06:31 +01:00
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
3 changed files with 35 additions and 2 deletions
|
|
@ -20,6 +20,7 @@
|
||||||
#include "ardour/lv2_plugin.h"
|
#include "ardour/lv2_plugin.h"
|
||||||
#include "ardour/plugin_manager.h"
|
#include "ardour/plugin_manager.h"
|
||||||
#include "ardour/processor.h"
|
#include "ardour/processor.h"
|
||||||
|
#include "ardour/session.h"
|
||||||
|
|
||||||
#include "ardour_ui.h"
|
#include "ardour_ui.h"
|
||||||
#include "gui_thread.h"
|
#include "gui_thread.h"
|
||||||
|
|
@ -68,13 +69,32 @@ LV2PluginUI::write_to_ui(void* controller,
|
||||||
const void* buffer)
|
const void* buffer)
|
||||||
{
|
{
|
||||||
LV2PluginUI* me = (LV2PluginUI*)controller;
|
LV2PluginUI* me = (LV2PluginUI*)controller;
|
||||||
|
|
||||||
if (me->_inst) {
|
if (me->_inst) {
|
||||||
suil_instance_port_event((SuilInstance*)me->_inst,
|
suil_instance_port_event((SuilInstance*)me->_inst,
|
||||||
port_index, buffer_size, format, buffer);
|
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
|
void
|
||||||
LV2PluginUI::update_timeout()
|
LV2PluginUI::update_timeout()
|
||||||
{
|
{
|
||||||
|
|
@ -196,7 +216,12 @@ LV2PluginUI::lv2ui_instantiate(const std::string& title)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ui_host) {
|
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)
|
const char* container_type = (is_external_ui)
|
||||||
? NS_UI "external"
|
? NS_UI "external"
|
||||||
|
|
|
||||||
|
|
@ -94,6 +94,12 @@ class LV2PluginUI : public PlugUIBase, public Gtk::VBox
|
||||||
uint32_t format,
|
uint32_t format,
|
||||||
const void* buffer);
|
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 update_timeout();
|
||||||
|
|
||||||
void lv2ui_instantiate(const std::string& title);
|
void lv2ui_instantiate(const std::string& title);
|
||||||
|
|
|
||||||
|
|
@ -265,6 +265,8 @@ def configure(conf):
|
||||||
if conf.is_defined('HAVE_LILV'):
|
if conf.is_defined('HAVE_LILV'):
|
||||||
autowaf.check_pkg(conf, 'suil-0', uselib_store='SUIL',
|
autowaf.check_pkg(conf, 'suil-0', uselib_store='SUIL',
|
||||||
atleast_version='0.2.0', mandatory=False)
|
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',
|
# autowaf.check_pkg(conf, 'soundtouch-1.0', uselib_store='SOUNDTOUCH',
|
||||||
# mandatory=False)
|
# mandatory=False)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue