slint

package module
v0.24.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 15, 2026 License: MIT Imports: 13 Imported by: 0

README

go-slint (wip) go docs

An alternate take on Go bindings for Slint inspired by the development process found in Wails, if you would like to use more faithful bindings that are officially supported, see this pull request.

Quickstart

# Requires Go 1.23+ and a C compiler for cgo
go install github.com/rileylov/go-slint/cmd/goslint@latest

goslint init myapp     # scaffold go.mod + app.slint + main.go + ui/
cd myapp
goslint dev            # run; edit .slint → live in-process reload, edit .go → rebuild

Hello World

// app.slint
export component HelloWorld inherits Window {
    preferred-width: 280px;
    preferred-height: 180px;
    in property <string> Greeting: "_____";
    callback Greet();

    VerticalBox {
        alignment: center;
        Text {
            horizontal-alignment: center;
            text: root.Greeting + " world";
            font-size: 28px;
        }

        Button {
            text: "Greet!";
            clicked => { root.Greet() }
        }
    }
}
// main.go
func main() {
	win, err := ui.NewHelloWorld()
	if err != nil {
		log.Fatal(err)
	}
	defer win.Close()
	win.OnGreet(func() {
		win.SetGreeting("Hello")
	})
	if err := win.Run(); err != nil {
		log.Fatal(err)
	}
}

See full example: examples/helloworld.

⚠️ Warning before using goslint ⚠️ The majority of the code in this repository was generated by an LLM, the purpose of go-slint is to combine the developer experience of wails and the incredible work of the Slint team to create a library for quick gui development that I will be using for various future GUI projects, use go-slint at your own risk.

Ship it:

goslint build -o myapp .                # one self-contained desktop binary
goslint android build -o myapp.apk .    # signed APK (arm64-v8a + x86_64)

run goslint or read through the Guide to see the full list of commands.

Platforms

Platform Status
Linux (amd64) ✅ tested
Android (arm64-v8a) ✅ tested
Windows (amd64) ✅ tested
macOS (arm64) ✅ tested
iOS (arm64) ✅ tested (simulator)

Documentation

  • Guide (DOCS.md) - step-by-step: properties, callbacks, globals, structs, enums, arrays, models, the dynamic API, and shipping.
  • Examples - runnable typed and dynamic apps.

License

the go-slint bindings are licensed under MIT.

Before shipping your application, read the full Slint license here.

Documentation

Overview

Package slint provides Go bindings for the Slint declarative UI toolkit.

UIs are written in Slint's .slint markup language and driven from Go. This package compiles .slint markup at runtime (via Slint's interpreter), creates component instances, and lets you read and write properties, handle callbacks, back models, load images, and run timers — all from Go.

Threading

Slint is thread-affine. Compile, Create, property/callback access, and Run must all happen on a single OS thread. Lock it at program start:

func init() { runtime.LockOSThread() }

To touch the UI from another goroutine, post work with InvokeFromEventLoop.

A minimal program

package main

import (
	_ "embed"
	"runtime"

	"github.com/rileylov/go-slint"
)

func init() { runtime.LockOSThread() }

//go:embed app.slint
var ui string

func main() {
	app, err := slint.Compile(ui, slint.WithStyle("fluent"))
	if err != nil {
		panic(err)
	}
	defer app.Close()

	win, err := app.Create("AppWindow")
	if err != nil {
		panic(err)
	}
	defer win.Close()

	win.OnCallback("clicked", func([]any) any {
		n, _ := win.Int("counter")
		win.Set("counter", n+1)
		return nil
	})
	win.Run()
}

Value mapping

Properties and callback arguments/returns convert between Slint and Go as:

void                          <-> nil
int / float / length / angle  <-> float64
bool                          <-> bool
string                        <-> string
struct / anonymous object     <-> map[string]any
enum                          <-> [Enum]{Type, Value}
color / solid brush           <-> [Color]
gradient brush                <-> [Gradient] (linear or radial)
image                         <-> *[Image] (write; load via [LoadImage])
array / model                 <-> []any (read) or [*ModelHandle] (write)

Build a writable model with NewSliceModel (or NewModel for a custom Model) and assign it to an array/model property; mutating it notifies Slint.

Resource ownership

