Fix up display of plugin automation when loading 2.X sessions.
authorCarl Hetherington <carl@carlh.net>
Tue, 1 Feb 2011 01:07:38 +0000 (01:07 +0000)
committerCarl Hetherington <carl@carlh.net>
Tue, 1 Feb 2011 01:07:38 +0000 (01:07 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@8635 d708f5d6-7413-0410-9779-e7cbd77b26cf

libs/ardour/plugin_insert.cc

index 25f700b7ca17f864a272500ce866b2cbeacd92ec..996d3d7dbfbf905d935af7faa4cd3eb1fe480641 100644 (file)
@@ -934,9 +934,9 @@ PluginInsert::set_parameter_state_2X (const XMLNode& node, int version)
                XMLNode *child;
                const char *port;
                uint32_t port_id;
-               
+
                cnodes = (*niter)->children ("port");
-               
+
                for (iter = cnodes.begin(); iter != cnodes.end(); ++iter){
                        
                        child = *iter;
@@ -961,6 +961,30 @@ PluginInsert::set_parameter_state_2X (const XMLNode& node, int version)
                        if (c) {
                                if (!child->children().empty()) {
                                        c->alist()->set_state (*child->children().front(), version);
+
+                                       /* In some cases 2.X saves lists with min_yval and max_yval
+                                          being FLT_MIN and FLT_MAX respectively.  This causes problems
+                                          in A3 because these min/max values are used to compute
+                                          where GUI control points should be drawn.  If we see such
+                                          values, `correct' them to the min/max of the appropriate
+                                          parameter.
+                                       */
+
+                                       float min_y = c->alist()->get_min_y ();
+                                       float max_y = c->alist()->get_max_y ();
+
+                                       Plugin::ParameterDescriptor desc;
+                                       _plugins.front()->get_parameter_descriptor (port_id, desc);
+
+                                       if (min_y == FLT_MIN) {
+                                               min_y = desc.lower;
+                                       }
+                                       
+                                       if (max_y == FLT_MAX) {
+                                               max_y = desc.upper;
+                                       }
+
+                                       c->alist()->set_yrange (min_y, max_y);
                                }
                        } else {
                                error << string_compose (_("PluginInsert: automatable control %1 not found - ignored"), port_id) << endmsg;