Aller au contenu
Toolkit

La boîte à outils

160 types de widgets dessinés à travers la jonction du painter : thèmes, mises en page, texte, saisie, accessibilité.

go-widgets/toolkit est le jeu de widgets. Chaque widget implémente la même interface — Bounds, SetBounds, Draw(p painter.Painter, theme *Theme), HitTest, OnEvent — si bien qu’un hôte traite de la même façon un bouton, un tableau et un calendrier d’événements. Bibliothèque standard uniquement, CGO_ENABLED=0, 100 % de couverture des instructions.

En v0.329.0, elle compte 160 types de widgets exportés en environ 69 000 lignes de code de widgets. Ces deux nombres sont mesurés à cette étiquette, pas reportés : le README de la boîte à outils donne les commandes, et il vaut mieux les relancer que répéter les chiffres.

Les familles

FamilleWidgets
ActionButton, ToggleButton, CheckButton, RadioButton + RadioGroup, Switch, SplitButton, IconButton, CycleButton, Chip, SegmentedBar
SaisieEntry, TextView (sélection, aperçu IME, plages de syntaxe, numéros de ligne), SpinButton, Scale, RangeSlider, SearchEntry, TagField, ComboBox, FormField avec Validate/Rule
SélectionListBox, TreeView, DropDown
ConteneursContainer avec un Layout interchangeable (FitLayout, BoxLayout, BorderLayout, CardLayout, FlowLayout) ; HBox, VBox, Grid, Frame, Dock, Border, Stack, Overlay, Paned, Expander, Accordion ; un constructeur déclaratif Node
NavigationMenu, MenuBar (avec Alt+lettre), ContextMenu, Popover, CommandPalette, Dialog, MessageDialog, Wizard, Notebook, ViewSwitcher, Carousel
RetourProgressBar, ProgressCircle, LevelBar, Spinner, Tooltip, Notification, Toast, Banner, Alert, Badge, Skeleton
DonnéesTable (édition de cellules, colonnes figées, lignes de groupe, agrégats, lignes dépliables), TreeTable, PropertyGrid, Kanban, Gantt, Agenda (semaine, mois, trimestre, année ; plusieurs calendriers)
GraphiquesLineChart, BarChart, PieChart, AreaChart, ScatterChart, RadarChart, Gauge, Sparkline
CompositesFileChooser, ColorChooser, ColorPicker, FontChooser, Calendar, DatePicker, DateRangePicker, TimePicker, MarkdownView, MarkdownEditor, TerminalView
ShellWindow avec décorations côté client, HeaderBar, Toolbar, Statusbar, StatusIcon, StatusArea, Wallpaper, Thumbnail

Tous, en direct : la galerie.

Thèmes

Une seule valeur Theme se propage en cascade dans tout l’arbre : changez une couleur à la racine et chaque widget se repeint avec elle. DefaultLight() et DefaultDark() sont intégrés, et LoadGTKTheme(css) lit le bloc @define-color de n’importe quel thème GTK 3 ou libadwaita — Adwaita, WhiteSur, Solarized — dans un Theme.

Texte

Par défaut, la police compilée est une police bitmap 5×7, pour que les tests au pixel gardent leur géométrie. Un seul appel fait passer toute l’interface à un texte anticrénelé et mis en forme :

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

La police vient de go-opentype/fonts et est rastérisée par go-opentype, en Go, sans bibliothèque de polices en C ni recherche de polices système. NewTrueTypeFont(ttf, px) charge une autre police ; NewFallbackFont en enchaîne plusieurs, par exemple pour ajouter une police CJK ou arabe ; le champ Font propre à un widget remplace la police globale pour ce seul widget.

Saisie

Souris, clavier, composition IME, tactile (EventTouchStart/Move/End, avec GestureRecognizer pour les tapes, les appuis longs et les balayages), glisser-déposer (DragSource, DropTarget). La sélection de plusieurs lignes dans ListBox, Table et TreeView fonctionne à la souris comme au clavier, et respecte ⌘ aussi bien que Ctrl, car sous macOS Ctrl-clic est le clic secondaire.

Accessibilité

Une boîte à outils qui peint ses propres pixels ne donne rien à lire à un lecteur d’écran à moins de dire ce qu’elle a dessiné. Les widgets implémentent Accessible — un rôle, un nom, une valeur — et CollectA11y les rassemble pour que l’hôte les publie : AT-SPI sous Linux via window, et une hiérarchie de vues virtuelle sur Android.

Créée le par tannevaled

Modifiée le par tannevaled