Ω-W1-T3 remediation: meter stays live and washed under the curve popup, not frozen

This commit is contained in:
2026-08-03 14:04:14 -04:00
parent dd067a192e
commit 07b51dcabf
5 changed files with 37 additions and 19 deletions
+10 -7
View File
@@ -77,13 +77,16 @@ void ReaSamplerEditor::invalidate() {
void ReaSamplerEditor::invalidateMeter() {
if (!childHwnd_) return;
// The meter is covered (Browse, the curve popup) or has nothing to draw (empty state) —
// ballistics still advance in onMeterTimer, but nothing on screen changed, so invalidating
// anything here would only buy a whole-client repaint of chrome/waveform/deck the meter
// never touches. Distinct from "bounds not resolved yet" below: this is a fact about what
// the face is showing, not about whether meterRects_ happens to be populated.
const bool meterOnScreen =
view_ == View::kSample && curvePopup_ == CurveTarget::kNone && !selectedId_.empty();
// The meter is covered (Browse) or has nothing to draw (empty state) — ballistics still
// advance in onMeterTimer, but nothing on screen changed, so invalidating anything here
// would only buy a whole-client repaint of chrome/waveform/deck the meter never touches.
// Distinct from "bounds not resolved yet" below: this is a fact about what the face is
// showing, not about whether meterRects_ happens to be populated. The curve popup does NOT
// cover the meter — its centered sheet tops out at 520x380 (curve_popup.h) against the
// meter's fixed right-anchored slot, at any resizable size — so the meter stays on screen
// (dimmed by the popup's wash, which paintMeterField reapplies to the field alone) and keeps
// its own rate rather than freezing under the sheet.
const bool meterOnScreen = view_ == View::kSample && !selectedId_.empty();
if (!meterOnScreen) return;
const Rect& f = meterRects_.field;