Views, events as messages, and a patch, over plain Avalonia
A program is a model, an update and a view. A view is a Bjolang value; an
event finds its message in the view its control was last given, and the next
view is compared with the last so only what differs is changed. Controls are
made with plain constructors and changed with SetValue, so nothing is
subclassed, and a program never names an Avalonia type.
Text, button, text input, checkbox, column and row. tests/app.bjo drives an
app through its real controls with no window.
🤖 Generated with [ECA](https://eca.dev) (anthropic/claude-opus-4-8)
Co-Authored-By: eca-agent <git@eca.dev>
2026-10-25 16:18:09 +01:00
|
|
|
(package
|
|
|
|
|
(name (bjogui))
|
|
|
|
|
(version "0.1.0")
|
|
|
|
|
(description "Desktop programs as a model, an update and a view, shown with Avalonia.")
|
|
|
|
|
(license "MPL-2.0")
|
|
|
|
|
|
|
|
|
|
;; Avalonia draws the controls. Avalonia.Desktop picks the platform: X11 on
|
|
|
|
|
;; Linux, Win32 on Windows, Cocoa on macOS.
|
|
|
|
|
(packages
|
|
|
|
|
(nuget (id "Avalonia") (version "11.3.2"))
|
|
|
|
|
(nuget (id "Avalonia.Desktop") (version "11.3.2"))
|
Controls of the program's own, drawn with a pen
A component draws itself with (bjogui draw), a pen over Avalonia's
DrawingContext, and hears the pointer, the wheel, the keys and the focus.
It keeps a state of its own between inputs, and sends outputs that drawn
makes the app's messages. It is drawn again only when its value, its state
or its size changes, and no Avalonia class is subclassed: the picture is a
DrawingImage on a canvas.
start-headless! sets Avalonia up with no screen, drawing with Skia, so
tests/components.bjo draws components and reads their pixels. The mixer
example has knobs and a timeline.
🤖 Generated with [ECA](https://eca.dev) (anthropic/claude-opus-4-8)
Co-Authored-By: eca-agent <git@eca.dev>
2026-10-25 20:34:19 +01:00
|
|
|
(nuget (id "Avalonia.Themes.Fluent") (version "11.3.2"))
|
|
|
|
|
;; A platform with no screen, and the drawing it uses, for tests: see
|
|
|
|
|
;; `start-headless!`.
|
|
|
|
|
(nuget (id "Avalonia.Headless") (version "11.3.2"))
|
|
|
|
|
(nuget (id "Avalonia.Skia") (version "11.3.2"))))
|