Saltar al contenido
Navegador

Una pestaña del navegador

Ejecutar un árbol de widgets en un simple <canvas> con go-widgets/webcanvas, o como una ventana del compositor wasmdesk.

El toolkit es Go puro sin dependencia del DOM, así que GOOS=js GOARCH=wasm lo compila como cualquier otro destino. Hay dos maneras de poner el resultado delante de alguien:

Un simple canvas

go-widgets/webcanvas copia un framebuffer RGBA en un <canvas> y devuelve a la escena los eventos de puntero y de teclado del DOM. Sin compositor, sin SharedArrayBuffer, sin cabeceras de aislamiento de origen cruzado: cualquier alojamiento estático lo sirve.

//go:build js && wasm

package main

import "github.com/go-widgets/webcanvas"

func main() { webcanvas.Run("screen", myScene()) }

La escena implementa App: Size, Draw(buf []byte) y un método por tipo de evento, cada uno indicando si algo ha cambiado para que un fotograma sin cambios no se repinte. También puede implementar Ticker, Animator, Resizer o Scroller.

La galería y app-template funcionan así.

O deje que window elija. Desde window v0.87.0, window.Open compilado para js/wasm en una página corriente devuelve un backend que dibuja en el <canvas> de la página (Config.Canvas, por defecto "screen") a través de webcanvas. Una aplicación escrita contra window se ejecuta entonces sin cambios como ventana nativa, en una pestaña del navegador y en wasmdesk.

Una ventana en el escritorio wasmdesk

Dentro de un worker de wasmdesk, window.Open devuelve un cliente del compositor de navegador wasmdesk/wasmbox. Asigna su superficie en un SharedArrayBuffer, dice hello por su MessagePort, espera welcome, pinta en el búfer compartido y envía commit: la superficie entera, o solo los rectángulos dañados. Los mensajes input del compositor se convierten en toolkit.Event, como en X11.

Así, una aplicación escrita contra window funciona sin cambios como ventana nativa y como ventana de un escritorio en una pestaña del navegador. La demo del shell de escritorio hace exactamente eso, a partir de un solo código fuente.

El códec del protocolo está cubierto al 100 % en todas las plataformas. La prueba en vivo ejecuta Chromium headless contra el compositor wasmdesk real: lanza el cliente, lee los píxeles compuestos por el propio compositor, hace clic y comprueba que el clic ha llegado al widget.

Creada el por tannevaled

Modificada el por tannevaled