gohud

Ventanas flotantes

← Widgets

GoSurface — el contenedor

Los emergentes, las hojas y los desplegables usan todos este. Se encarga del área segura, el teclado virtual, el encabezado y el pie fijos, el cuerpo desplazable, qué ventana está encima, la restauración del foco, la propiedad del botón Atrás y el redimensionado por arrastre.

ColocaciónSe ve comoSe usa para
CENTERUna tarjeta en el medioConfirmaciones, ajustes
BOTTOMUna hoja que sube desde abajoListas, páginas de gestión
ANCHORUna tarjeta fijada junto a un controlDesplegables, menús contextuales
No se elimina a sí mismo. Reaccionar a close_requested — ocultarlo o liberarlo — es tarea de la pantalla que lo posee, porque el contenedor no puede saber por qué se está cerrando (guardar y cerrar, o descartar).

GoSheet — una página desde abajo

var sheet := GoSheet.new()
add_child(sheet)
sheet.open("Inventario")
sheet.toolbar().add_child(GoStyle.line_edit("Buscar…"))
sheet.toolbar().visible = true
sheet.footer().add_child(GoStyle.button("Cerrar", sheet.close, GoStyle.Tone.PRIMARY))
sheet.footer().visible = true

Posee un CanvasLayer, así que queda de forma fiable por encima del HUD. open() vacía el cuerpo y desactiva el botón Atrás y las filas fijas — un botón muerto en una pantalla a la que no hay adónde volver se lee como algo roto.

GoDialogs — confirmaciones con await

if await dialogs.confirm("Borrar partida", "Esto no se puede deshacer."):
    delete_save()

confirm(title, body, ok_text, cancel_text, extra, args, destructive) — todo lo que va después del cuerpo es opcional, y alert() funciona igual pero con un solo botón. Activa destructive para algo que no se puede deshacer: el botón de confirmar pasa a ser el botón relleno GoStyle.Tone.DANGER_SOLID. En un tema claro, una etiqueta de peligro teñida tiene que oscurecerse hasta leerse como texto negro; el botón relleno mantiene texto blanco sobre rojo. El tono se vuelve a aplicar en cada llamada porque se reutiliza una sola ventana, y un segundo confirm() mientras hay uno abierto devuelve false de inmediato. confirm_key() acepta claves de traducción.

Disposición de los botones. action_layout es VERTICAL por omisión (seguro para traducciones largas), HORIZONTAL para una sola fila con la mitad del ancho cada uno, o AUTO, que usa una fila solo cuando ambas etiquetas caben en la mitad de la tarjeta en una sola línea y las apila en caso contrario. action_gap es el espacio entre los botones y body_gap el espacio por encima de ellos — hazlo más ancho que el hueco entre botones para que la pregunta y la elección se lean como dos partes. Para un único diálogo, llama a set_next_action_layout() antes de abrirlo. La fila se construye cuando un diálogo se abre por primera vez, así que un GoDialogs en autoload no añade nada al arranque.

GoForm — un formulario de ancho limitado

Garantiza que las etiquetas descendientes se ajusten por líneas. Sin eso, una frase larga se estira en una sola línea cuyo ancho mínimo supera el de la pantalla, y los lados quedan recortados — ni siquiera puedes saber en qué pantalla estás. Activar el ajuste a mano en cada escena se olvida siempre.

GoScroll — desplazamiento táctil

Mete una sola cosa dentro. Los encabezados y las filas de botones van fuera — una lista larga no debe empujarlos fuera de la pantalla. use_panel_edge() mueve la barra de desplazamiento al relleno que la tarjeta ya tiene mientras el contenido mantiene su sangría.