São as coisas pequenas que decidem se fica bom
Capriche o quanto quiser nos painéis grandes — o que salta aos olhos é sempre algo pequeno: uma palavra partida ao meio, um brilho cortado, um slot apertado. Quatro coisas assim foram apontadas em 2026-09-13 e corrigidas nos widgets e nos temas, não na tela da demo, para que toda tela tenha o mesmo resultado.
| O que apareceu | Causa | Correção |
|---|---|---|
O Done do coach mark virou Don/e |
Um botão com a quebra de linha ligada subtrai a largura do texto do mínimo dele — aperte e ele quebra dentro de uma palavra | GoStyle.fit_words(): uma palavra só nunca quebra; várias palavras quebram, mas a palavra mais longa sempre cabe — avaliado sobre o texto exibido, não sobre a chave de tradução, e reaplicado pelo formulário quando o idioma muda |
| O brilho de um botão de largura total ficou cortado na vertical, do lado esquerdo | Um contêiner de rolagem corta na própria borda, sem exceção. Só o lado direito sobreviveu, graças à calha da barra | O GoScroll toma emprestado o respiro do pai para empurrar a borda dele 12dp para fora e o devolve por dentro — o conteúdo não se mexe |
| Tempo, ícone e contagem empilhados na vertical dentro de um slot | Três linhas dentro de 48dp | Ícone grande no centro, atalho no canto superior esquerdo, contagem como badge no canto inferior direito, tempo restante como badge sobre o ícone — os painéis dos badges vêm do badge_box() da skin |
| Uma lista suspensa sem relevo e sem seleção visível | O realce do item sob o cursor usava o painel de botão; as marcas de seleção eram o padrão apagado da engine | Um painel de realce próprio (tonalização suave do destaque), a mesma arte de marca usada nas caixas de seleção, altura de item dimensionada para o toque |
Dê uma descrição aos botões que só têm ícone com GoStyle.icon_button(icon, action, -1, tooltip_key) —
a dica para quem usa mouse e o nome de acessibilidade para os leitores de tela saem os dois desse mesmo valor.
O gohud desenha a dica por conta própria: o padrão da engine divide o texto em um caractere por linha
quando o cálculo de largura dela dá errado (medido com 1dp de largura).
O cartão do coach mark se mantém longe dos elementos fixos
Em paisagem, o cartão era jogado bem na borda de cima ou de baixo — exatamente onde ficam os cabeçalhos e as
peças do HUD; na demo, ele pousava sobre o → × do cabeçalho. Agora ele permanece no mesmo nível do
alvo, contorna qualquer GoHudAnchor que reserve espaço e recebe por keep_clear outros
elementos a evitar. Ele se move a menor distância que livra o obstáculo sem cobrir o alvo, e fica onde está
quando a tela é pequena demais para livrar tudo — sobrepor é melhor do que sumir.
A profundidade dele — para que se leia como acima da página — vem dos dials da skin
(float_shadow_size, float_shadow_lift, float_shadow_alpha; as skins chanfradas usam float_glow_size).
tour.keep_clear = [header_bar, toolbar] # elementos fixos que não são âncoras
Telas com mouse e teclado
Um dedo não tem estado de hover. Desenvolva pensando só no celular e dois estados exclusivos do desktop
ficam sem conferência — e um deles estava quebrado: o anel de foco do gohud era invisível em um botão
primário. O painel é a cor de destaque e o anel também era: 1.00:1, a mesma cor desenhada
sobre si mesma. Navegando pelo teclado, não havia como saber onde você estava.
Os botões preenchidos (GoPrimaryButton, GoDangerSolidButton) usam um anel que
contrasta com o próprio painel — escuro em um tema escuro, branco em um claro, um colchete de mira
escuro no sci-fi. O verificador de contraste mede o anel de foco contra o painel em que ele está, então
a regra sobrevive a uma troca de paleta (a WCAG 2.4.11 pede 3:1 nos indicadores de foco).
Os widgets do HUD
GoHudAnchor — nove pontos
Respeita a área segura e as margens das bordas. Dê a ele um landscape_spot e ele se move em
paisagem — controles que ficam embaixo e ao centro em retrato podem ir para o canto inferior direito.
Mantendo o conteúdo fora de baixo do HUD
Quando uma tela rolável divide o display com um HUD, o conteúdo desliza por baixo dele e os dois conjuntos de texto se sobrepõem até que nenhum possa ser lido. Aconteceu duas vezes neste add-on: o texto de exemplo de um campo espremido entre os slots rápidos, e a alavanca de um interruptor de configurações pousando sobre a barra de vida.
form.avoid_hud = true # se afasta de todo GoHudAnchor visível
joystick_anchor.reserve_space = false # …menos os que só aparecem sob o dedo
Cada retângulo é contornado na direção que custa menos área. Uma barra no canto superior direito é contornada para baixo em um celular em retrato (13% da altura) e para o lado em paisagem (21% da largura) — desviar dela na vertical em paisagem custaria 27% da tela. O terreno já cedido é descontado antes de o próximo retângulo ser medido.
As peças do HUD também colidem entre si
Os nove pontos dividem a tela; eles não garantem que as peças não se encontrem. Um snackbar largo no topo ao centro caiu em cheio sobre a barra de vida no canto superior direito, escondendo o valor — não dava para ler quanta vida restava.
notice_anchor.avoid_peers = true # se acomoda abaixo do HUD fixo
notice_anchor.reserve_space = false # e não empurra a página enquanto está visível
Ele se desvia apenas na vertical — mover-se também para os lados faria um aviso centralizado aparecer em um lugar diferente a cada vez. E ele só desvia de peças que não estão se desviando também: se os dois cedem, os dois trocam de lugar para sempre.
GoBar — vida, mana, experiência
var hp := GoBar.new()
hp.label_text = "HP"
hp.ink = GoUi.color(GoTheme.DANGER_FILL) # o token só de preenchimento
hp.set_values(320, 500) # "320 / 500"
As mudanças são suavizadas em 0,18s — uma barra de vida que salta não conta o quanto o golpe doeu.
O reduce_motion a torna instantânea. Números grandes são abreviados para 12.3k para
que a largura da barra não fique tremendo conforme os dígitos entram e saem.
GoSlot — um slot rápido
Ícone, quantidade, cooldown e atalho em uma única face. Pendurar badges em um círculo pequeno faz cada slot ter uma largura diferente e a fileira fica bamba.
touch_peers.
O keyboard_focus vem desligado por padrão, para que uma fileira de oito slots não fique entre quem
usa teclado e todos os controles de configuração na ordem do Tab. Ligue-o quando teclado ou controle forem a única
forma de entrada.
GoJoystick — stick virtual
| Modo | Comportamento |
|---|---|
FIXED | Sempre no mesmo lugar — fácil de achar sem olhar |
FOLLOW | Aparece onde o polegar encosta |
RELATIVE | Continua seguindo o polegar depois de aparecer — confortável para deslocamentos longos |
O Vector2 vindo de moved tem comprimento de 0 a 1, então dá para multiplicá-lo direto
por uma velocidade; ele não varia com o tamanho da tela nem com o DPI.
GoIconButton — parece pequeno, recebe toque grande
touch_peers.