with RMS meters: use "peak indicator" as DPM
[ardour.git] / gtk2_ardour / gain_meter.cc
index 5ddfdc18f4a8d5d8a8c68481ce4dc2608bd951ec..be86691594d97911b41697c202ab4f04659f7b37 100644 (file)
@@ -130,6 +130,7 @@ GainMeterBase::GainMeterBase (Session* s, bool horizontal, int fader_length, int
        ResetAllPeakDisplays.connect (sigc::mem_fun(*this, &GainMeterBase::reset_peak_display));
        ResetRoutePeakDisplays.connect (sigc::mem_fun(*this, &GainMeterBase::reset_route_peak_display));
        ResetGroupPeakDisplays.connect (sigc::mem_fun(*this, &GainMeterBase::reset_group_peak_display));
+       RedrawMetrics.connect (sigc::mem_fun(*this, &GainMeterBase::redraw_metrics));
 
        UI::instance()->theme_changed.connect (sigc::mem_fun(*this, &GainMeterBase::on_theme_changed));
        ColorsChanged.connect (sigc::bind(sigc::mem_fun (*this, &GainMeterBase::color_handler), false));
@@ -300,12 +301,24 @@ GainMeterBase::setup_meters (int len)
        }
 }
 
+void
+GainMeterBase::set_type (MeterType t)
+{
+       level_meter->set_type(t);
+}
+
 void
 GainMeter::setup_meters (int len)
 {
        GainMeterBase::setup_meters (len);
 }
 
+void
+GainMeter::set_type (MeterType t)
+{
+       GainMeterBase::set_type (t);
+}
+
 bool
 GainMeterBase::gain_key_press (GdkEventKey* ev)
 {
@@ -842,20 +855,15 @@ GainMeterBase::update_meters()
                        snprintf (buf, sizeof(buf), "%.1f", mpeak);
                        peak_display.set_label (buf);
                }
-
-               if (mpeak >= 0.0f) {
-                       peak_display.set_name ("MixerStripPeakDisplayPeak");
-               }
+       }
+       if (mpeak >= Config->get_meter_peak()) {
+               peak_display.set_name ("MixerStripPeakDisplayPeak");
        }
 }
 
 void GainMeterBase::color_handler(bool dpi)
 {
-       meter_clear_pattern_cache();
        setup_meters();
-       meter_metric_area.queue_draw ();
-       meter_ticks1_area.queue_draw ();
-       meter_ticks2_area.queue_draw ();
 }
 
 void
@@ -873,7 +881,11 @@ GainMeterBase::set_width (Width w, int len)
 void
 GainMeterBase::on_theme_changed()
 {
-       meter_clear_pattern_cache();
+}
+
+void
+GainMeterBase::redraw_metrics()
+{
        meter_metric_area.queue_draw ();
        meter_ticks1_area.queue_draw ();
        meter_ticks2_area.queue_draw ();
@@ -957,6 +969,9 @@ GainMeter::set_controls (boost::shared_ptr<Route> r,
                _meter->ConfigurationChanged.connect (
                        model_connections, invalidator (*this), boost::bind (&GainMeter::meter_configuration_changed, this, _1), gui_context()
                        );
+               _meter->TypeChanged.connect (
+                       model_connections, invalidator (*this), boost::bind (&GainMeter::meter_type_changed, this, _1), gui_context()
+                       );
 
                meter_configuration_changed (_meter->input_streams ());
        }
@@ -1062,10 +1077,11 @@ GainMeter::meter_configuration_changed (ChanCount c)
                        set_meter_strip_name ("AudioMidiTrackMetricsInactive");
                }
        }
-
-       meter_clear_pattern_cache();
-       meter_metric_area.queue_draw ();
-       meter_ticks1_area.queue_draw ();
-       meter_ticks2_area.queue_draw ();
+       meter_clear_pattern_cache(); // XXX only once
 }
 
+void
+GainMeter::meter_type_changed (MeterType t)
+{
+       _route->set_meter_type(t);
+}