Sono i dettagli a decidere se sta bene
Rifinisci quanto vuoi i pannelli grandi — ciò che salta all'occhio è sempre qualcosa di piccolo: una parola spezzata in due, un bagliore tagliato, uno slot stretto. Quattro cose così sono state segnalate il 2026-09-13 e corrette nei widget e nei temi, non nella schermata della demo, così ogni schermata ottiene lo stesso risultato.
| Che cosa si vedeva | Causa | Correzione |
|---|---|---|
Il Done del coach mark diventava Don/e |
Un pulsante con l'andata a capo attiva sottrae la larghezza del testo dal proprio minimo — stringilo e si spezza dentro una parola | GoStyle.fit_words(): una parola sola non va mai a capo; più parole vanno a capo, ma la parola più lunga ci sta sempre — il giudizio è sul testo mostrato, non sulla chiave di traduzione, e viene riapplicato dal modulo quando cambia la lingua |
| Il bagliore di un pulsante a tutta larghezza risultava tagliato verticalmente a sinistra | Un contenitore di scorrimento taglia al proprio bordo, senza eccezioni. Sopravviveva solo il lato destro, grazie alla corsia della barra | GoScroll prende in prestito il margine interno del genitore per spingere il proprio bordo 12dp più in fuori e lo restituisce all'interno — il contenuto resta dov'è |
| Tempo, icona e conteggio impilati in verticale dentro uno slot | Tre righe dentro 48dp | Icona grande al centro, scorciatoia in alto a sinistra, conteggio come badge in basso a destra, tempo rimanente come badge sopra l'icona — i pannelli dei badge vengono dal badge_box() della skin |
| Un menu a tendina piatto senza selezione visibile | Il passaggio del mouse sulle voci usava il pannello del pulsante; i segni dei radio erano quelli tenui predefiniti del motore | Un pannello dedicato per il passaggio del mouse (velatura d'accento tenue), la stessa grafica dei radio usata per le caselle di spunta, altezza delle voci dimensionata per il tocco |
Dai ai pulsanti di sola icona una descrizione con GoStyle.icon_button(icon, action, -1, tooltip_key) —
il suggerimento per chi usa il mouse e il nome accessibile per i lettori di schermo vengono entrambi da quell'unico valore.
gohud disegna da sé il suggerimento: quello predefinito del motore spezza il testo un carattere per riga quando
il suo calcolo della larghezza va storto (misurato a 1dp di larghezza).
La scheda del coach mark sta lontana dagli elementi fissi
In orizzontale la scheda finiva sul bordo superiore o inferiore estremo — esattamente dove stanno intestazioni e pezzi
dell'HUD; nella demo si posava sul → × dell'intestazione. Ora resta al livello del suo bersaglio,
gira attorno a qualsiasi GoHudAnchor che riservi spazio, e accetta altri elementi da evitare tramite
keep_clear. Si sposta della distanza minima che libera l'ostacolo senza coprire il
bersaglio, e resta dov'è quando lo schermo è troppo piccolo per liberare tutto — sovrapporsi è meglio che sparire.
La sua profondità — così da leggersi come sopra la pagina — viene dalle manopole della skin
(float_shadow_size, float_shadow_lift, float_shadow_alpha; le skin smussate usano float_glow_size).
tour.keep_clear = [header_bar, toolbar] # elementi fissi che non sono ancore
Schermi con mouse e tastiera
Un dito non ha lo stato di passaggio del mouse. Sviluppa pensando solo al mobile e due stati esclusivi del desktop restano non verificati —
e uno dei due era rotto: in gohud l'anello di focus era invisibile su un pulsante primario. Il pannello è
del colore d'accento e lo era anche l'anello: 1,00:1, lo stesso colore disegnato sopra sé stesso. Muovendosi
da tastiera non c'era modo di capire dove ci si trovasse.
I pulsanti pieni (GoPrimaryButton, GoDangerSolidButton) usano un anello che
contrasta con il proprio pannello — scuro su un tema scuro, bianco su uno chiaro, una staffa di mira
scura in sci-fi. Il verificatore di contrasto misura l'anello di focus rispetto al pannello su cui si trova, così
la regola sopravvive a un cambio di palette (la WCAG 2.4.11 chiede 3:1 sugli indicatori di focus).
I widget dell'HUD
GoHudAnchor — nove punti
Rispetta l'area sicura e i margini dei bordi. Dagli un landscape_spot e si sposta in
orizzontale — controlli che in verticale stanno in basso al centro possono andare in basso a destra.
Tenere il contenuto fuori da sotto l'HUD
Quando una schermata scorrevole condivide il display con un HUD, il contenuto scivola sotto di esso e i due insiemi di testo si sovrappongono finché nessuno dei due è leggibile. È successo due volte in questo add-on: il testo segnaposto di un campo veniva schiacciato tra gli slot rapidi, e la manopola di un interruttore delle impostazioni finiva sulla barra della salute.
form.avoid_hud = true # sta lontano da ogni GoHudAnchor visibile
joystick_anchor.reserve_space = false # …tranne quelli che compaiono solo sotto un dito
Ogni rettangolo viene evitato nella direzione che costa meno area. Una barra in alto a destra viene aggirata verso il basso su un telefono in verticale (il 13% dell'altezza) e di lato in orizzontale (il 21% della larghezza) — evitarla in verticale in orizzontale costerebbe il 27% dello schermo. Il terreno già ceduto viene sottratto prima di misurare il rettangolo successivo.
Anche i pezzi dell'HUD si scontrano tra loro
I nove punti dividono lo schermo; non garantiscono che i pezzi non si incontrino. Una snackbar larga in alto al centro finiva in pieno sulla barra della salute in alto a destra, nascondendone il valore — non si riusciva a leggere quanta salute restasse.
notice_anchor.avoid_peers = true # si posa sotto l'HUD fisso
notice_anchor.reserve_space = false # e non spinge la pagina mentre è visibile
Si sposta solo in verticale — muoversi anche di lato farebbe comparire un avviso centrato in un punto diverso a ogni apparizione. E evita solo i pezzi che non si stanno spostando a loro volta: se entrambi cedono, i due si scambiano di posto all'infinito.
GoBar — salute, mana, esperienza
var hp := GoBar.new()
hp.label_text = "HP"
hp.ink = GoUi.color(GoTheme.DANGER_FILL) # il token di solo riempimento
hp.set_values(320, 500) # "320 / 500"
Le variazioni sono smorzate su 0,18s — una barra della salute che salta di colpo non dice quanto è stato duro il colpo.
reduce_motion la rende istantanea. I numeri grandi vengono abbreviati in 12.3k così la
larghezza della barra non sobbalza quando le cifre entrano ed escono.
GoSlot — uno slot rapido
Icona, quantità, ricarica e scorciatoia su una sola faccia. Appendere badge a un cerchietto rende ogni slot di larghezza diversa e la riga traballa.
touch_peers.
keyboard_focus è disattivato per impostazione predefinita, così una fila di otto slot non si frappone tra chi usa la tastiera e
ogni controllo delle impostazioni nell'ordine di tabulazione. Attivalo quando l'unico input è una tastiera o un gamepad.
GoJoystick — stick virtuale
| Modalità | Comportamento |
|---|---|
FIXED | Sempre nello stesso posto — facile da trovare senza guardare |
FOLLOW | Compare dove si posa il pollice |
RELATIVE | Continua a seguire il pollice dopo essere comparso — comodo per gli spostamenti lunghi |
Il Vector2 di moved ha lunghezza 0–1, quindi puoi moltiplicarlo direttamente per
una velocità; non varia con la dimensione dello schermo o con i DPI.
GoIconButton — sembra piccolo, si preme grande
touch_peers.