
3 people contributed this month with 65 commits.
Giant thanks to Paul Hatchman for adding text run support to our Accesskit integration!
Screen readers can now navigate normally through textLayout and textEntry content.
This is the last large piece needed for decent screen reader support. Wohoo!
While we will continue work in this area for bugs and enhancements, this is a huge milestone.
Big thanks to Arnold Loubriat for helping us use Accesskit properly and for loads of testing!
Shout out to Ethin Probst for excellent reporting and testing!
dvui implements a form of garbage collection for textures and data. If you don’t reference a texture or call dataGet/Set for a frame, we free that memory. But sometimes you want to keep things around a bit longer.
Now we provide functions textureRetain, dataRetain, and retainClear.
These give a way to keep dvui from freeing these things, while associating them with a “retain key”. That key can be passed later to retainClear to tell dvui to stop retaining them.
This was motivated by the demo’s stuttering when reshowing the demo buttons (which trigger regenerating a bunch of textures). It’s now fixed by:
dataSetDeinitFunction which calls retainClearSo the flow is:
These features all come together to allow retaining data to match the lifetime of some higher level widget.
autoPosition() to center (after a resize)6 people contributed this month with 56 commits.
Font selection got a major upgrade. Until now we had to refer to an individual font ttf.
Now Font acts like a query that searches for a matching Font.Source:
.font = .theme(.heading).font = Font.theme(.heading).larger(2).font = dvui.themeGet().font_mono.withWeight(.bold).withStyle(.italic)dvui.Theme has 4 fonts (body, heading, title, mono) and grew an embedded_fonts field so that font sources can be tied to the theme that requires them.
For now we still only have a single pool of Font.Source that is internal to dvui. In the future we hope to extend this to be able to query for system fonts.
We are now bundling the tree-sitter library, and TextEntryWidget gained a tree_sitter option.
The usage code is responsible for providing:
dvui.OptionsRight now an example is only in the main window of the “app” example (like zig build sdl3-app), but eventually we will figure out a way to integrate it into the demo window.
This integrates with .cache_layout = true to provide incremental edit parse updates and good performance on large documents.
Any feedback would be welcome!
Thank you to everyone who asked questions, filed issues, and contributed!