Saltar al contenido

Cómo llega un widget a la pantalla

Un widget dibuja a través de un painter; el painter decide si eso se convierte en píxeles o en celdas de terminal; un backend presenta el resultado.

Tres capas, y cada una solo conoce la que tiene debajo:

toolkit widget tree          Button, Table, Agenda, VBox ...  (or a skin.Object)
        │  Draw(p painter.Painter, theme *Theme)
        ▼
painter.Painter              FillRect, StrokeRect, Text, PutPixel, ...
        │
        ├─ PixelPainter  → an RGBA []byte   → window, browser canvas, PNG, Android
        └─ CellPainter   → a grid of cells  → a terminal, as 24-bit ANSI

Un widget nunca sabe qué painter ha recibido. Un backend nunca sabe qué widgets han dibujado. Esa es toda la razón por la que un mismo árbol de widgets puede mostrarse en una ventana nativa, un navegador y un terminal sin una sola línea de código condicional.

La costura del painterlas primitivas, las capacidades opcionales, los dos painters
El toolkitel conjunto de widgets, temas, layouts, texto y accesibilidad
Skinsdescribir las partes y los estados de un widget como datos en lugar de en Go

Creada el por tannevaled

Modificada el por tannevaled