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.cpp57
1 files changed, 37 insertions, 20 deletions
diff --git a/src/client/PluginUI.cpp b/src/client/PluginUI.cpp
index 6315bdd2..c5f184d5 100644
--- a/src/client/PluginUI.cpp
+++ b/src/client/PluginUI.cpp
@@ -34,14 +34,14 @@ using namespace Raul;
namespace Ingen {
namespace Client {
-SLV2UIHost PluginUI::ui_host = NULL;
+SuilHost PluginUI::ui_host = NULL;
static void
-lv2_ui_write(LV2UI_Controller controller,
- uint32_t port_index,
- uint32_t buffer_size,
- uint32_t format,
- const void* buffer)
+lv2_ui_write(SuilController controller,
+ uint32_t port_index,
+ uint32_t buffer_size,
+ uint32_t format,
+ const void* buffer)
{
PluginUI* const ui = (PluginUI*)controller;
@@ -111,7 +111,7 @@ PluginUI::PluginUI(Ingen::Shared::World* world,
PluginUI::~PluginUI()
{
- slv2_ui_instance_free(_instance);
+ suil_instance_free(_instance);
}
SharedPtr<PluginUI>
@@ -120,13 +120,27 @@ PluginUI::create(Ingen::Shared::World* world,
SLV2Plugin plugin)
{
if (!PluginUI::ui_host) {
- PluginUI::ui_host = slv2_ui_host_new(lv2_ui_write, NULL, NULL, NULL);
+ PluginUI::ui_host = suil_host_new(lv2_ui_write, NULL, NULL, NULL);
}
- SLV2Value gtk_ui = slv2_value_new_uri(
- world->slv2_world(), "http://lv2plug.in/ns/extensions/ui#GtkUI");
-
- SLV2UI ui = slv2_plugin_get_default_ui(plugin, gtk_ui);
+ static const char* gtk_ui_uri = "http://lv2plug.in/ns/extensions/ui#GtkUI";
+
+ SLV2Value gtk_ui = slv2_value_new_uri(world->slv2_world(), gtk_ui_uri);
+
+ SLV2UIs uis = slv2_plugin_get_uis(plugin);
+ SLV2UI ui = NULL;
+ SLV2Value ui_type = NULL;
+ SLV2_FOREACH(u, uis) {
+ SLV2UI this_ui = slv2_uis_get(uis, u);
+ if (slv2_ui_is_supported(this_ui,
+ suil_ui_supported,
+ gtk_ui,
+ &ui_type)) {
+ // TODO: Multiple UI support
+ ui = this_ui;
+ break;
+ }
+ }
if (!ui) {
slv2_value_free(gtk_ui);
@@ -136,12 +150,15 @@ PluginUI::create(Ingen::Shared::World* world,
SharedPtr<PluginUI> ret(new PluginUI(world, node));
ret->_features = world->lv2_features()->lv2_features(world, node.get());
- SLV2UIInstance instance = slv2_ui_instance_new(
- plugin,
- ui,
- gtk_ui,
- ui_host,
+ SuilInstance instance = suil_instance_new(
+ PluginUI::ui_host,
ret.get(),
+ slv2_value_as_uri(gtk_ui),
+ slv2_value_as_uri(slv2_plugin_get_uri(plugin)),
+ slv2_value_as_uri(slv2_ui_get_uri(ui)),
+ slv2_value_as_uri(ui_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))),
ret->_features->array());
slv2_value_free(gtk_ui);
@@ -156,10 +173,10 @@ PluginUI::create(Ingen::Shared::World* world,
return ret;
}
-LV2UI_Widget
+SuilWidget
PluginUI::get_widget()
{
- return (LV2UI_Widget*)slv2_ui_instance_get_widget(_instance);
+ return (SuilWidget*)suil_instance_get_widget(_instance);
}
void
@@ -168,7 +185,7 @@ PluginUI::port_event(uint32_t port_index,
uint32_t format,
const void* buffer)
{
- slv2_ui_instance_port_event(
+ suil_instance_port_event(
_instance, port_index, buffer_size, format, buffer);
}