Zum Inhalt springen
Toolkit

Das Toolkit

160 Widget-Typen, gezeichnet über die Painter-Schnittstelle: Themes, Layouts, Text, Eingabe, Barrierefreiheit.

go-widgets/toolkit ist der Widget-Satz. Jedes Widget implementiert dieselbe Schnittstelle – Bounds, SetBounds, Draw(p painter.Painter, theme *Theme), HitTest, OnEvent –, sodass ein Host einen Button, eine Tabelle und einen Terminkalender gleich behandelt. Nur Standardbibliothek, CGO_ENABLED=0, 100 % Anweisungsabdeckung.

In v0.329.0 hat es 160 exportierte Widget-Typen in etwa 69.000 Zeilen Widget-Code. Beide Zahlen sind an diesem Tag gemessen, nicht übernommen: Das README des Toolkits nennt die Befehle, und man sollte sie erneut ausführen, statt die Zahlen zu wiederholen.

Die Familien

FamilieWidgets
AktionButton, ToggleButton, CheckButton, RadioButton + RadioGroup, Switch, SplitButton, IconButton, CycleButton, Chip, SegmentedBar
EingabeEntry, TextView (Auswahl, IME-Vorschau, Syntax-Spans, Zeilennummern), SpinButton, Scale, RangeSlider, SearchEntry, TagField, ComboBox, FormField mit Validate/Rule
AuswahlListBox, TreeView, DropDown
ContainerContainer mit austauschbarem Layout (FitLayout, BoxLayout, BorderLayout, CardLayout, FlowLayout); HBox, VBox, Grid, Frame, Dock, Border, Stack, Overlay, Paned, Expander, Accordion; ein deklarativer Node-Builder
NavigationMenu, MenuBar (mit Alt+Buchstabe), ContextMenu, Popover, CommandPalette, Dialog, MessageDialog, Wizard, Notebook, ViewSwitcher, Carousel
RückmeldungProgressBar, ProgressCircle, LevelBar, Spinner, Tooltip, Notification, Toast, Banner, Alert, Badge, Skeleton
DatenTable (Zellbearbeitung, fixierte Spalten, Gruppenzeilen, Aggregate, aufklappbare Zeilen), TreeTable, PropertyGrid, Kanban, Gantt, Agenda (Woche, Monat, Quartal, Jahr; mehrere Kalender)
DiagrammeLineChart, BarChart, PieChart, AreaChart, ScatterChart, RadarChart, Gauge, Sparkline
ZusammengesetztFileChooser, ColorChooser, ColorPicker, FontChooser, Calendar, DatePicker, DateRangePicker, TimePicker, MarkdownView, MarkdownEditor, TerminalView
ShellWindow mit clientseitigen Dekorationen, HeaderBar, Toolbar, Statusbar, StatusIcon, StatusArea, Wallpaper, Thumbnail

Jedes davon, live: die Galerie.

Themes

Ein einziger Theme-Wert kaskadiert durch den ganzen Baum: Ändert man eine Farbe an der Wurzel, zeichnet sich jedes Widget damit neu. DefaultLight() und DefaultDark() sind eingebaut, und LoadGTKTheme(css) liest den @define-color-Block jedes GTK-3- oder libadwaita-Themes – Adwaita, WhiteSur, Solarized – in ein Theme ein.

Text

Der einkompilierte Standard ist eine 5×7-Bitmap-Schrift, damit Pixeltests ihre Geometrie behalten. Ein Aufruf schaltet die ganze UI auf kantengeglätteten, geshapten Text um:

toolkit.UseOpenTypeText() // Atkinson Hyperlegible, bundled; js/wasm-safe

Die Schrift stammt aus go-opentype/fonts und wird von go-opentype gerastert, in Go, ohne C-Schriftbibliothek und ohne Suche nach Systemschriften. NewTrueTypeFont(ttf, px) lädt eine andere Schrift; NewFallbackFont verkettet mehrere, etwa um eine CJK- oder arabische Schrift hinzuzufügen; das eigene Font-Feld eines Widgets überschreibt die globale Schrift nur für dieses Widget.

Eingabe

Maus, Tastatur, IME-Komposition, Touch (EventTouchStart/Move/End, mit GestureRecognizer für Tippen, langes Drücken und Wischen), Drag and Drop (DragSource, DropTarget). Mehrfachauswahl von Zeilen in ListBox, Table und TreeView funktioniert mit der Maus und mit der Tastatur und beachtet ⌘ ebenso wie Ctrl, weil unter macOS Ctrl-Klick der Sekundärklick ist.

Barrierefreiheit

Ein Toolkit, das seine eigenen Pixel zeichnet, gibt einem Screenreader nichts zu lesen, solange es nicht sagt, was es gezeichnet hat. Widgets implementieren Accessible – eine Rolle, einen Namen, einen Wert –, und CollectA11y sammelt sie, damit der Host sie veröffentlicht: AT-SPI unter Linux über window und eine virtuelle View-Hierarchie unter Android.

Erstellt am von tannevaled

Geändert am von tannevaled