Lift the sign-off DRAFT note, fix footer/cursor CLAUDE.md overclaim, honest-en the readout-width test, trim duplicated rationale

Removed DRAFT marker on approved readout strings; corrected "paint and cursor cannot disagree" to note drag-cue suppression; renamed the width test to state it only bounds character count, not pixels; trimmed restated rationale to its CLAUDE.md/header home.
This commit is contained in:
2026-08-21 15:59:32 -04:00
parent ae305b6788
commit 3fa4d10b91
5 changed files with 25 additions and 28 deletions
+5 -2
View File
@@ -64,8 +64,11 @@ live in `shell/bank_ops`, a sibling directory, not here.
reused WDL pieces are the toolkit; reject any path that pulls in a new framework.
- **The FX-drain indicator asks `fxReclaimActivity()` and decides nothing itself.**
`panel_input` polls it once per tick into `g_panel.fxDrain`; the footer readout and the
`WM_SETCURSOR` busy cursor both read that cached state, so paint and cursor cannot
disagree within a tick. The transport gate, the park debounce and the open-undo-block
`WM_SETCURSOR` busy cursor both read that cached state, so the two never disagree about
the drain's own direction. The cursor additionally suppresses on `dragArmed`/`dragging` (a
live card drag outranks it), so mid-drag the footer can still read "parking FX"/"restoring
FX" while the cursor shows the drag cue — that is the one case where paint and cursor
diverge, and it is deliberate. The transport gate, the park debounce and the open-undo-block
stand-off are all already folded into that answer, against the reclaim queue's own pinned
project — do not re-evaluate any of them here, and never drive this off `fxReclaimPending`
(true throughout the debounce, when only the opposite direction is eligible).
+2 -3
View File
@@ -147,9 +147,8 @@ void drawFooter(LICE_IBitmap* bmp, int w, int h) {
}
}
// The one passive readout beside the toggle: a moving FX drain, else the per-mode member
// count (footerReadout owns which). Passive text, not a control. The drain draws
// text/primary against the count's text/dim so a transient state reads as one.
// footerReadout (core/ui) owns which string shows; the drain draws text/primary against
// the count's text/dim so the transient state visually reads as one.
if (!fb.count.empty()) {
const bool draining = g_panel.fxDrain != FxDrainState::Idle;
const std::string label = footerReadout(g_panel.fxDrain, activeModeMemberCount());
+4 -9
View File
@@ -94,15 +94,10 @@ void handleDropFiles(HDROP hDrop) {
if (!paths.empty()) ingestDroppedFiles(paths);
}
// IDC_APPSTARTING — arrow plus hourglass, "busy in the background, still usable" — is the
// exact reading for the FX reclaimer's drain, and IDC_WAIT is not: nothing here blocks.
// SWELL defines neither anywhere in vendor/WDL/WDL/swell, so on mac/Linux there is no busy
// cursor at all and the footer readout carries the state alone. The cursor reaches OUR
// windows only; REAPER's arrange and mixer answer their own WM_SETCURSOR and the SDK
// exposes nothing host-wide to ask for. A global SetSystemCursor or a message hook would
// reach further and is deliberately not done. [verify — DAW] whether REAPER's docker even
// routes WM_SETCURSOR to the docked child dialog at all — the premise the whole Windows
// half of this feature rests on.
// IDC_APPSTARTING ("busy in the background, still usable"), not IDC_WAIT ("blocking") —
// nothing here blocks. Platform reach and the SetSystemCursor rejection: see this
// directory's CLAUDE.md. [verify — DAW] whether REAPER's docker even routes WM_SETCURSOR
// to the docked child dialog at all — the premise the whole Windows half of this rests on.
#ifdef _WIN32
HCURSOR busyCursor() { return LoadCursor(nullptr, IDC_APPSTARTING); }
#else