summaryrefslogtreecommitdiff
path: root/libs/surfaces/mackie/strip.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libs/surfaces/mackie/strip.cc')
-rw-r--r--libs/surfaces/mackie/strip.cc27
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;
}