A few types own native (Slint/Rust) memory the Go garbage collector can't reclaim, so release them explicitly — ideally with defer:

  • Compilation.Close after compiling;
  • Instance.Close for each window (also released when the window closes);
  • [Image.Close] for images you create or read back from a property;
  • [Timer.Close] for timers.

Forgetting these leaks native memory. During development, run with the GOSLINT_DEV environment variable set: goslint then warns to stderr whenever such an object is garbage-collected without having been released — a quick way to catch a missing Free/Close. (It only warns; it never frees off the UI thread, which would be unsafe.)

See the examples directory for runnable apps (hello, counter, todo, clock, interop, chartstress) and CLAUDE.md for the architecture.

The package overview lives in doc.go.

Index

Constants

View Source
const (
	TimerSingleShot = slintsys.TimerSingleShot
	TimerRepeated   = slintsys.TimerRepeated
)

Timer modes.

Variables

This section is empty.

Functions

func As added in v0.18.0

func As[T any](v any) (T, error)

As converts a dynamic property/callback value to the typed T, returning a clear error instead of panicking when the value isn't that type. The generated typed getters build on it, so an unexpected value surfaces as an error — matching the dynamic API (Instance.Int, etc.) rather than a panic mid-getter.

func ClearTranslator added in v0.4.0

func ClearTranslator()

ClearTranslator removes the translator so `@tr` shows its source strings again.

func ClipboardText added in v0.4.0

func ClipboardText() string

ClipboardText returns the system clipboard's text ("" if empty or unavailable). The clipboard is provided by the backend, so call it once a window exists.

func GLProcAddress added in v0.22.0

func GLProcAddress(name string) unsafe.Pointer

GLProcAddress resolves an OpenGL function by name — Slint's own context loader. Only valid inside a rendering-notifier callback (nil elsewhere). Designed to plug straight into a GL binding, e.g. gl.InitWithProcAddrFunc(slint.GLProcAddress).

func InitHeadless

func InitHeadless() error

InitHeadless installs the headless testing backend (mock time, no real windows). Intended for tests; call once per process on the UI thread.

func InvokeFromEventLoop

func InvokeFromEventLoop(fn func()) error

InvokeFromEventLoop posts fn to run once on the event-loop (UI) thread. Safe to call from any goroutine; it is the only safe way to touch UI state (properties, models, callbacks) from a background goroutine.

func LiveReload

func LiveReload(path, component string, bind func(*Instance) error, opts ...Option) error

LiveReload compiles the .slint file at path, creates component (or the last exported one if component is ""), wires it with bind, shows it, and then hot-reloads whenever any .slint file beside it changes on disk — recompiling and swapping the content into the SAME window in place (no new window, no Go rebuild). It runs the event loop and returns when the window is closed.

It's the engine behind `goslint dev`: because the interpreter loads markup at runtime, editing a .slint and saving updates the UI live. bind is re-invoked on each reload with the fresh instance, so wire your callbacks/properties there (note: property state resets on reload). Call runtime.LockOSThread first, as with any Slint program.

func MockElapsedTime

func MockElapsedTime(ms uint64)

MockElapsedTime advances the headless backend's mock clock by ms milliseconds.

func Quit

func Quit() error

Quit asks the running event loop to exit.

func Run

func Run() error

Run enters the Slint event loop until the last window closes or Quit is called. It blocks and must run on the UI thread.

func RunUntilQuit added in v0.4.0

func RunUntilQuit() error

RunUntilQuit is like Run but does not exit when the last window closes — it runs until Quit. Use it for multi-window apps that open and close windows dynamically. Show at least one window before calling it.

func SetClipboardText added in v0.4.0

func SetClipboardText(s string) error

SetClipboardText sets the system clipboard text.

func SetTranslator added in v0.4.0

func SetTranslator(fn func(msgid string) string) error

SetTranslator installs a function that translates `@tr("…")` source strings at runtime, and re-renders existing translations. Call it again to switch languages (e.g. with a different lookup table); the handler returns the original string when it has no translation. Call on the UI thread, after a window/backend exists.

func SingleShot

func SingleShot(intervalMs uint64, fn func())

SingleShot fires fn once after the given number of milliseconds.

func Version

func Version() string

Version returns the Slint version these bindings were built against.

