Ce sont les petites choses qui décident si c'est réussi
Peaufinez les grands panneaux tant que vous voulez — ce qui accroche l'œil est toujours un détail : un mot coupé en deux, un halo tronqué, un emplacement à l'étroit. Quatre détails de ce genre ont été signalés le 2026-09-13 et corrigés dans les widgets et les thèmes, pas dans l'écran de démo, pour que tous les écrans en profitent de la même façon.
| Ce qui se voyait | Cause | Correction |
|---|---|---|
Le Done du repère guidé devenait Don/e |
Un bouton dont le retour à la ligne est actif retranche la largeur de son texte de son minimum — serrez-le et il coupe au milieu d'un mot | GoStyle.fit_words() : un mot seul ne se coupe jamais ; plusieurs mots peuvent passer à la ligne, mais le mot le plus long tient toujours — jugé sur le texte affiché, pas sur la clé de traduction, et réappliqué par le formulaire au changement de langue |
| Le halo d'un bouton pleine largeur était coupé verticalement à gauche | Un conteneur défilant rogne à son bord, sans exception. Seule la droite survivait, grâce à la gouttière de la barre | GoScroll emprunte la marge intérieure du parent pour repousser son bord de 12 dp vers l'extérieur et la rend à l'intérieur — le contenu ne bouge pas |
| Temps, icône et quantité empilés verticalement dans un emplacement | Trois rangées dans 48 dp | Icône en grand au centre, raccourci en haut à gauche, quantité en badge en bas à droite, temps restant en badge par-dessus l'icône — les panneaux de badge viennent du badge_box() du skin |
| Une liste déroulante plate sans sélection visible | Le survol d'un élément utilisait le panneau de bouton ; les marques radio étaient celles, pâles, du moteur | Un panneau de survol dédié (teinte d'accent douce), la même illustration radio que les cases à cocher, une hauteur d'élément calibrée pour le tactile |
Donnez une description aux boutons sans libellé avec GoStyle.icon_button(icon, action, -1, tooltip_key) —
l'infobulle pour les utilisateurs de souris et le nom d'accessibilité pour les lecteurs d'écran viennent tous
deux de cette seule valeur. gohud dessine l'infobulle lui-même : celle du moteur découpe le texte
à raison d'un caractère par ligne quand son calcul de largeur se trompe (mesurée à 1 dp de large).
La carte du repère guidé se tient à l'écart des éléments fixes
En paysage, la carte était envoyée tout en haut ou tout en bas — exactement là où vivent les en-têtes et les
éléments de HUD ; dans la démo, elle se posait sur le → × de l'en-tête. Elle reste désormais à la
hauteur de sa cible, contourne tout GoHudAnchor qui réserve de la place, et accepte d'autres
choses à éviter via keep_clear. Elle se déplace de la plus courte distance qui dégage l'obstacle
sans couvrir la cible, et ne bouge pas quand l'écran est trop petit pour tout dégager — mieux vaut un
chevauchement qu'une disparition. Sa profondeur — pour qu'elle se lise au-dessus de la page — vient des
molettes du skin
(float_shadow_size, float_shadow_lift, float_shadow_alpha ; les skins chanfreinés utilisent float_glow_size).
tour.keep_clear = [header_bar, toolbar] # des éléments fixes qui ne sont pas des ancres
Les écrans avec souris et clavier
Un doigt n'a pas d'état de survol. Développez pour le mobile seul et deux états propres au bureau
restent non vérifiés — et l'un d'eux était cassé : l'anneau de focus de gohud était invisible sur un bouton
principal. Le panneau est de la couleur d'accent, et l'anneau l'était aussi : 1.00:1, la même
couleur dessinée sur elle-même. En se déplaçant au clavier, impossible de savoir où l'on se trouvait.
Les boutons pleins (GoPrimaryButton, GoDangerSolidButton) utilisent un anneau qui
contraste avec leur propre panneau — sombre sur un thème sombre, blanc sur un thème clair, un crochet
de visée sombre en science-fiction. Le vérificateur de contraste mesure l'anneau de focus face au panneau
qui le porte : la règle survit donc à un changement de palette (les WCAG 2.4.11 demandent 3:1 sur les
indicateurs de focus).
Les widgets du HUD
GoHudAnchor — neuf positions
Il respecte la zone sûre et les marges de bord. Donnez-lui un landscape_spot et il se déplace en
paysage — des commandes placées en bas au centre en portrait peuvent passer en bas à droite.
Empêcher le contenu de passer sous le HUD
Quand un écran défilant partage l'affichage avec un HUD, le contenu glisse en dessous et les deux textes se superposent jusqu'à ce qu'aucun ne se lise. C'est arrivé deux fois dans cet add-on : le texte indicatif d'un champ de saisie se retrouvait coincé entre les emplacements rapides, et le curseur d'un interrupteur de réglages atterrissait sur la barre de vie.
form.avoid_hud = true # reste à l'écart de chaque GoHudAnchor visible
joystick_anchor.reserve_space = false # …sauf ceux qui n'apparaissent que sous un doigt
Chaque rectangle est contourné dans la direction qui coûte le moins de surface. Une barre en haut à droite est contournée vers le bas sur un téléphone en portrait (13 % de la hauteur) et sur le côté en paysage (21 % de la largeur) — l'éviter verticalement en paysage coûterait 27 % de l'écran. Le terrain déjà cédé est soustrait avant de mesurer le rectangle suivant.
Les éléments de HUD se heurtent aussi entre eux
Les neuf positions découpent l'écran ; elles ne garantissent pas que les éléments s'évitent. Un snackbar large en haut au centre atterrissait en plein sur la barre de vie en haut à droite, masquant la valeur — on ne pouvait pas lire combien de vie il restait.
notice_anchor.avoid_peers = true # se pose sous le HUD fixe
notice_anchor.reserve_space = false # et ne pousse pas la page tant qu'il est affiché
Il ne s'écarte que verticalement — se décaler aussi sur le côté ferait apparaître un toast centré à un endroit différent à chaque fois. Et il n'évite que les éléments qui ne s'écartent pas eux-mêmes : si les deux cèdent, ils échangent leurs places sans fin.
GoBar — vie, mana, expérience
var hp := GoBar.new()
hp.label_text = "PV"
hp.ink = GoUi.color(GoTheme.DANGER_FILL) # le token réservé au remplissage
hp.set_values(320, 500) # "320 / 500"
Les variations s'amortissent sur 0,18 s — une barre de vie qui saute ne dit pas la force du coup encaissé.
reduce_motion les rend instantanées. Les grands nombres s'abrègent en 12.3k pour que
la largeur de la barre ne tressaute pas au gré des chiffres.
GoSlot — un emplacement rapide
Icône, quantité, temps de recharge et raccourci sur une seule face. Accrocher des badges autour d'un petit cercle donne à chaque emplacement une largeur différente et la rangée se met à onduler.
touch_peers.
keyboard_focus est désactivé par défaut, pour qu'une rangée de huit emplacements ne s'intercale
pas, dans l'ordre de tabulation, entre un utilisateur au clavier et toutes les commandes de réglages.
Activez-le quand le clavier ou la manette est la seule entrée.
GoJoystick — le stick virtuel
| Mode | Comportement |
|---|---|
FIXED | Toujours au même endroit — facile à trouver sans regarder |
FOLLOW | Apparaît là où le pouce se pose |
RELATIVE | Continue de suivre le pouce après être apparu — confortable pour les longs déplacements |
Le Vector2 émis par moved a une longueur de 0 à 1 : vous pouvez le multiplier
directement par une vitesse ; il ne varie ni avec la taille de l'écran ni avec le DPI.
GoIconButton — paraît petit, s'appuie grand
touch_peers.