Un onglet de navigateur
La boîte à outils est en Go pur, sans dépendance au DOM ; GOOS=js GOARCH=wasm la compile
donc comme n’importe quelle autre cible. Deux façons de mettre le résultat sous les yeux de quelqu’un :
Un simple canvas
go-widgets/webcanvas copie un framebuffer
RGBA dans un <canvas> et renvoie les événements DOM de pointeur et de clavier
vers la scène. Pas de compositeur, pas de SharedArrayBuffer, pas d’en-têtes d’isolation
cross-origin : n’importe quel hébergement statique le sert.
//go:build js && wasm
package main
import "github.com/go-widgets/webcanvas"
func main() { webcanvas.Run("screen", myScene()) }La scène implémente App : Size, Draw(buf []byte), et une méthode par
type d’événement, chacune indiquant si quelque chose a changé, pour qu’une image inchangée
ne soit pas repeinte. Elle peut aussi implémenter Ticker, Animator, Resizer ou
Scroller.
La galerie et
app-template fonctionnent ainsi.
Ou bien laissez window choisir. Depuis window v0.87.0,
window.Open
compilé pour js/wasm sur une page ordinaire renvoie un back-end qui dessine dans le
<canvas> de la page (Config.Canvas, par défaut "screen") via webcanvas. Une
application écrite pour window fonctionne alors sans modification comme fenêtre native, dans
un onglet de navigateur et dans wasmdesk.
Une fenêtre sur le bureau wasmdesk
Dans un worker wasmdesk, window.Open
renvoie un client du compositeur de navigateur wasmdesk/wasmbox.
Il alloue sa surface dans un SharedArrayBuffer, dit
hello sur son MessagePort, attend welcome, peint dans le tampon partagé
et poste commit — la surface entière, ou seulement les rectangles endommagés.
Les messages input du compositeur deviennent des toolkit.Event, comme sous X11.
Une application écrite pour window s’exécute donc sans modification comme fenêtre native
et comme fenêtre d’un bureau dans un onglet de navigateur. La
démo du shell de bureau fait exactement
cela, à partir d’une seule source.
Le codec du protocole est couvert à 100 % sur chaque plateforme. La preuve en conditions réelles fait tourner un Chromium headless face au vrai compositeur wasmdesk : elle lance le client, lit les pixels composités par le compositeur lui-même, clique, et vérifie que le clic a atteint le widget.
Créée le par tannevaled
Modifiée le par tannevaled