summaryrefslogtreecommitdiff
path: root/gtk2_ardour/gain_meter.cc
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2020-04-10 23:36:17 +0200
committerRobin Gareus <robin@gareus.org>2020-04-10 23:50:10 +0200
commite1a9034a0ee081c2c71951ac760dc625b16f543c (patch)
tree58f5f19acf1df129bcc23db35cca8900128ddecc /gtk2_ardour/gain_meter.cc
parent58672bcaa20f69a5c237a9e54cf49b2c03305f7a (diff)
Synchronize meter-reset #7465
Queue reset to be handled when the meter is updated. Also only call set_name(), set_active_state() when the state changes.
Diffstat (limited to 'gtk2_ardour/gain_meter.cc')
-rw-r--r--gtk2_ardour/gain_meter.cc26
1 files changed, 19 insertions, 7 deletions
diff --git a/gtk2_ardour/gain_meter.cc b/gtk2_ardour/gain_meter.cc
index 97d753a653..2dbde7dc92 100644
--- a/gtk2_ardour/gain_meter.cc
+++ b/gtk2_ardour/gain_meter.cc
@@ -106,6 +106,8 @@ GainMeterBase::GainMeterBase (Session* s, bool horizontal, int fader_length, int
, meter_point_button (_("pre"))
, gain_astate_propagate (false)
, _data_type (DataType::AUDIO)
+ , _clear_meters (true)
+ , _meter_peaked (false)
{
using namespace Menu_Helpers;
@@ -456,10 +458,7 @@ GainMeterBase::reset_peak_display ()
return;
}
_meter->reset_max();
- level_meter->clear_meters();
- max_peak = minus_infinity ();
- peak_display.set_text (_("-inf"));
- peak_display.set_name ("MixerStripPeakDisplay");
+ _clear_meters = true;
}
void
@@ -842,7 +841,15 @@ GainMeterBase::meter_channels() const
void
GainMeterBase::update_meters()
{
- char buf[32];
+ if (_clear_meters) {
+ max_peak = minus_infinity ();
+ level_meter->clear_meters ();
+ peak_display.set_text (_("-inf"));
+ peak_display.set_name ("MixerStripPeakDisplay");
+ _meter_peaked = false;
+ _clear_meters = false;
+ }
+
float mpeak = level_meter->update_meters();
if (mpeak > max_peak) {
@@ -850,12 +857,17 @@ GainMeterBase::update_meters()
if (mpeak <= -200.0f) {
peak_display.set_text (_("-inf"));
} else {
+ char buf[32];
snprintf (buf, sizeof(buf), "%.1f", mpeak);
peak_display.set_text (buf);
}
}
- if (mpeak >= UIConfiguration::instance().get_meter_peak()) {
- peak_display.set_name ("MixerStripPeakDisplayPeak");
+
+ bool peaking = mpeak >= UIConfiguration::instance().get_meter_peak();
+
+ if (!_meter_peaked && peaking) {
+ peak_display.set_name ("MixerStripPeakDisplayPeak");
+ _meter_peaked = true;
}
}