#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"
#include "lv2_plugin_ui.h"
-#include "lv2_ui.h"
+#include "lv2/lv2plug.in/ns/extensions/ui/ui.h"
#include <lilv/lilv.h>
#include <suil/suil.h>
const void* buffer)
{
LV2PluginUI* me = (LV2PluginUI*)controller;
- fprintf(stderr, "MESSAGE FROM PLUGIN %u BYTES\n", buffer_size);
- suil_instance_port_event((SuilInstance*)me->_inst,
- port_index, buffer_size, format, buffer);
+ 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;
+ if (port_index >= me->_controllables.size()) {
+ return;
+ }
+
+ 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
: PlugUIBase(pi)
, _lv2(lv2p)
, _gui_widget(NULL)
+ , _ardour_buttons_box(NULL)
, _values(NULL)
, _external_ui_ptr(NULL)
, _inst(NULL)
}
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);
+ suil_host_set_touch_func(ui_host, LV2PluginUI::touch);
}
const char* container_type = (is_external_ui)
? NS_UI "external"
_external_ui_ptr = NULL;
if (_inst) {
if (!is_external_ui) {
- Gtk::HBox* box = manage (new Gtk::HBox);
- box->set_spacing (6);
- box->set_border_width (6);
- box->pack_end (focus_button, false, false);
- box->pack_end (bypass_button, false, false, 10);
- box->pack_end (delete_button, false, false);
- box->pack_end (save_button, false, false);
- box->pack_end (add_button, false, false);
- box->pack_end (_preset_combo, false, false);
- box->show_all();
- pack_start(*box, false, false);
+ _ardour_buttons_box = manage (new Gtk::HBox);
+ _ardour_buttons_box->set_spacing (6);
+ _ardour_buttons_box->set_border_width (6);
+ _ardour_buttons_box->pack_end (focus_button, false, false);
+ _ardour_buttons_box->pack_end (bypass_button, false, false, 10);
+ _ardour_buttons_box->pack_end (delete_button, false, false);
+ _ardour_buttons_box->pack_end (save_button, false, false);
+ _ardour_buttons_box->pack_end (add_button, false, false);
+ _ardour_buttons_box->pack_end (_preset_combo, false, false);
+ _ardour_buttons_box->show_all();
+ pack_start(*_ardour_buttons_box, false, false);
GtkWidget* c_widget = (GtkWidget*)GET_WIDGET(_inst);
- _gui_widget = Glib::wrap(c_widget);
+ _gui_widget = Gtk::manage(Glib::wrap(c_widget));
_gui_widget->show_all();
pack_start(*_gui_widget, true, true);
} else {
}
if (_lv2->has_message_output()) {
+ _lv2->enable_ui_emmission();
ARDOUR_UI::instance()->RapidScreenUpdate.connect(
sigc::mem_fun(*this, &LV2PluginUI::update_timeout));
}
if (_gui_widget) {
remove (*_gui_widget);
+ _gui_widget = NULL;
}
- suil_instance_free((SuilInstance*)_inst);
-
- _inst = NULL;
- _gui_widget = NULL;
+ if (_inst) {
+ suil_instance_free((SuilInstance*)_inst);
+ _inst = NULL;
+ }
}
LV2PluginUI::~LV2PluginUI ()
return r.width;
}
+bool
+LV2PluginUI::resizable()
+{
+ return _lv2->ui_is_resizable();
+}
+
int
LV2PluginUI::package(Gtk::Window& win)
{