Types

type Callback

type Callback = slintsys.CallbackFunc

Callback is a Go handler invoked by Slint. Its args and return use the same Go value representation as properties (float64, bool, string, map[string]any, Enum, nil, ...).

type Color

type Color = slintsys.Color

Color is an RGBA color (a `color` property, or a solid `brush`).

type Compilation

type Compilation struct {
	// contains filtered or unexported fields
}

Compilation is a successfully compiled set of components.

func Compile

func Compile(source string, opts ...Option) (*Compilation, error)

Compile compiles `.slint` source. It returns a *DiagnosticError if the source has errors.

func CompileFS added in v0.6.0

func CompileFS(fsys fs.FS, entry string, opts ...Option) (*Compilation, error)

CompileFS compiles the `.slint` file `entry` from `fsys` (typically an embed.FS), resolving every relative import through the same filesystem — so a multi-file component compiles entirely from embedded bytes, with nothing on disk and no temp files. Import paths are resolved relative to the FS root (i.e. as embedded), which matches `//go:embed` when the embedding .go sits alongside the markup. This is the self-contained compile path for generated code and for hand-rolled stateful reload.

Relative `@image-url` references resolve through fsys too: embed the image files alongside the markup and they ship inside the binary (the interpreter otherwise loads images from disk at render time, which breaks once the binary leaves the source tree). References that don't resolve in fsys — absolute paths, data: URLs, files that aren't embedded — keep the interpreter's normal disk resolution.

//go:embed app.slint components/card.slint icons/logo.png
var ui embed.FS
comp, err := slint.CompileFS(ui, "app.slint")

func CompileFile

func CompileFile(path string, opts ...Option) (*Compilation, error)

CompileFile compiles a `.slint` file from disk.

func CompileSource added in v0.3.0

func CompileSource(path, source string, opts ...Option) (*Compilation, error)

CompileSource compiles markup from a string while treating it as if it lived at `path`, so relative imports (and @image-url) resolve from path's directory on disk. Generated typed code uses this so multi-file components work; for a single embedded file with no relative imports, plain Compile is enough.

func (*Compilation) Close

func (c *Compilation) Close()

Close releases the compilation's resources.

func (*Compilation) ComponentNames

func (c *Compilation) ComponentNames() []string

ComponentNames lists the exported components.

func (*Compilation) Create

func (c *Compilation) Create(name string) (*Instance, error)

Create instantiates the named component.

func (*Compilation) CreateWithWindow added in v0.5.0

func (c *Compilation) CreateWithWindow(name string, winOwner *Instance) (*Instance, error)

CreateWithWindow instantiates the named component reusing winOwner's window, so the new content renders in the same on-screen window. Used by live reload to swap the UI in place instead of opening a new window.

type DataTransfer added in v0.8.0

type DataTransfer = slintsys.DataTransfer

DataTransfer is a drag-and-drop payload — Slint 1.17's `data-transfer` type carried by a DragArea. go-slint bridges its plain-text content: return one from a callback wired to produce a `data-transfer` (e.g. `DragArea.data: Api.makeData(...)`), and read it from a DropArea's DropEvent (`event.data`). A non-empty payload is required for a drag to start.

func NewDataTransfer added in v0.8.0

func NewDataTransfer(text string) DataTransfer

NewDataTransfer builds a drag payload carrying text (e.g. an item id or JSON).

type Diagnostic added in v0.11.0

type Diagnostic = slintsys.Diagnostic

Diagnostic is a single compiler message (error, warning, or note).

type DiagnosticError

type DiagnosticError struct {
	Diagnostics []Diagnostic
}

DiagnosticError reports one or more compiler errors.

func (*DiagnosticError) Error

func (e *DiagnosticError) Error() string

Error implements the error interface, listing the compiler diagnostics.

type Enum

type Enum = slintsys.Enum

Enum is the Go representation of a Slint enumeration value (e.g. Enum{Type: "TextHorizontalAlignment", Value: "center"}). Structs are represented as map[string]any.

type FileLoader added in v0.3.0

type FileLoader = slintsys.FileLoader

FileLoader resolves a `.slint` import path to source; ok=false means "not found" (normal include-path/disk resolution then proceeds). Builtins like std-widgets are handled internally and never passed to it.

