Ω-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
+8 -4
View File
@@ -285,10 +285,14 @@ against a performance budget — they are there because `VoiceEngine::applyLiveT
field stays on the full path: the static numeral gutter (AA text re-blended onto itself every
frame thickens) and the GR lamp (drawn straight onto the deck group's gradient, which a
sub-rect fill cannot reproduce), so a lamp transition takes a whole-client repaint. **When the
meter is covered or absent** (Browse, the curve popup, the empty state) `invalidateMeter`
skips invalidating anything at all rather than falling back to a whole-client repaint — the
ballistics still advance on `onMeterTimer`'s own clock, but nothing visible changed, so a
60 FPS whole-client repaint under a modal sheet would be pure cost for zero pixels shown.
meter is covered or absent** (Browse, the empty state) `invalidateMeter` skips invalidating
anything at all rather than falling back to a whole-client repaint — the ballistics still
advance on `onMeterTimer`'s own clock, but nothing visible changed, so a 60 FPS whole-client
repaint under a modal sheet would be pure cost for zero pixels shown. **The curve popup does
NOT cover the meter** — its centered sheet clamps to 520x380 (`curve_popup.h`) against the
meter's fixed right-anchored slot, at any resizable window size — so the fast path stays live
under it; `paintMeterField` reapplies the popup's own 0.50-alpha wash to the field alone so a
meter-only frame doesn't flash through it at full brightness.
- The bake's availability probe runs on the SAME tick that paints the button, so the
control can never be enabled on one tick and refuse on the next. The bake Hold control's
applicability (`resolveBakeHoldNeeded`) rides the same tick for the same reason, and