Switch to PBD control-math and prefer Controllable API
[ardour.git] / libs / ardour / gain_control.cc
index ee356b017c3169c235b70e497325dc0b442b5bbf..35f666bdf10c23222ed24e905b9d6e1491e8dee7 100644 (file)
@@ -50,7 +50,7 @@ double
 GainControl::internal_to_interface (double v) const
 {
        if (_desc.type == GainAutomation) {
-               return gain_to_slider_position (v);
+               return gain_to_slider_position_with_max (v, _desc.upper);
        } else {
                return (accurate_coefficient_to_dB (v) - lower_db) / range_db;
        }
@@ -60,7 +60,7 @@ double
 GainControl::interface_to_internal (double v) const
 {
        if (_desc.type == GainAutomation) {
-               return slider_position_to_gain (v);
+               return slider_position_to_gain_with_max (v, _desc.upper);
        } else {
                return dB_to_coefficient (lower_db + v * range_db);
        }
@@ -102,6 +102,15 @@ GainControl::inc_gain (gain_t factor)
        }
 }
 
+void
+GainControl::post_add_master (boost::shared_ptr<AutomationControl> m)
+{
+       if (m->get_value() == 0) {
+               /* master is at -inf, which forces this ctrl to -inf on assignment */
+               Changed (false, Controllable::NoGroup); /* EMIT SIGNAL */
+       }
+}
+
 bool
 GainControl::get_masters_curve_locked (framepos_t start, framepos_t end, float* vec, framecnt_t veclen) const
 {