From 2716ce41e08c3e112c209b3840ff60d6e9bc2bb2 Mon Sep 17 00:00:00 2001 From: Johannes Mueller Date: Fri, 21 Jul 2017 14:51:57 +0200 Subject: Indicate whether to show plugin's inline display in GUI This is currently done by an extension data similarly to LV2_INLINEDISPLAY__interface. --- gtk2_ardour/generic_pluginui.cc | 8 ++++++-- libs/ardour/ardour/lv2_extensions.h | 1 + libs/ardour/ardour/lv2_plugin.h | 2 ++ libs/ardour/ardour/plugin.h | 1 + libs/ardour/lv2_plugin.cc | 7 +++++++ libs/plugins/a-comp.lv2/a-comp.c | 3 +++ 6 files changed, 20 insertions(+), 2 deletions(-) diff --git a/gtk2_ardour/generic_pluginui.cc b/gtk2_ardour/generic_pluginui.cc index 8530486c83..2578a39184 100644 --- a/gtk2_ardour/generic_pluginui.cc +++ b/gtk2_ardour/generic_pluginui.cc @@ -529,9 +529,8 @@ GenericPluginUI::automatic_layout (const std::vector& control_uis) delete output_table; } - if (plugin->has_inline_display ()) { + if (plugin->has_inline_display () && plugin->inline_display_in_gui ()) { PluginDisplay* pd = manage (new PluginDisplay (plugin, 300)); - pd->set_name("inside gui"); hpacker.pack_end (*pd, true, true); } show_all(); @@ -551,6 +550,11 @@ GenericPluginUI::custom_layout (const std::vector& control_uis) layout->attach (*cui, cui->x0, cui->x1, cui->y0, cui->y1, FILL, SHRINK, 2, 2); } hpacker.pack_start (*layout, true, true); + + if (plugin->has_inline_display () && plugin->inline_display_in_gui ()) { + PluginDisplay* pd = manage (new PluginDisplay (plugin, 300)); + hpacker.pack_end (*pd, true, true); + } } GenericPluginUI::ControlUI::ControlUI (const Evoral::Parameter& p) diff --git a/libs/ardour/ardour/lv2_extensions.h b/libs/ardour/ardour/lv2_extensions.h index 755f1f0217..26432b54d7 100644 --- a/libs/ardour/ardour/lv2_extensions.h +++ b/libs/ardour/ardour/lv2_extensions.h @@ -32,6 +32,7 @@ #define LV2_INLINEDISPLAY_PREFIX LV2_INLINEDISPLAY_URI "#" #define LV2_INLINEDISPLAY__interface LV2_INLINEDISPLAY_PREFIX "interface" #define LV2_INLINEDISPLAY__queue_draw LV2_INLINEDISPLAY_PREFIX "queue_draw" +#define LV2_INLINEDISPLAY__in_gui LV2_INLINEDISPLAY_PREFIX "in_gui" /** Opaque handle for LV2_Inline_Display::queue_draw() */ typedef void* LV2_Inline_Display_Handle; diff --git a/libs/ardour/ardour/lv2_plugin.h b/libs/ardour/ardour/lv2_plugin.h index 202ddbb240..9eb80d187e 100644 --- a/libs/ardour/ardour/lv2_plugin.h +++ b/libs/ardour/ardour/lv2_plugin.h @@ -278,6 +278,7 @@ class LIBARDOUR_API LV2Plugin : public ARDOUR::Plugin, public ARDOUR::Workee #ifdef LV2_EXTENDED const LV2_Inline_Display_Interface* _display_interface; + bool _show_display_in_generic_gui; const LV2_Midnam_Interface* _midname_interface; #endif @@ -322,6 +323,7 @@ class LIBARDOUR_API LV2Plugin : public ARDOUR::Plugin, public ARDOUR::Workee #ifdef LV2_EXTENDED bool has_inline_display (); + bool inline_display_in_gui (); Plugin::Display_Image_Surface* render_inline_display (uint32_t, uint32_t); bool has_midnam (); diff --git a/libs/ardour/ardour/plugin.h b/libs/ardour/ardour/plugin.h index c5eb7d31c9..4e7f45bc8a 100644 --- a/libs/ardour/ardour/plugin.h +++ b/libs/ardour/ardour/plugin.h @@ -171,6 +171,7 @@ class LIBARDOUR_API Plugin : public PBD::StatefulDestructible, public Latent } Display_Image_Surface; virtual bool has_inline_display () { return false; } + virtual bool inline_display_in_gui () { return false; } virtual Display_Image_Surface* render_inline_display (uint32_t, uint32_t) { return NULL; } PBD::Signal0 QueueDraw; diff --git a/libs/ardour/lv2_plugin.cc b/libs/ardour/lv2_plugin.cc index 2911c6c763..2b6e802172 100644 --- a/libs/ardour/lv2_plugin.cc +++ b/libs/ardour/lv2_plugin.cc @@ -547,6 +547,8 @@ LV2Plugin::init(const void* c_plugin, framecnt_t rate) _display_interface = (const LV2_Inline_Display_Interface*) extension_data (LV2_INLINEDISPLAY__interface); + _show_display_in_generic_gui = (bool) extension_data (LV2_INLINEDISPLAY__in_gui); + _midname_interface = (const LV2_Midnam_Interface*) extension_data (LV2_MIDNAM__interface); if (_midname_interface) { @@ -962,6 +964,11 @@ LV2Plugin::has_inline_display () { return _display_interface ? true : false; } +bool +LV2Plugin::inline_display_in_gui () { + return _show_display_in_generic_gui; +} + Plugin::Display_Image_Surface* LV2Plugin::render_inline_display (uint32_t w, uint32_t h) { if (_display_interface) { diff --git a/libs/plugins/a-comp.lv2/a-comp.c b/libs/plugins/a-comp.lv2/a-comp.c index 80985715e7..f9518cd76f 100644 --- a/libs/plugins/a-comp.lv2/a-comp.c +++ b/libs/plugins/a-comp.lv2/a-comp.c @@ -873,6 +873,9 @@ extension_data(const char* uri) if (!strcmp(uri, LV2_INLINEDISPLAY__interface)) { return &display; } + if (!strcmp(uri, LV2_INLINEDISPLAY__in_gui)) { + return &display; + } #endif return NULL; } -- cgit v1.2.3