Apply LV2 GUI parameter update patch from kfoltman.
authorDavid Robillard <d@drobilla.net>
Wed, 14 Jan 2009 15:47:58 +0000 (15:47 +0000)
committerDavid Robillard <d@drobilla.net>
Wed, 14 Jan 2009 15:47:58 +0000 (15:47 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@4407 d708f5d6-7413-0410-9779-e7cbd77b26cf

gtk2_ardour/lv2_plugin_ui.cc
gtk2_ardour/lv2_plugin_ui.h

index d18f7d80ce189403923653cf89c083db2da18841..02af81cbf0da34357b0a6e026c5337b7b4f73cb1 100644 (file)
@@ -44,14 +44,20 @@ void
 LV2PluginUI::parameter_changed (uint32_t port_index, float val)
 {
        if (val != _values[port_index]) {
-               const LV2UI_Descriptor* ui_desc = slv2_ui_instance_get_descriptor(_inst);
-               LV2UI_Handle ui_handle = slv2_ui_instance_get_handle(_inst);
-               if (ui_desc->port_event)
-                       ui_desc->port_event(ui_handle, port_index, 4, 0, &val);
-               _values[port_index] = val;
+               parameter_update(port_index, val);
        }
 }
 
+void
+LV2PluginUI::parameter_update (uint32_t port_index, float val)
+{
+       const LV2UI_Descriptor* ui_desc = slv2_ui_instance_get_descriptor(_inst);
+       LV2UI_Handle ui_handle = slv2_ui_instance_get_handle(_inst);
+       if (ui_desc->port_event)
+               ui_desc->port_event(ui_handle, port_index, 4, 0, &val);
+       _values[port_index] = val;
+}
+
 bool
 LV2PluginUI::start_updating(GdkEventAny* event)
 {
@@ -107,9 +113,13 @@ LV2PluginUI::LV2PluginUI (boost::shared_ptr<PluginInsert> pi, boost::shared_ptr<
        _values = new float[num_ports];
        for (uint32_t i = 0; i < num_ports; ++i) {
                bool ok;
-               _values[i] = lv2p->nth_parameter(i, ok);
-               if (ok)
-                       lv2_ui_write(this, i, 4, /* FIXME: format */0, &_values[i]);
+               uint32_t port = lv2p->nth_parameter(i, ok);
+               if (ok) {
+                       _values[port] = lv2p->get_parameter(port);
+                       if (lv2p->parameter_is_control(port) && lv2p->parameter_is_input(port)) {
+                               parameter_update(port, _values[port]);
+                       }
+               }
        }
                
        _lv2->ParameterChanged.connect(mem_fun(*this, &LV2PluginUI::parameter_changed));
index 1af023974c12d0d208b81b631922bc53c996acb0..fe8dd85cd227c6a85bf6daa96dda2bfed8b09d56 100644 (file)
@@ -69,6 +69,7 @@ class LV2PluginUI : public PlugUIBase, public Gtk::VBox
                        const void*      buffer);
        
        void parameter_changed(uint32_t, float);
+       void parameter_update(uint32_t, float);
        bool configure_handler (GdkEventConfigure*);
        void save_plugin_setting ();
        void output_update();