summaryrefslogtreecommitdiff
path: root/gtk2_ardour/meter_strip.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/meter_strip.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/meter_strip.cc')
-rw-r--r--gtk2_ardour/meter_strip.cc30
1 files changed, 19 insertions, 11 deletions
diff --git a/gtk2_ardour/meter_strip.cc b/gtk2_ardour/meter_strip.cc
index e51725aef5..f29c99493e 100644
--- a/gtk2_ardour/meter_strip.cc
+++ b/gtk2_ardour/meter_strip.cc
@@ -70,6 +70,8 @@ PBD::Signal0<void> MeterStrip::ConfigurationChanged;
MeterStrip::MeterStrip (int metricmode, MeterType mt)
: RouteUI ((Session*) 0)
, metric_type (MeterPeak)
+ , _clear_meters (true)
+ , _meter_peaked (false)
, _has_midi (false)
, _tick_bar (0)
, _strip_type (0)
@@ -127,6 +129,8 @@ MeterStrip::MeterStrip (Session* sess, boost::shared_ptr<ARDOUR::Route> rt)
, RouteUI ((Session*) 0)
, _route (rt)
, metric_type (MeterPeak)
+ , _clear_meters (true)
+ , _meter_peaked (false)
, _has_midi (false)
, _tick_bar (0)
, _strip_type (0)
@@ -165,7 +169,6 @@ MeterStrip::MeterStrip (Session* sess, boost::shared_ptr<ARDOUR::Route> rt)
peak_display.set_name ("meterbridge peakindicator");
peak_display.set_elements((ArdourButton::Element) (ArdourButton::Edge|ArdourButton::Body));
set_tooltip (peak_display, _("Reset Peak"));
- max_peak = minus_infinity();
peak_display.unset_flags (Gtk::CAN_FOCUS);
peak_display.set_size_request(PX_SCALE(12, 12), PX_SCALE(8, 8));
peak_display.set_corner_radius(2); // ardour-button scales this
@@ -417,12 +420,19 @@ MeterStrip::route_color_changed ()
void
MeterStrip::fast_update ()
{
- float mpeak = level_meter->update_meters();
- if (mpeak > max_peak) {
- max_peak = mpeak;
- if (mpeak >= UIConfiguration::instance().get_meter_peak()) {
- peak_display.set_active_state ( Gtkmm2ext::ExplicitActive );
- }
+ if (_clear_meters) {
+ level_meter->clear_meters();
+ peak_display.set_active_state (Gtkmm2ext::Off);
+ _clear_meters = false;
+ _meter_peaked = false;
+ }
+
+ const float mpeak = level_meter->update_meters();
+ const bool peaking = mpeak > UIConfiguration::instance().get_meter_peak();
+
+ if (!_meter_peaked && peaking) {
+ peak_display.set_active_state ( Gtkmm2ext::ExplicitActive );
+ _meter_peaked = true;
}
}
@@ -697,9 +707,7 @@ void
MeterStrip::reset_peak_display ()
{
_route->shared_peak_meter()->reset_max();
- level_meter->clear_meters();
- max_peak = -INFINITY;
- peak_display.set_active_state ( Gtkmm2ext::Off );
+ _clear_meters = true;
}
bool
@@ -776,7 +784,7 @@ void
MeterStrip::parameter_changed (std::string const & p)
{
if (p == "meter-peak") {
- max_peak = -INFINITY;
+ _clear_meters = true;
}
else if (p == "show-rec-on-meterbridge") {
update_button_box();