Repository navigation
v0.15.0
Oriel 0.15.0
A page drawn by the native renderer can now be ported to the Oriel renderer
and look the same: .oriel says everything the native renderer computes, a
page exports itself as views, and zig build check-views proves it.
HollerShare is the first app ported this way. GTK windows paint only what
changed.
Added
.orielviews can say everything the native renderer computes from
HTML and CSS, so an Oriel-renderer view can look exactly like the web
page it came from: per-side borders and border colors, dashed and dotted
borders, per-corner and elliptical radii,calc()lengths, gradients,
transforms, outlines and focus halos,position: relativeoffsets and
sticky, tables, scrollbar styling and color scheme,align-contentand
any flex direction, max-/fit-content text, keyboard hints for fields,
SVG icons (<icon>with<path>s), and spans that are underlined,
highlighted, boxed (inline<code>-style boxes) or links whose clicks
reach the app as their own ids.unset="..."gives a prop no value. A
test fails the build if a native prop is ever added that no attribute
sets.- Porting a page to the Oriel renderer:
ORIEL_NUI_EXPORTand
ORIEL_NUI_EXPORT_SCRIPTwrite a native-renderer page as.orielviews,
its states merged as blocks, andzig build check-viewsproves each
view compiles to the props the page had (docs/design/zig-ui-experiment.md,
"Porting a page"). Character entities (&, ) in markup. .orielblocks:@when (state)for the app's states
(View.setState), combined with media conditions, up to 64 blocks per
view, applied block by block instead of one compiled variant per
combination;@when (focus)and@when (hover)looks for the focused
and hovered nodes, which also style native fields' focus. Spans take
class..orielviews update in place:View.update(tree, base, bindings)edits
only the bound texts, tooltips and labels that changed, keeping the
view's native controls, scroll positions and media styles. Typed
property updates go straight to the tree (and Android's mirror) without
JSON.zig build bench-ui-updates -Dzig_ui=truemeasures both.- Zig-renderer apps:
Engine.setColorSchemepins dark or light;
Driver.dragtakes drags and drops (dropped files' paths from
Engine.drops); events the app emits reachDriver.eventas "message"
on every platform, as they did on Windows and Android.
Improved
- GTK: windows paint only what changed since the last frame (tiles and
patches GTK composites), and canvases are drawn at the display's real
fractional scale instead of being resampled every frame. An idle system
monitor took 3.7-7.4% of a core, now 1.5%.ORIEL_NUI_FULL_REDRAW=1
paints everything, to compare.
Fixed
- Typed property updates keep the props a backend callback still reads
until it returns. - System monitor (Oriel renderer): the process actions' copy submenu shows,
and copying or ending a process says whether it worked. - A view mounted where another one was starts from its own look (it showed
the old view's media blocks as already applied). - Linux: a
-Dnative_uibuild no longer links a WebKitGTK call for
transparent windows. - iOS (native and Oriel renderers): the status bar and home indicator areas
show the page's background, as CSS spreads the root's over the canvas,
instead of the system's white; the status bar's text follows its
lightness. - System monitor (Oriel renderer): no "0.0 GHz" on Apple Silicon, which
doesn't tell its CPU frequency; the frequency is hidden, as in the web
frontend, and the per-core chart drops its "0.0G". - Render bench: memory readings on macOS and iOS (resident size and
physical footprint, the app's process), instead of 0 MB. - Breakout:
zig build test-gamepasses with any renderer (the WebView
build left out the canvas the physics rules use). - iOS simulator builds no longer print codesign's "replacing existing
signature" as a failed command.