type Gradient added in v0.2.0

type Gradient = slintsys.Gradient

Gradient is a gradient `brush` value (linear by default, or Radial); set it on a brush/color property, or read one back from Get. GradientStop is one stop.

type GradientStop added in v0.2.0

type GradientStop = slintsys.GradientStop

GradientStop is one stop of a Gradient: Pos in 0..=1 with a Color.

type Image

type Image = slintsys.Image

Image is a loaded image; assign it to an `image` property and Close it when done.

TODO(v1.0): make Image (and Timer) a real struct rather than a slintsys alias, so the public API doesn't leak Layer 1 into the v1 contract. This requires wrapping/unwrapping at every Value boundary (Set, Get, callback args, model rows, nested structs), so it's a v1.0 task — see "Toward v1.0" in CLAUDE.md — not a 0.x patch.

func LoadImage

func LoadImage(path string) (*Image, error)

LoadImage loads an image (PNG/JPEG) from a file path.

func NewImage added in v0.4.0

func NewImage(src image.Image) (*Image, error)

NewImage builds an image from any Go image.Image — decoded (image/png, image/jpeg), drawn (image/draw, plotting libs), or generated. Use this to display dynamic content the way Slint's SharedPixelBuffer does in Rust. The pixels are copied, so the source can be reused or freed afterward.

