Saltar al contenido

El toolkit

160 tipos de widget dibujados a través de la costura del painter: temas, layouts, texto, entrada, accesibilidad.

go-widgets/toolkit es el conjunto de widgets. Todos los widgets implementan la misma interfaz —Bounds, SetBounds, Draw(p painter.Painter, theme *Theme), HitTest, OnEvent—, de modo que un host trata igual un botón, una tabla y un calendario de eventos. Solo la biblioteca estándar, CGO_ENABLED=0, 100 % de cobertura de sentencias.

En la v0.329.0 tiene 160 tipos de widget exportados en unas 69 000 líneas de código de widgets. Esas dos cifras se midieron en esa etiqueta, no se arrastraron de antes: el README del toolkit da los comandos, y conviene volver a ejecutarlos en lugar de repetir las cifras.

Las familias

FamiliaWidgets
AcciónButton, ToggleButton, CheckButton, RadioButton + RadioGroup, Switch, SplitButton, IconButton, CycleButton, Chip, SegmentedBar
EntradaEntry, TextView (selección, vista previa de IME, tramos de sintaxis, números de línea), SpinButton, Scale, RangeSlider, SearchEntry, TagField, ComboBox, FormField con Validate/Rule
SelecciónListBox, TreeView, DropDown
ContenedoresContainer con un Layout intercambiable (FitLayout, BoxLayout, BorderLayout, CardLayout, FlowLayout); HBox, VBox, Grid, Frame, Dock, Border, Stack, Overlay, Paned, Expander, Accordion; un constructor declarativo Node
NavegaciónMenu, MenuBar (con Alt+letra), ContextMenu, Popover, CommandPalette, Dialog, MessageDialog, Wizard, Notebook, ViewSwitcher, Carousel
RespuestaProgressBar, ProgressCircle, LevelBar, Spinner, Tooltip, Notification, Toast, Banner, Alert, Badge, Skeleton
DatosTable (edición de celdas, columnas fijas, filas de grupo, agregados, expansores de fila), TreeTable, PropertyGrid, Kanban, Gantt, Agenda (semana, mes, trimestre, año; varios calendarios)
GráficosLineChart, BarChart, PieChart, AreaChart, ScatterChart, RadarChart, Gauge, Sparkline
CompuestosFileChooser, ColorChooser, ColorPicker, FontChooser, Calendar, DatePicker, DateRangePicker, TimePicker, MarkdownView, MarkdownEditor, TerminalView
ShellWindow con decoraciones del lado del cliente, HeaderBar, Toolbar, Statusbar, StatusIcon, StatusArea, Wallpaper, Thumbnail

Todos ellos, en vivo: la galería.

Temas

Un único valor Theme se propaga en cascada por todo el árbol: cambie un color en la raíz y todos los widgets se repintan con él. DefaultLight() y DefaultDark() vienen incorporados, y LoadGTKTheme(css) lee el bloque @define-color de cualquier tema de GTK 3 o libadwaita —Adwaita, WhiteSur, Solarized— y lo convierte en un Theme.

Texto

La fuente compilada por defecto es una fuente de mapa de bits de 5×7, para que las pruebas de píxeles conserven su geometría. Una sola llamada pasa toda la interfaz a texto con antialiasing y conformado:

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

La tipografía procede de go-opentype/fonts y la rasteriza go-opentype, en Go, sin biblioteca de fuentes en C ni búsqueda de fuentes del sistema. NewTrueTypeFont(ttf, px) carga otra tipografía; NewFallbackFont encadena varias, por ejemplo para añadir una tipografía CJK o árabe; el campo Font propio de un widget sustituye la global solo para ese widget.

Entrada

Ratón, teclado, composición IME, táctil (EventTouchStart/Move/End, con GestureRecognizer para toques, pulsaciones largas y deslizamientos), arrastrar y soltar (DragSource, DropTarget). La selección de varias filas en ListBox, Table y TreeView funciona con el ratón y con el teclado, y respeta ⌘ además de Ctrl, porque en macOS Ctrl-clic es el clic secundario.

Accesibilidad

Un toolkit que pinta sus propios píxeles no da a un lector de pantalla nada que leer a menos que diga lo que ha dibujado. Los widgets implementan Accessible —un rol, un nombre, un valor— y CollectA11y los reúne para que el host los publique: AT-SPI en Linux a través de window, y una jerarquía de vistas virtual en Android.

Creada el por tannevaled

Modificada el por tannevaled