diff options
author | Robin Gareus <robin@gareus.org> | 2015-04-30 19:06:26 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2015-04-30 19:19:31 +0200 |
commit | 4dc29153a29fcd3bc960b6df2c42338b3e7bcfd3 (patch) | |
tree | 319bc7f176b185e093903c72c5c4ae743225819b /gtk2_ardour/level_meter.cc | |
parent | 0e85408c59f6236d88abfab1d2c143cfcd27433e (diff) |
skip [duplicate] meter re-packing.
Diffstat (limited to 'gtk2_ardour/level_meter.cc')
-rw-r--r-- | gtk2_ardour/level_meter.cc | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/gtk2_ardour/level_meter.cc b/gtk2_ardour/level_meter.cc index 4d77b3a61d..f78bbd7406 100644 --- a/gtk2_ardour/level_meter.cc +++ b/gtk2_ardour/level_meter.cc @@ -51,6 +51,8 @@ LevelMeterBase::LevelMeterBase (Session* s, PBD::EventLoop::InvalidationRecord* , thin_meter_width(2) , max_peak (minus_infinity()) , meter_type (MeterPeak) + , visible_meter_type (MeterType(0)) + , visible_meter_count (0) , color_changed (false) { set_session (s); @@ -236,9 +238,9 @@ LevelMeterBase::hide_all_meters () void LevelMeterBase::setup_meters (int len, int initial_width, int thin_width) { - hide_all_meters (); if (!_meter) { + hide_all_meters (); return; /* do it later or never */ } @@ -251,6 +253,7 @@ LevelMeterBase::setup_meters (int len, int initial_width, int thin_width) guint16 width; if (nmeters == 0) { + hide_all_meters (); return; } @@ -262,6 +265,27 @@ LevelMeterBase::setup_meters (int len, int initial_width, int thin_width) width = rint (width * ARDOUR_UI::ui_scale); + if ( meters.size() > 0 + && nmeters == visible_meter_count + && meters[0].width == width + && meters[0].length == len + && !color_changed + && meter_type == visible_meter_type) { + return; + } + +#if 0 + printf("Meter redraw: %s %s %s %s %s %s\n", + (meters.size() > 0) ? "yes" : "no", + (meters.size() > 0 && meters[0].width == width) ? "yes" : "no", + (meters.size() > 0 && meters[0].length == len) ? "yes" : "no", + (nmeters == visible_meter_count) ? "yes" : "no", + (meter_type == visible_meter_type) ? "yes" : "no", + !color_changed ? "yes" : "no" + ); +#endif + + hide_all_meters (); while (meters.size() < nmeters) { meters.push_back (MeterInfo()); } @@ -443,6 +467,7 @@ LevelMeterBase::setup_meters (int len, int initial_width, int thin_width) //show(); color_changed = false; visible_meter_type = meter_type; + visible_meter_count = nmeters; } void |