Fire UI 0.6.0
Pre-releaseAmbient values keyed by type, a compact instrument theme, and the widget cleanups
that exposed. Breaking throughout; consumers update directly.
Ambient values. A node's environment was a single slot of a single type, so
publishing one type to a child evicted whatever it had inherited and blocked that
type from reaching it ever again. A virtual list publishes selection to each row,
which quietly cost every row its view of the theme: after a theme change, rows that
existed beforehand kept the old one and a list showed two label insets at once.
Values are now a small type-keyed map. Publishing replaces one type and leaves the
rest, inheritance stops per type at the node that publishes it, and nodes share one
map until something publishes its own — so installing a value for a subtree still
allocates once for the subtree rather than once per node.
A second scale. Palette::slate_dark is cool graphite with a signal-blue
accent; Scale::compact halves the rhythm — smaller type, tighter padding, squarer
corners, shorter controls. Theme::compact pairs them. Palette and scale remain
independent axes, so any pairing works, and nothing in the framework prefers a
shipped pair. Changing only the palette repaints; changing the scale relays.
Widgets. VirtualList takes a RowHeight: a number, or a rule read from the
theme so rows tighten with it. Scrollbar geometry takes the strip width rather than
a theme, so a scrolling widget remembers two floats instead of a palette.
Lifecycle::Inherited now reaches every widget whose inherited environment changed,
which is what a widget deciding which children to own needs and cannot get from
layout alone.
Composability, now under test. A custom widget that never mentions a theme; a
shipped control with none installed; and a palette whose surfaces are transparent,
which is how a control is asked for behaviour without chrome. The core itself has no
theme concept at all — theming lives entirely in the optional widgets crate.
Full notes in
CHANGELOG.md.
Known gap: a virtual list publishes itself but not per-row list items, so rows reach
assistive technology as their own content rather than as selectable entries.
Verified: cargo fmt, cargo test --workspace, cargo clippy -D warnings including
each native feature independently, cargo doc and cargo package. The native probe
passes end to end under Xvfb, including AT-SPI activation and all six EditableText
methods. Idle, paused and post-theme-swap CPU all record zero ticks.