diff options
author | Robin Gareus <robin@gareus.org> | 2016-07-22 12:57:14 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2016-07-22 12:57:24 +0200 |
commit | 43bdfa7197664fe44b6b8cf8595aff82df800ace (patch) | |
tree | 30b7b5e8ccfd71fc2930ec4981f901ef741b97a5 /gtk2_ardour | |
parent | 87c38e1a269e09b40e8e8866961498c36ce95fbb (diff) |
invalidate meter-color cache when midi channel count changes
This fixes a bug of midi-colors being used for audio-meters or
vice versa when when the total channel count remained identical
Diffstat (limited to 'gtk2_ardour')
-rw-r--r-- | gtk2_ardour/level_meter.cc | 7 | ||||
-rw-r--r-- | gtk2_ardour/level_meter.h | 1 |
2 files changed, 6 insertions, 2 deletions
diff --git a/gtk2_ardour/level_meter.cc b/gtk2_ardour/level_meter.cc index 2ab2cf567c..c8c2133230 100644 --- a/gtk2_ardour/level_meter.cc +++ b/gtk2_ardour/level_meter.cc @@ -51,6 +51,7 @@ LevelMeterBase::LevelMeterBase (Session* s, PBD::EventLoop::InvalidationRecord* , max_peak (minus_infinity()) , meter_type (MeterPeak) , visible_meter_type (MeterType(0)) + , midi_count (0) , meter_count (0) , max_visible_meters (0) , color_changed (false) @@ -254,7 +255,7 @@ LevelMeterBase::setup_meters (int len, int initial_width, int thin_width) return; /* do it later or never */ } - int32_t nmidi = _meter->input_streams().n_midi(); + uint32_t nmidi = _meter->input_streams().n_midi(); uint32_t nmeters = _meter->input_streams().n_total(); regular_meter_width = initial_width; thin_meter_width = thin_width; @@ -276,6 +277,7 @@ LevelMeterBase::setup_meters (int len, int initial_width, int thin_width) width = rint (width * UIConfiguration::instance().get_ui_scale()); if ( meters.size() > 0 + && nmidi == midi_count && nmeters == meter_count && meters[0].width == width && meters[0].length == len @@ -450,7 +452,7 @@ LevelMeterBase::setup_meters (int len, int initial_width, int thin_width) } } } - if (meters[n].width != width || meters[n].length != len || color_changed || meter_type != visible_meter_type) { + if (meters[n].width != width || meters[n].length != len || color_changed || meter_type != visible_meter_type || nmidi != midi_count) { bool hl = meters[n].meter ? meters[n].meter->get_highlight() : false; meters[n].packed = false; delete meters[n].meter; @@ -481,6 +483,7 @@ LevelMeterBase::setup_meters (int len, int initial_width, int thin_width) //show(); color_changed = false; visible_meter_type = meter_type; + midi_count = nmidi; meter_count = nmeters; } diff --git a/gtk2_ardour/level_meter.h b/gtk2_ardour/level_meter.h index 758b94c37b..d5fb62c6ac 100644 --- a/gtk2_ardour/level_meter.h +++ b/gtk2_ardour/level_meter.h @@ -109,6 +109,7 @@ class LevelMeterBase : public ARDOUR::SessionHandlePtr, virtual public sigc::tra float max_peak; ARDOUR::MeterType meter_type; ARDOUR::MeterType visible_meter_type; + uint32_t midi_count; uint32_t meter_count; uint32_t max_visible_meters; |