Ω-W1-T5 review fixes: unify the drag frame resolve onto frameToX/xToFrame; honest comments on grabbableMarks and the grey-loop-mark contrast trade

This commit is contained in:
2026-08-03 13:26:44 -04:00
parent a3853231a7
commit e714df80f8
5 changed files with 65 additions and 20 deletions
+5 -3
View File
@@ -164,9 +164,11 @@ instrument::ui::WaveMarks ReaSamplerEditor::waveMarksFor(const SetupMarkers& m)
}
instrument::ui::WaveMarks ReaSamplerEditor::grabbableMarks(const SetupMarkers& m) const {
// Drawn IFF grabbable. Kept as its own fold because paint and hit-test stay separate
// questions, but do NOT re-add a suppression here: the Gate-with-loop-off marks are drawn
// grey precisely so they can still be dragged, and dragging one is what turns the enable on.
// Drawn IFF grabbable is the product rule, so this is an exact alias of waveMarksFor and
// cannot currently diverge from it. Kept as its own seam anyway because paint and hit-test
// are separate questions in principle — but do NOT re-add a suppression here: the
// Gate-with-loop-off marks are drawn grey precisely so they can still be dragged, and
// dragging one is what turns the enable on.
return waveMarksFor(m);
}
@@ -46,9 +46,11 @@ constexpr Role kRoleStartMarker = Role::OverlayTrace;
constexpr Role kRoleLoopMarker = Role::AccentSecondary;
// A loop mark whose enable is off keeps its position and its cap — and its full weight, since
// it is still draggable. It changes HUE, not opacity: the dim teal it replaces read as broken
// rather than as off. Grey against the lime is deliberately under the 3:1 state-indicator floor
// the two-neighbour rule (core/ui/CLAUDE.md) sets for a LIVE mark — an inactive control is
// exempt, and that lower contrast is the off cue.
// rather than as off. Grey against the lime deliberately sits under the 3:1 state-indicator
// floor the two-neighbour rule (core/ui/CLAUDE.md) sets — on a mark that stays LIVE and still
// drives the loop enable, so this is NOT the WCAG 1.4.11 inactive-component carve-out. It is a
// deliberate trade (the off cue reads as lower contrast on a control that can still be
// grabbed), pending Daniel's eye in the DAW. Do not change the colour to chase it.
constexpr Role kRoleLoopMarkerOff = Role::TextDim;
// Mark weights. The crossfade is a SOFT boundary and rides below the loop pair's weight at rest.