summaryrefslogtreecommitdiffstats
path: root/src/client/PluginUI.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/PluginUI.cpp')
-rw-r--r--src/client/PluginUI.cpp79
1 files changed, 39 insertions, 40 deletions
diff --git a/src/client/PluginUI.cpp b/src/client/PluginUI.cpp
index 18ff52a1..29ecfa74 100644
--- a/src/client/PluginUI.cpp
+++ b/src/client/PluginUI.cpp
@@ -21,6 +21,8 @@
#include "lv2/lv2plug.in/ns/ext/event/event.h"
#include "lv2/lv2plug.in/ns/ext/event/event-helpers.h"
+#include "slv2/ui.h"
+
#include "shared/LV2Atom.hpp"
#include "shared/LV2URIMap.hpp"
@@ -109,9 +111,7 @@ PluginUI::PluginUI(Ingen::Shared::World* world,
PluginUI::~PluginUI()
{
- if (_instance) {
- slv2_ui_instance_free(_instance);
- }
+ suil_instance_free(_instance);
}
@@ -120,48 +120,52 @@ PluginUI::create(Ingen::Shared::World* world,
SharedPtr<NodeModel> node,
SLV2Plugin plugin)
{
- SharedPtr<PluginUI> ret;
-
- SLV2Value gtk_gui_uri = slv2_value_new_uri(
- world->slv2_world(),
- "http://lv2plug.in/ns/extensions/ui#GtkUI");
-
- SLV2UIs uis = slv2_plugin_get_uis(plugin);
- SLV2UI ui = NULL;
-
- if (slv2_values_size(uis) > 0) {
- for (unsigned i=0; i < slv2_uis_size(uis); ++i) {
- SLV2UI this_ui = slv2_uis_get_at(uis, i);
- if (slv2_ui_is_a(this_ui, gtk_gui_uri)) {
- ui = this_ui;
- break;
- }
+ SharedPtr<PluginUI> ret(new PluginUI(world, node));
+ ret->_features = world->lv2_features()->lv2_features(world, node.get());
+
+ // Build Suil UI set for this plugin
+ const char* const plugin_uri = slv2_value_as_uri(slv2_plugin_get_uri(plugin));
+ SLV2UIs slv2_uis = slv2_plugin_get_uis(plugin);
+ SuilUIs suil_uis = suil_uis_new(plugin_uri);
+ for (unsigned i = 0; i < slv2_uis_size(slv2_uis); ++i) {
+ SLV2UI ui = slv2_uis_get_at(slv2_uis, i);
+ SLV2Values classes = slv2_ui_get_classes(ui);
+ SLV2Value type = slv2_values_get_at(classes, 0); // FIXME?
+ if (!suil_ui_type_supported(slv2_value_as_uri(type))) {
+ warn << "Unsupported LV2 UI type " << slv2_value_as_uri(type) << endl;
+ continue;
}
+
+ suil_uis_add(suil_uis,
+ slv2_value_as_uri(slv2_ui_get_uri(ui)),
+ slv2_value_as_uri(type),
+ slv2_uri_to_path(slv2_value_as_uri(slv2_ui_get_bundle_uri(ui))),
+ slv2_uri_to_path(slv2_value_as_uri(slv2_ui_get_binary_uri(ui))));
}
- if (ui) {
- info << "Found GTK Plugin UI: " << slv2_ui_get_uri(ui) << endl;
- ret = SharedPtr<PluginUI>(new PluginUI(world, node));
- ret->_features = world->lv2_features()->lv2_features(world, node.get());
- SLV2UIInstance inst = slv2_ui_instantiate(
- plugin, ui, lv2_ui_write, ret.get(), ret->_features->array());
-
- if (inst) {
- ret->_instance = inst;
- } else {
- error << "Failed to instantiate Plugin UI" << endl;
- ret = SharedPtr<PluginUI>();
- }
+ // Attempt to instantiate a UI
+ SuilInstance instance = suil_instance_new(
+ suil_uis,
+ "http://lv2plug.in/ns/extensions/ui#GtkUI",
+ NULL,
+ lv2_ui_write,
+ ret.get(),
+ ret->_features->array());
+
+ if (instance) {
+ ret->_instance = instance;
+ } else {
+ error << "Failed to instantiate LV2 UI" << endl;
+ ret.reset();
}
- slv2_value_free(gtk_gui_uri);
return ret;
}
LV2UI_Widget
PluginUI::get_widget()
{
- return (LV2UI_Widget*)slv2_ui_instance_get_widget(_instance);
+ return (LV2UI_Widget*)suil_instance_get_widget(_instance);
}
void
@@ -170,12 +174,7 @@ PluginUI::port_event(uint32_t port_index,
uint32_t format,
const void* buffer)
{
- const LV2UI_Descriptor* ui_desc = slv2_ui_instance_get_descriptor(_instance);
- LV2UI_Handle ui = slv2_ui_instance_get_handle(_instance);
-
- if (ui_desc->port_event) {
- ui_desc->port_event(ui, port_index, buffer_size, 0, buffer);
- }
+ suil_instance_port_event(_instance, port_index, buffer_size, format, buffer);
}
} // namespace Client