Zum Inhalt springen

Wie ein Widget auf den Bildschirm kommt

Ein Widget zeichnet über einen Painter; der Painter entscheidet, ob daraus Pixel oder Terminalzellen werden; ein Back-End stellt das Ergebnis dar.

Drei Schichten, und jede kennt nur die unter ihr:

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

Ein Widget erfährt nie, welchen Painter es bekommen hat. Ein Back-End erfährt nie, welche Widgets gezeichnet haben. Genau deshalb kann ein Widget-Baum in einem nativen Fenster, einem Browser und einem Terminal ohne eine Zeile bedingten Codes angezeigt werden.

Die Painter-Schnittstelledie Primitive, die optionalen Fähigkeiten, die beiden Painter
Das Toolkitder Widget-Satz, Themes, Layouts, Text und Barrierefreiheit
Skinsdie Teile und Zustände eines Widgets als Daten statt in Go beschreiben

Erstellt am von tannevaled

Geändert am von tannevaled