gohud

La leggibilità si misura

← Temi

"Bello" è gusto; "leggibile" si può misurare. Un testo grigio slavato sembra a posto su un buon monitor e sparisce su un telefono alla luce del sole — scegliere a occhio garantisce che prima o poi succeda.

python3 addons/gohud/tools/check_contrast.py
Che cosaRichiesto
Testo del corpo4,5 : 1
Testo grande (da 24px in su)3 : 1
Bordi e icone d'accento3 : 1
Bordi decorativi2 : 1 — le WCAG non applicano la regola 3:1 alla decorazione
Superfici adiacenti1,12 : 1 — quanto basta perché una scheda si legga come distinta dal suo sfondo

Testo di una tinta sopra una velatura della stessa tinta

Questa trappola è comparsa tre volte in questa base di codice — pulsanti premuti (pannello d'accento, etichetta d'accento), pulsanti di pericolo e chip. Nel campione di colore sembra ottima e crolla non appena viene misurata, perché i due condividono la tinta e quindi non hanno differenza di luminosità.

Per questo i colori delle etichette non si scelgono a mano. Il generatore di temi e GoSkin spingono ciascuno la luminosità — e solo la luminosità — finché la soglia non è superata sul pannello su cui il testo si trova davvero. Tinta e saturazione sopravvivono, così la palette mantiene il suo carattere e cambiarla mantiene il contrasto.

Il colore letto come testo e il colore steso come area vogliono cose opposte

Su un tema chiaro un colore di avviso deve scurirsi per restare leggibile come testo (#96500A). Quando il riempimento della barra eredita quel colore, la barra dell'esperienza diventa marrone. Il colore da solo non basta: il giallo è intrinsecamente luminoso, quindi supera 3:1 senza alcuna traccia grigia, e scurire la traccia peggiora le cose (1,52 → 1,06).

Perciò i due aspetti vengono separati. Il colore resta vivido — la palette porta colori usati solo per il riempimento come warning_vivid. Il contrasto lo porta il bordoGoSkin traccia un contorno di 1dp su ogni riempimento che non raggiunge 3:1 rispetto alla sua traccia, così "quanto è piena" resta leggibile.

MY_LIGHT = dict(
    warning=hexc("9A5407"),         # letto come testo
    warning_vivid=hexc("F2A007"),   # steso sulla barra
)
Se lo ometti, te lo dice. Senza un *_vivid, un riempimento che viene fuori scuro fa stampare al generatore the bar looks drab — add warning_vivid to the palette (in italiano: "la barra è spenta — aggiungi warning_vivid alla palette"). Un punto che prima degradava in silenzio ora lo dichiara.

Un pannello flottante non può sapere che cosa ha dietro

Un HUD è disegnato sopra il gioco — un campo innevato, o una caverna. Se il suo pannello è traslucido, ciò che sta dietro traspare e ne cambia il colore, portandosi dietro anche il contrasto del testo. All'82% di opacità il testo attenuato dei temi scuri scendeva a 3,74:1 sopra uno sfondo luminoso — sotto il minimo.

Perciò i pannelli traslucidi vengono misurati con bianco puro e nero puro dietro; sono il peggio che una scena di gioco possa offrire. Il pannello HUD dei temi inclusi è abbastanza opaco da passare (92%) pur mantenendo l'aspetto vetroso.

Per lo stesso motivo nemmeno i colori delle icone sono fissi. Il glifo dello slot rapido era bianco cablato nel codice e misurava 1,11:1 su un tema chiaro — ora segue il pannello su cui si trova, esattamente come fanno le etichette.

Due verificatori, due portate. check_contrast.py legge i file dei temi; i colori che una skin mescola mentre gira (chip, slot) vengono misurati dalla sezione skin contrast della suite dentro Godot.