diff options
Diffstat (limited to 'libs/surfaces/mackie/strip.cc')
-rw-r--r-- | libs/surfaces/mackie/strip.cc | 27 |
1 files changed, 23 insertions, 4 deletions
diff --git a/libs/surfaces/mackie/strip.cc b/libs/surfaces/mackie/strip.cc index 64ea8785cd..84c32138a3 100644 --- a/libs/surfaces/mackie/strip.cc +++ b/libs/surfaces/mackie/strip.cc @@ -73,6 +73,8 @@ Strip::Strip (Surface& s, const std::string& name, int index, const map<Button:: , _index (index) , _surface (&s) , _controls_locked (false) + , _transport_is_rolling (false) + , _metering_active (true) , _reset_display_at (0) , _last_gain_position_written (-1.0) , _last_pan_azi_position_written (-1.0) @@ -690,7 +692,7 @@ Strip::update_automation () void Strip::update_meter () { - if (_meter) { + if (_meter && _transport_is_rolling && _metering_active) { float dB = const_cast<PeakMeter&> (_route->peak_meter()).peak_power (0); _meter->send_update (*_surface, dB); } @@ -1068,9 +1070,26 @@ Strip::reset_saved_values () } void -Strip::notify_transport_state_changed() +Strip::notify_metering_state_changed() { - if (_meter) { - _meter->update_transport_rolling (*_surface); + if (!_route || !_meter) { + return; + } + + bool transport_is_rolling = (_surface->mcp().get_transport_speed () != 0.0f); + bool metering_active = _surface->mcp().metering_active (); + + if ((_transport_is_rolling == transport_is_rolling) && (_metering_active == metering_active)) { + return; } + + _meter->notify_metering_state_changed (*_surface, transport_is_rolling, metering_active); + + if (!transport_is_rolling || !metering_active) { + notify_property_changed (PBD::PropertyChange (ARDOUR::Properties::name)); + notify_panner_azi_changed (true); + } + + _transport_is_rolling = transport_is_rolling; + _metering_active = metering_active; } |