Fix generic plugin UI for plugins with only properties
authorRobin Gareus <robin@gareus.org>
Wed, 5 Dec 2018 19:18:56 +0000 (20:18 +0100)
committerRobin Gareus <robin@gareus.org>
Wed, 5 Dec 2018 19:18:56 +0000 (20:18 +0100)
e.g. reMID.lv2 has only a atom/file-property and no control-inputs.

gtk2_ardour/generic_pluginui.cc

index b930c14b850e1470bd6dd5e6b14ca9390abcc8e1..e2a4daefdbe248712d1734310f81e583a0ca9a01 100644 (file)
@@ -199,7 +199,7 @@ GenericPluginUI::GenericPluginUI (boost::shared_ptr<PluginInsert> pi, bool scrol
 
        main_contents.pack_start (scroller, true, true);
 
-       prefheight = 0;
+       prefheight = -1;
        build ();
 
        if (insert->plugin()->has_midnam() && insert->plugin()->knows_bank_patch()) {
@@ -317,7 +317,8 @@ void
 GenericPluginUI::build ()
 {
        std::vector<ControlUI *> control_uis;
-       bool grid = plugin->parameter_count() > 0;
+       bool grid_avail = false;
+       bool grid_veto = false;
 
        // Build a ControlUI for each control port
        for (size_t i = 0; i < plugin->parameter_count(); ++i) {
@@ -340,8 +341,10 @@ GenericPluginUI::build ()
                        ControlUI* cui;
                        Plugin::UILayoutHint hint;
 
-                       if (!plugin->get_layout(i, hint)) {
-                               grid = false;
+                       if (plugin->get_layout(i, hint)) {
+                               grid_avail = true;
+                       } else {
+                               grid_veto = true;
                        }
 
                        boost::shared_ptr<ARDOUR::AutomationControl> c
@@ -355,7 +358,7 @@ GenericPluginUI::build ()
                                continue;
                        }
 
-                       if (grid) {
+                       if (grid_avail && !grid_veto) {
                                cui->x0 = hint.x0;
                                cui->x1 = hint.x1;
                                cui->y0 = hint.y0;
@@ -371,6 +374,8 @@ GenericPluginUI::build ()
                }
        }
 
+       bool grid = grid_avail && !grid_veto;
+
        // Build a ControlUI for each property
        const Plugin::PropertyDescriptors& descs = plugin->get_supported_properties();
        for (Plugin::PropertyDescriptors::const_iterator d = descs.begin(); d != descs.end(); ++d) {
@@ -605,7 +610,7 @@ GenericPluginUI::automatic_layout (const std::vector<ControlUI*>& control_uis)
                box->pack_start (*cui, false, false);
        }
 
-       if (is_scrollable) {
+       if (is_scrollable && i > 0) {
                prefheight = 30 * i;
        }