Use FastScreenUpdate for UI message updating, and only if plugin has message output...
authorDavid Robillard <d@drobilla.net>
Sat, 25 Feb 2012 20:43:14 +0000 (20:43 +0000)
committerDavid Robillard <d@drobilla.net>
Sat, 25 Feb 2012 20:43:14 +0000 (20:43 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@11521 d708f5d6-7413-0410-9779-e7cbd77b26cf

gtk2_ardour/lv2_plugin_ui.cc
gtk2_ardour/lv2_plugin_ui.h
libs/ardour/ardour/lv2_plugin.h
libs/ardour/lv2_plugin.cc

index 7cf230e4ec338dd31b22069ca8d17132fcda0c06..7524b6b5dea4e892ba8e0dc0a9325fdacf70f700 100644 (file)
@@ -73,11 +73,10 @@ LV2PluginUI::write_to_ui(void*       controller,
                                 port_index, buffer_size, format, buffer);
 }
 
-bool
+void
 LV2PluginUI::update_timeout()
 {
        _lv2->emit_to_ui(this, &LV2PluginUI::write_to_ui);
-       return true;
 }
 
 void
@@ -267,8 +266,10 @@ LV2PluginUI::lv2ui_instantiate(const std::string& title)
                }
        }
 
-       Glib::signal_timeout().connect(
-               sigc::mem_fun(*this, &LV2PluginUI::update_timeout), 500);
+       if (_lv2->has_message_output()) {
+               ARDOUR_UI::instance()->RapidScreenUpdate.connect(
+                       sigc::mem_fun(*this, &LV2PluginUI::update_timeout));
+       }
 }
 
 void
index 071ad2a1dcff1ce12bdb45c147d35ce232a79bd5..7284f82128b0c48a2873fb6a87bad0f769b3d0b0 100644 (file)
@@ -90,7 +90,7 @@ class LV2PluginUI : public PlugUIBase, public Gtk::VBox
                                uint32_t    format,
                                const void* buffer);
 
-       bool update_timeout();
+       void update_timeout();
 
        void lv2ui_instantiate(const std::string& title);
        void lv2ui_free();
index 65b63269e16cdff1e334c5abfb8f1c198a0e1c1b..cf764b34d28e48116adef09141378d7f51b3e8d8 100644 (file)
@@ -113,6 +113,7 @@ class LV2Plugin : public ARDOUR::Plugin
        std::string current_preset () const;
 
        bool has_editor () const;
+       bool has_message_output () const;
 
        uint32_t atom_eventTransfer() const;
 
index 2907c2f904c53a05e6c700e185adb19c1c40cea2..d74d23acc22abdee4bb6857542eca61e68844148 100644 (file)
@@ -763,6 +763,17 @@ LV2Plugin::has_editor() const
        return _impl->ui != NULL;
 }
 
+bool
+LV2Plugin::has_message_output() const
+{
+       for (uint32_t i = 0; i < num_ports(); ++i) {
+               if ((_port_flags[i] & PORT_MESSAGE) && _port_flags[i] & PORT_OUTPUT) {
+                       return true;
+               }
+       }
+       return false;
+}
+
 uint32_t
 LV2Plugin::atom_eventTransfer() const
 {