isolen ui
A declarative element tree and layout engine for the isolen presentation engine, running over a backend neutral gfx device.
An html mock of ui.h widgets in the theme_hud palette. Try the controls.
What it gives you
Declarative tree
Declare boxes each frame with ui_box. Nobody ever passes a rect in, and the solver sizes everything.
Flexbox and grid
A css-like flexbox for rows and columns, plus a grid with track text, named areas and dense flow.
Only views scroll
Boxes let content spill by default. ui::view clips and brings up an overlay or gutter bar when it needs one.
Backend neutral
The tree, the draw list and the text layout never see a graphics api. Vulkan and metal are picked at runtime.
Live backend switching
gfx_switch rebuilds every image, svg and font on the new renderer. A refused switch keeps the old one running.
A million rows
lay_virtualize costs only the viewport. The prefix sum variant finds variable height rows with two binary searches.
Find your way
Getting started
App shell
Styling and themes
Core primitives
Widgets
Component kit
- Overview
- Calendars and dates
- Time and date time
- Colour picker
- Rollers, codes and spin boxes
- Charts
- GIF and animations
- Lottie
- 3D model viewer
- Rich text and images
- Pagers, carousels, tabs and tiles
- Splits, accordions and sidebars
- Forms and text areas
- Groups, toggles and matrices
- Ranges, arcs and scales
- On screen keyboard
- Chat transcripts and messages
- Questionnaire
- Tables and data tables
- Items, lists and trees
- Cards, alerts and display parts
- Menus
- Command palette and combobox
- Popovers, dialogs and toasts
Frequently asked
What is isolen ui?
It is the element api and layout engine behind the isolen presentation engine: a declarative tree over a backend neutral gfx device, described in ui.h, layout2.h and gfx.h.
Does it need a graphics api?
No. The ui and layout headers never include a graphics api type. The device is chosen at runtime, and a level two app can still reach the live vulkan or metal objects for its own passes.
Can my app own its loop?
Yes, that is level one: isolen_open, isolen_next_frame and isolen_close. Level zero hands the engine one view callback and never sees the loop at all.
Does an idle app burn the gpu?
No. Frames only run when something changed, such as input, an animation, a resize or an isolen_redraw call. Set continuous for a show that animates every tick.