Revert "don't unpack and repack meters unnecessarily during LevelMeterBase::setup_meters()"

This reverts commit d00e035fe0.

..which introduced a bug.

Meter count and type may change when switching the meter point or simply
when selecting a different track in the editor-mixer. Additional meters
were not unpacked and remained on canvas.

Ideally we'd just remove the excess meters or meters where the type
changed, but that's far more complex than just repacking them all.
This commit is contained in:
Robin Gareus 2015-01-09 03:18:43 +01:00
parent 2132b917cc
commit 7235ece898
1 changed files with 10 additions and 12 deletions

View File

@ -234,6 +234,8 @@ LevelMeterBase::hide_all_meters ()
void
LevelMeterBase::setup_meters (int len, int initial_width, int thin_width)
{
hide_all_meters ();
if (!_meter) {
return; /* do it later or never */
}
@ -393,13 +395,8 @@ 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) {
bool hl = meters[n].meter ? meters[n].meter->get_highlight() : false;
if (meters[n].meter && meters[n].meter->get_parent()) {
mtr_remove (*meters[n].meter);
meters[n].packed = false;
delete meters[n].meter;
}
meters[n].packed = false;
delete meters[n].meter;
meters[n].meter = new FastMeter ((uint32_t) floor (ARDOUR_UI::config()->get_meter_hold()), width, _meter_orientation, len,
c[0], c[1], c[2], c[3], c[4],
c[5], c[6], c[7], c[8], c[9],
@ -413,13 +410,14 @@ LevelMeterBase::setup_meters (int len, int initial_width, int thin_width)
meters[n].meter->add_events (Gdk::BUTTON_PRESS_MASK | Gdk::BUTTON_RELEASE_MASK);
meters[n].meter->signal_button_press_event().connect (sigc::mem_fun (*this, &LevelMeterBase::meter_button_press), false);
meters[n].meter->signal_button_release_event().connect (sigc::mem_fun (*this, &LevelMeterBase::meter_button_release), false);
mtr_pack (*meters[n].meter);
meters[n].meter->show_all ();
meters[n].packed = true;
}
}
//pack_end (*meters[n].meter, false, false);
mtr_pack (*meters[n].meter);
meters[n].meter->show_all ();
meters[n].packed = true;
}
//show();
color_changed = false;
visible_meter_type = meter_type;
}