It converts to non-premultiplied RGBA (Slint's expected format); note Go's image.RGBA is *premultiplied*, which this handles correctly.

func NewImageFromData added in v0.14.0

func NewImageFromData(data []byte, format string) (*Image, error)

NewImageFromData builds a raster image from in-memory encoded bytes (PNG/JPEG/…), decoded by Slint. format is an optional lowercase hint ("png", "jpeg", …); "" lets Slint auto-detect. For a Go image.Image (decoded, drawn, or generated), use NewImage instead.

func NewImageFromGLTexture added in v0.22.0

func NewImageFromGLTexture(textureID uint32, width, height int, bottomLeftOrigin bool) (*Image, error)

NewImageFromGLTexture wraps an OpenGL 2D RGBA texture you own as an Image — zero-copy: Slint samples the live texture every frame, so updating the texture (in a rendering-notifier callback) updates what's displayed without re-sending pixels. This is the high-throughput path for video/game/visualization frames; compare NewImageRGBA, which copies the pixels on every call.

Rules: create/update the texture inside the notifier callback (same GL context), keep it alive as long as any property shows the Image, and Close the Image before deleting the texture. bottomLeftOrigin flips sampling for FBO-rendered (bottom-up) textures.

func NewImageFromSVG added in v0.14.0

func NewImageFromSVG(data []byte) (*Image, error)

NewImageFromSVG builds an image from in-memory SVG bytes (e.g. a go:embed'd .svg). Slint rasterizes the SVG at render size, so it stays crisp at any scale and needs no file on disk — ideal for self-contained binaries and APKs, where @image-url can't resolve a path. Assign it to an `image` property; Close it when done.

func NewImageRGB added in v0.4.0

func NewImageRGB(pix []byte, w, h int) (*Image, error)

NewImageRGB builds an image from a tightly-packed RGB8 buffer (w*h*3 bytes).

func NewImageRGBA added in v0.4.0

func NewImageRGBA(pix []byte, w, h int) (*Image, error)

NewImageRGBA builds an image from a tightly-packed RGBA8 buffer (w*h*4 bytes, row-major, non-premultiplied alpha). The bytes are copied.

type Instance

type Instance struct {
	// contains filtered or unexported fields
}

Instance is a live component instance.

func (*Instance) Bool

func (i *Instance) Bool(name string) (bool, error)

Bool reads a boolean property.

func (*Instance) Close

func (i *Instance) Close()

Close releases the instance.

func (*Instance) Float

func (i *Instance) Float(name string) (float64, error)

Float reads a numeric property.

func (*Instance) Get

func (i *Instance) Get(name string) (any, error)

Get reads a property as a Go value (float64, bool, string, or nil).

func (*Instance) GetGlobal

func (i *Instance) GetGlobal(global, name string) (any, error)

GetGlobal reads a property of an exported global singleton.

func (*Instance) Hide

func (i *Instance) Hide() error

Hide hides the window.

func (*Instance) Int

func (i *Instance) Int(name string) (int, error)

Int reads a numeric property as an int.

func (*Instance) Invoke

func (i *Instance) Invoke(name string, args ...any) (any, error)

Invoke calls a callback or function, returning its result (nil for void).

func (*Instance) InvokeGlobal

func (i *Instance) InvokeGlobal(global, name string, args ...any) (any, error)

InvokeGlobal calls a callback or function on an exported global.

func (*Instance) OnCallback

func (i *Instance) OnCallback(name string, fn Callback) error

OnCallback installs a handler for the named callback.

func (*Instance) OnCloseRequested added in v0.4.0

func (i *Instance) OnCloseRequested(handler func() (allowClose bool))

OnCloseRequested registers a handler invoked when the window's close is requested (the user clicking the close button, or RequestClose). Return true to allow the window to close, false to keep it open — e.g. to show a confirm dialog or save first. Runs on the event loop.

func (*Instance) OnGlobalCallback

func (i *Instance) OnGlobalCallback(global, name string, fn Callback) error

OnGlobalCallback installs a handler for a callback on an exported global.

func (*Instance) RegisterFontFromMemory added in v0.4.0

func (i *Instance) RegisterFontFromMemory(data []byte) error

RegisterFontFromMemory registers a font from bytes (e.g. a go:embed'd .ttf). The data is copied and kept for the process. (You can also just `import "font.ttf"` in your .slint, which the interpreter registers for you.)

func (*Instance) RegisterFontFromPath added in v0.4.0

func (i *Instance) RegisterFontFromPath(path string) error

RegisterFontFromPath registers a TrueType/OpenType font file so `.slint` `font-family` can use it. It applies to all windows (registered into the shared context); call it before the text using the font is shown.

func (*Instance) RequestClose added in v0.4.0

func (i *Instance) RequestClose()

RequestClose asks the window to close, running the OnCloseRequested handler — as if the user clicked the close button.

func (*Instance) RequestRedraw added in v0.2.0

func (i *Instance) RequestRedraw()

RequestRedraw asks the window to repaint on the next frame.

func (*Instance) Run

func (i *Instance) Run() error

Run shows the window and runs the event loop, blocking until the window closes.

func (*Instance) ScaleFactor added in v0.2.0

func (i *Instance) ScaleFactor() float32

ScaleFactor returns the window's device-pixel ratio (physical ÷ logical pixels).

func (*Instance) Set

func (i *Instance) Set(name string, v any) error

Set writes a property from a Go value.

func (*Instance) SetFullscreen added in v0.2.0

func (i *Instance) SetFullscreen(on bool)

SetFullscreen toggles fullscreen for the window.

func (*Instance) SetGlobal

func (i *Instance) SetGlobal(global, name string, v any) error

SetGlobal writes a property of an exported global singleton.

func (*Instance) SetMaximized added in v0.2.0

func (i *Instance) SetMaximized(on bool)

SetMaximized toggles the maximized state of the window.

func (*Instance) SetMinimized added in v0.2.0

func (i *Instance) SetMinimized(on bool)

SetMinimized toggles the minimized (iconified) state of the window.

func (*Instance) SetRenderingNotifier added in v0.22.0

func (i *Instance) SetRenderingNotifier(fn func(RenderingState)) error

SetRenderingNotifier registers fn to run at each rendering phase, on the UI thread with the window's OpenGL context current — the hook for custom GPU drawing under/over the UI and for zero-copy texture updates (see NewImageFromGLTexture). GL renderer only (femtovg, the desktop default): with SLINT_BACKEND=software this returns an error. OpenGL calls are valid only inside fn; resolve them through GLProcAddress. See examples/glunderlay and examples/glvideo.

func (*Instance) SetWindowPosition added in v0.2.0

func (i *Instance) SetWindowPosition(x, y int)

SetWindowPosition moves the window (physical pixels). No-op on Wayland; see Instance.WindowPosition.

func (*Instance) SetWindowSize added in v0.2.0

func (i *Instance) SetWindowSize(w, h int)

SetWindowSize sets the window's size in physical pixels.

func (*Instance) Show

func (i *Instance) Show() error

Show makes the window visible without blocking.

func (*Instance) Snapshot added in v0.4.0

func (i *Instance) Snapshot() (*image.NRGBA, error)

Snapshot renders the window's current contents to an image.NRGBA — handy for screenshots, export (encode it with image/png), or visual tests. It may re-render and can be slow; the window should be created (and usually shown) first.

func (*Instance) SnapshotRGBA added in v0.4.0

func (i *Instance) SnapshotRGBA() (pix []byte, w, h int, err error)

SnapshotRGBA is like Snapshot but returns the raw straight-RGBA8 bytes (w*h*4) without allocating an image, for callers that handle pixels directly.

func (*Instance) StartSystemMove added in v0.23.0

func (i *Instance) StartSystemMove() error

StartSystemMove hands the window to the OS for an interactive move — the building block for dragging a frameless window (`Window { no-frame: true; }`) by a custom title bar. Call it from a callback fired by a TouchArea pointer-event while the button is down; the OS then tracks the pointer until release, so one call moves the window for the whole gesture. Desktop winit backends only (Windows, macOS, X11, Wayland); elsewhere — headless tests, Android — it returns an error. This is winit's drag_window escape hatch; see examples/frameless for the wiring.

func (*Instance) StartSystemResize added in v0.23.0

func (i *Instance) StartSystemResize(edge ResizeEdge) error

StartSystemResize is Instance.StartSystemMove for resizing: the OS grabs the pointer and resizes the window from the given edge or corner until the button is released (winit's drag_resize_window). Pair the grab areas with the matching `mouse-cursor` (ew-resize, ns-resize, nwse-resize, …) so the pointer advertises the resize.

func (*Instance) Str

func (i *Instance) Str(name string) (string, error)

Str reads a string property.

func (*Instance) WindowPosition added in v0.2.0

func (i *Instance) WindowPosition() (x, y int)

WindowPosition returns the window's top-left in physical pixels. It is a no-op on Wayland (the compositor controls placement); it works on X11, Windows, and macOS.

func (*Instance) WindowSize added in v0.2.0

func (i *Instance) WindowSize() (w, h int)

WindowSize returns the window's size in physical pixels (divide by Instance.ScaleFactor for logical .slint pixels). Most reliable once the window is shown.

type LiveModel added in v0.15.0

type LiveModel interface{ Handle() *ModelHandle }

LiveModel is a model bindable to a `[T]` property so its rows update in place — a *SliceModel, or the *ModelHandle returned by NewModel. The generated typed Set<Name>Model setters (emitted only for array properties) accept it; unlike the snapshot Set<Name>([]T), the binding stays live (Append/SetRowData/RemoveAt flow to the UI per row).

type Model

type Model = slintsys.Model

Model is a data source backing a Slint model property / `for` loop.

type ModelHandle

type ModelHandle = slintsys.ModelHandle

ModelHandle binds a Model for use as a property value; report data changes via its Notify* methods. Obtain one with NewModel or SliceModel.Handle.

func NewModel

func NewModel(m Model) *ModelHandle

NewModel binds a custom Model implementation so it can be assigned to a property.

type Option

type Option func(*slintsys.Compiler)

Option configures a compilation.

func WithFileLoader added in v0.3.0

func WithFileLoader(fn FileLoader) Option

WithFileLoader installs a fallback resolver for `.slint` imports, letting a multi-file component compile entirely from in-memory source (no files on disk). Generated typed code uses this to embed every imported file.

func WithIncludePaths

func WithIncludePaths(paths ...string) Option

WithIncludePaths sets the paths used to resolve `.slint` imports.

func WithLibraryPaths added in v0.2.0

func WithLibraryPaths(libs map[string]string) Option

WithLibraryPaths maps `@library` import names to their paths, e.g. WithLibraryPaths(map[string]string{"mylib": "./libs/mylib"}) resolves `import { Foo } from "@mylib/foo.slint"`.

func WithStyle

func WithStyle(style string) Option

WithStyle selects the widget style (e.g. "fluent", "material", "cupertino"). Required for `.slint` files that import "std-widgets.slint".

type RenderingState added in v0.22.0

type RenderingState int

RenderingState identifies the phase a rendering notifier is called at.

const (
	// RenderingSetup: the window's graphics context was created — initialize your
	// GL state here (e.g. go-gl's gl.InitWithProcAddrFunc(slint.GLProcAddress)).
	RenderingSetup RenderingState = slintsys.RenderingSetup
	// BeforeRendering: about to render the scene — draw underlays and upload
	// textures here (they appear beneath the UI; give the Window a transparent
	// background so they show through).
	BeforeRendering RenderingState = slintsys.BeforeRendering
	// AfterRendering: scene rendered, not yet presented — draw overlays here.
	AfterRendering RenderingState = slintsys.AfterRendering
	// RenderingTeardown: the context is going away — release GL resources.
	RenderingTeardown RenderingState = slintsys.RenderingTeardown
)

type ResizeEdge added in v0.23.0

type ResizeEdge int

ResizeEdge identifies the window edge or corner an interactive resize grabs (see Instance.StartSystemResize).

const (
	ResizeEast ResizeEdge = iota
	ResizeNorth
	ResizeNorthEast
	ResizeNorthWest
	ResizeSouth
	ResizeSouthEast
	ResizeSouthWest
	ResizeWest
)

Resize edges/corners, matching winit's ResizeDirection.

type SliceModel

type SliceModel struct {
	// contains filtered or unexported fields
}

SliceModel is a built-in slice-backed Model whose mutators auto-notify Slint.

func NewSliceModel

func NewSliceModel(items ...any) *SliceModel

NewSliceModel creates a slice-backed model from the given items.

func (*SliceModel) Append

func (s *SliceModel) Append(v any)

Append adds an item and notifies Slint.

func (*SliceModel) Close

func (s *SliceModel) Close()

Close releases the model's binding handle.

func (*SliceModel) Handle

func (s *SliceModel) Handle() *ModelHandle

Handle returns the binding handle (also accepted directly by property setters).

func (*SliceModel) Len

func (s *SliceModel) Len() int

Len reports the number of rows.

func (*SliceModel) RemoveAt

func (s *SliceModel) RemoveAt(row int)

RemoveAt removes the item at row and notifies Slint.

func (*SliceModel) RowCount

func (s *SliceModel) RowCount() int

RowCount returns the number of rows. Part of the Model interface.

func (*SliceModel) RowData

func (s *SliceModel) RowData(row int) any

RowData returns the value at row, or nil if out of range. Part of the Model interface.

func (*SliceModel) SetRowData

func (s *SliceModel) SetRowData(row int, v any)

SetRowData replaces the value at row (when in range) and notifies Slint. Must be called on the UI thread. Part of the Model interface.

type Timer

type Timer = slintsys.Timer

Timer fires a Go callback after an interval. Timers fire only while the event loop runs (Run); create and start them after Create.

TODO(v1.0): wrap in a real struct (see the Image alias note above).

func NewTimer

func NewTimer() *Timer

NewTimer creates a stopped timer.

Directories

Path Synopsis
cmd
goslint command
Command goslint provisions the native Slint shim library for the go-slint bindings and wraps `go build`/`go run` with the right linker configuration.
Command goslint provisions the native Slint shim library for the go-slint bindings and wraps `go build`/`go run` with the right linker configuration.
goslint-gen command
Command goslint-gen generates a typed Go API from a .slint file.
Command goslint-gen generates a typed Go API from a .slint file.
examples
chartstress command
Shared throughput-harness logic for desktop (main.go) and Android (android_main.go).
Shared throughput-harness logic for desktop (main.go) and Android (android_main.go).
clock command
Command clock is an interactive go-slint example using the TYPED API: a repeating Timer driven from Go updates the typed `ticks` property once a second.
Command clock is an interactive go-slint example using the TYPED API: a repeating Timer driven from Go updates the typed `ticks` property once a second.
counter command
Command counter is an interactive go-slint example using the TYPED API (generated by `goslint generate` — see the directive).
Command counter is an interactive go-slint example using the TYPED API (generated by `goslint generate` — see the directive).
dragdrop command
Command dragdrop demonstrates Slint 1.17 drag & drop (DragArea/DropArea) with a real payload bridged to Go.
Command dragdrop demonstrates Slint 1.17 drag & drop (DragArea/DropArea) with a real payload bridged to Go.
frameless command
Command frameless is a window with no OS decorations (no-frame) that still moves and resizes like a native one: a custom title bar starts an interactive OS move (StartSystemMove — winit's drag_window), and thin strips along the edges start an interactive OS resize (StartSystemResize).
Command frameless is a window with no OS decorations (no-frame) that still moves and resizes like a native one: a custom title bar starts an interactive OS move (StartSystemMove — winit's drag_window), and thin strips along the edges start an interactive OS resize (StartSystemResize).
glunderlay command
Command glunderlay draws animated OpenGL *under* a Slint UI: the rendering notifier fires with the GL context current, go-gl loads Slint's own GL loader (gl.InitWithProcAddrFunc(slint.GLProcAddress)), and the window's transparent background lets the custom GPU drawing show through beneath the widgets.
Command glunderlay draws animated OpenGL *under* a Slint UI: the rendering notifier fires with the GL context current, go-gl loads Slint's own GL loader (gl.InitWithProcAddrFunc(slint.GLProcAddress)), and the window's transparent background lets the custom GPU drawing show through beneath the widgets.
glvideo command
Command glvideo streams 1280x720 animated frames into a Slint Image element and measures the DELIVERY cost of the two available pipelines, side by side:
Command glvideo streams 1280x720 animated frames into a Slint Image element and measures the DELIVERY cost of the two available pipelines, side by side:
gradient command
Command gradient demonstrates building gradient brushes in Go (slint.Gradient) and assigning them to a `brush` property: linear at various angles, radial, a multi-stop rainbow, and an animated rotating gradient driven by a timer.
Command gradient demonstrates building gradient brushes in Go (slint.Gradient) and assigning them to a `brush` property: linear at various angles, radial, a multi-stop rainbow, and an animated rotating gradient driven by a timer.
helloworld command
image command
Command image generates an image in Go and displays it in the UI via slint.NewImage (the SharedPixelBuffer path) — no image file on disk.
Command image generates an image in Go and displays it in the UI via slint.NewImage (the SharedPixelBuffer path) — no image file on disk.
interop command
Shared Go ⇄ Slint interop logic, used by both the desktop entry (main.go) and the Android entry (android_main.go).
Shared Go ⇄ Slint interop logic, used by both the desktop entry (main.go) and the Android entry (android_main.go).
multifile command
Command multifile is a TYPED example whose .slint imports another .slint (components/card.slint).
Command multifile is a TYPED example whose .slint imports another .slint (components/card.slint).
multiwindow command
Command multiwindow shows several top-level windows from one app.
Command multiwindow shows several top-level windows from one app.
notify command
Command notify demonstrates calling a native Android API from Go: a button in a Slint UI posts a real system notification through JNI (NotificationManager).
Command notify demonstrates calling a native Android API from Go: a button in a Slint UI posts a real system notification through JNI (NotificationManager).
systray command
Command systray demonstrates Slint 1.17's SystemTrayIcon: the app puts an icon in the system tray with a menu (Show/Hide, Quit).
Command systray demonstrates Slint 1.17's SystemTrayIcon: the app puts an icon in the system tray with a menu (Show/Hide, Quit).
threadcheck command
Command threadcheck demonstrates Slint's thread-affinity rule and the goslint dev guard for it.
Command threadcheck demonstrates Slint's thread-affinity rule and the goslint dev guard for it.
todo command
Command todo is an interactive go-slint example showing a live model: a Go SliceModel backs the list, and add/delete are handled in Go.
Command todo is an interactive go-slint example showing a live model: a Go SliceModel backs the list, and add/delete are handled in Go.
typed command
Command typed is the hello example using the TYPED API generated by `goslint generate` (see the //go:generate directive).
Command typed is the hello example using the TYPED API generated by `goslint generate` (see the //go:generate directive).
window command
Command window demonstrates Go-side window control: resizing, positioning, maximize/fullscreen, reading back size/position/scale-factor, and close handling (OnCloseRequested / RequestClose — confirm before exit).
Command window demonstrates Go-side window control: resizing, positioning, maximize/fullscreen, reading back size/position/scale-factor, and close handling (OnCloseRequested / RequestClose — confirm before exit).
Package slintsys is the low-level cgo binding to the goslint-sys C ABI (Layer 1).
Package slintsys is the low-level cgo binding to the goslint-sys C ABI (Layer 1).

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL