Skip to content

v0.15.0

Choose a tag to compare

@github-actions github-actions released this 14 Oct 20:11
· 43 commits to main since this release

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

  • .oriel views 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: relative offsets and
    sticky, tables, scrollbar styling and color scheme, align-content and
    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_EXPORT and
    ORIEL_NUI_EXPORT_SCRIPT write a native-renderer page as .oriel views,
    its states merged as blocks, and zig build check-views proves each
    view compiles to the props the page had (docs/design/zig-ui-experiment.md,
    "Porting a page"). Character entities (&amp;, &#10;) in markup.
  • .oriel blocks: @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.
  • .oriel views 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=true measures both.
  • Zig-renderer apps: Engine.setColorScheme pins dark or light;
    Driver.drag takes drags and drops (dropped files' paths from
    Engine.drops); events the app emits reach Driver.event as "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_ui build 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-game passes 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.