palette: enlarge the region title into WCAG large class; repoint the grabbed envelope handle off hue
Corrects theme.h's large-text thresholds, names accent/secondary's real binding limiter, and adds compositeOver so the loop-span fill's 2.25:1 under-floor pair is asserted rather than assumed.
This commit is contained in:
+32
-11
@@ -43,15 +43,28 @@ L7 sub-pass, 2026-07-27):
|
||||
fills on `bg/cell` have a shrunken contrast cushion (primary ~7.6:1, tertiary
|
||||
~5.5:1, secondary only ~3.9:1 since it was darkened — all still clear 3:1, but
|
||||
re-check every one on any hue nudge). Body text on an accent fill is a tight AA
|
||||
4.5:1 pair, and for `accent/secondary` it is the *binding* limiter (~4.9:1), not
|
||||
the indicator floor. Take the most pastel value that still clears the floor,
|
||||
approached from the soft side, never re-saturated toward neon "to be safe."
|
||||
- **A mark drawn OVER an accent fill answers to two neighbours at once.**
|
||||
`overlay/trace` (the envelope trace on the waveform) must clear 3:1 against both
|
||||
`accent/primary` and `bg/base`, which sit 9.41:1 apart — so `sqrt(9.41)` ≈ 3.07:1
|
||||
is the ceiling for *any* single value, and the role sits at that optimum with no
|
||||
headroom either way. It is therefore confined to the waveform band: no value can
|
||||
clear 3:1 on `bg/cell` and against the lime simultaneously.
|
||||
4.5:1 pair (4.91:1 for `accent/secondary`). **The *binding* limiter on how dark
|
||||
`accent/secondary` may go is neither of those: it is the velocity-curve trace on
|
||||
a HOVER-lightened `bg/cell` at 3.03:1 against a 3:1 floor** — 1.2% headroom, the
|
||||
tightest pair in the tree, and invisible to any rest-surface check. Take the most
|
||||
pastel value that still clears the floor, approached from the soft side, never
|
||||
re-saturated toward neon "to be safe."
|
||||
- **A state surface is a DIFFERENT surface.** Hover lightens toward `accent/hot`,
|
||||
pressed darkens, disabled desaturates — each changes the contrast of everything
|
||||
drawn on it. Enumerate the state surfaces a role is drawn over, not just the rest
|
||||
ones; the limiter above is exactly the pair that enumeration missed.
|
||||
- **A mark drawn OVER an accent fill answers to two neighbours at once.** THE home
|
||||
for this rule. `overlay/trace` (the envelope trace on the waveform) must clear 3:1
|
||||
against both `accent/primary` and `bg/base`, which sit 9.41:1 apart — so
|
||||
`sqrt(9.41)` ≈ 3.07:1 is the ceiling for *any* single value, and the role sits at
|
||||
that optimum with no headroom either way. Three consequences, all load-bearing:
|
||||
the role is confined to the waveform band (no value clears 3:1 on `bg/cell` and
|
||||
against the lime at once); inside the 20%-alpha loop-span fill it is under floor
|
||||
at 2.25:1, and against `line/hairline`'s zero line at 1.92:1 — both KNOWN,
|
||||
ACCEPTED, and asserted as such, because no trace value fixes either; and any two
|
||||
values that BOTH clear the ceiling sit within 1.05:1 of each other, so a state of
|
||||
this mark (grabbed, hot, selected) **cannot** be carried by color and must be
|
||||
carried by size, fill-vs-outline, or shape.
|
||||
- **"Speed is the selling point" — a design constraint on this geometry, not
|
||||
just the draw layer.** Sub-frame hover/press/drag feedback must repaint
|
||||
immediately on the input message. **No decorative animation** — no
|
||||
@@ -79,7 +92,7 @@ L7 sub-pass, 2026-07-27):
|
||||
- `tab_strip` — REAPER-free scrollable tab-strip layout + hit-test for the named-banks strip.
|
||||
- `prune_button` — pure layout/hit-test for the `bank_panel` footer Prune button.
|
||||
- `drag_out` — pure OS drag-out module: gesture-boundary decision and path-list assembly. The `InstrumentDrop` gesture signals that the shell should execute an instrument-drop rather than a file-copy drag.
|
||||
- `theme` — pure palette module: role→color mapping, REAPER-grey neutral ladder + the pastel accent system, the keyboard strip's spectral ramp (its own three stops, deliberately not aliases of the accents), WCAG contrast-floor helpers.
|
||||
- `theme` — pure palette module: role→color mapping, REAPER-grey neutral ladder + the pastel accent system, the keyboard strip's spectral ramp, WCAG contrast-floor helpers + `compositeOver` (the effective color of a translucent fill, so alpha overlays are testable). Only the ramp's MID stop is its own constant; lo/hi are still aliases of `accent/primary`/`accent/tertiary`, so a categorical accent move CAN still reorder the ramp — `testSpectralRampLuminanceIsMonotonic` is the build-time catch, not the structure.
|
||||
- `component_geometry` — pure button/slider/list-row geometry + hover hit-test helpers.
|
||||
- `action_bar` — pure task-grouped action-bar layout/hit-test: clusters (Capture / Placement / Maintenance / Tagging / Switching).
|
||||
- `footer_bar` — pure footer layout/hit-test: `[Arrange|Design]` mode-toggle geometry, Tail button, and Prune placement.
|
||||
@@ -93,7 +106,15 @@ L7 sub-pass, 2026-07-27):
|
||||
|
||||
- The WCAG contrast-floor pairs above are real math in `theme`'s tests, not a
|
||||
visual eyeball check — any new hue or role needs its own contrast-floor
|
||||
assertion.
|
||||
assertion. Enumerate the draw sites by grep, not from memory: the enumeration
|
||||
must cover state surfaces (hover/pressed/active), translucent composites, and
|
||||
anything else drawn into the same rect, not just the rest surfaces.
|
||||
- **A text color's floor is set by its FONT, not by its role.** WCAG's large-scale
|
||||
class needs ≥24px, or ≥18.66px BOLD (`theme.h`'s thresholds); anything smaller is
|
||||
body class and answers to 4.5:1. A draw site relying on the 3:1 floor must pin its
|
||||
font metrics against those constants — `draw_kit.cpp`'s `Font::RegionTitle` is the
|
||||
worked example. A prior revision wrote the threshold ~25% low and let 15px
|
||||
semibold clear a floor it was not entitled to.
|
||||
- `card_drag`'s precedence order must stay a pure decision helper mirroring
|
||||
`drag_out::decideGesture` — don't let a shell reimplement gesture precedence
|
||||
ad hoc; the cursor-cue mapping in the shell must stay a thin lookup over the
|
||||
|
||||
Reference in New Issue
Block a user