Gioverse news

April 2024 - Window API Simplification

Since the last newsletter, Gio's window implementation internals and API have been greatly simplified, leading to cleaner code and more predictable interactions.

February 2024 - Event Routing Overhaul

A massive, long-overdue change to Gio event routing has just landed. This provides much more granular capabilities for applications to manipulate input events and ensures that it is always safe to throw away the contents of a macro, but at the cost of some breaking changes.

October & November 2023 - Eliminating Event Processing Latency

The last two months have brought lots of change across Gio, but also kept me so busy that October's newsletter was just folded into November's. Since the last newsletter, we've fixed two major longstanding API design issues within Gio. Now GUIs can react to input events without an extra frame of latency between the event and its delivery, and also Gio window logic now runs on the same goroutine as application window logic, eliminating many opportunities for race conditions. Of course, fixing these problems did require breaking API changes, so see each repo's notes for API migration info.

June 2023 - Tagged Releases and System Font Progress

The past month saw a steady flow of bugfixes and optimizations going into core, but the biggest change is Gio's first-ever tagged release! Gio v0.1.0 (and similar tags in gio-x and gio-example) are now available.

April 2023 - Font Collection Support and more

This month saw quite a few font and text improvements and numerous bugfixes across the ecosystem. With support from Plato Team, I focused on making our text stack more efficient with the following results:

March 2023 - Color Emoji, Text Truncation, and More

This month saw the merge of two notable text features: color bitmap glyph support and automatic shaper-driven text truncation. With these features, we are now able to display color emoji, and we are also able to visually indicate when text with a configured maximum number of lines has been truncated. I'd like to thank Plato Team for supporting this work financially, and Elias for reviewing the mountains of patches it generated.

February 2023 - Color Glyph Rendering

This month was quiet on the branches, but an exciting and long-requested feature is coming: color glyph rendering. This will allow Gio to display text using many color emoji fonts, as well as some bitmap fonts. I have a working prototype, but editing text with emoji revealed that our text editor desperately needs to support UAX#29 grapheme clusters in order for cursor positioning within emoji to make sense. I'm tackling that problem right now. I'd like to thank Plato Team for supporting this project.

January 2023 - Incremental Improvement

After the enormous pile of features that landed in December, January was a quiet month. We hummed along fixing bugs, adding some small features, and thinking about the future.

December 2022 - Text Selection and RSS

First up, I'd like to thank Egon Elbre for implementing an RSS feed for these newsletters. You can find that feed if you prefer to consume content via feeds.

November 2022 - Bidirectional text is eating the world

It's seemingly been a quiet month in the Gio project. Not many patches have landed in our repos, and one might almost think that nothing was happening. However, this quiescence is actually the result of Elias and I iterating heavily on Gio's upcoming text API. Adding both font fallback and bidirectional text support to Gio has stretched our text abstractions to the breaking point, so we've had to rethink them this month. That work has primarily been on the gio-patches mailing list, so you won't have seen it unless you're subscribed.

October 2022 - Mipmaps and text patches

This month Elias upgraded our handling of image scaling by automatically generating mipmaps for all images. This ensures that images look good when downscaled, and also boosts performance when downscaling images. You don't need to make any application changes to take advantage of this new feature.

September 2022 - Font fallback is coming

Elias is settling into a new place in Central America, and is starting to turn a critical eye towards Gio's layout system. He's exploring ways to make Gio layout more flexible, to solve , and to reduce the boilerplate of writing Gio code. There's no concrete proposal to share yet, but I look forward to hearing what comes of this exploration.

August 2022 - Boiling away dependencies

This month one of the biggest changes was Egon Elbre's work to eliminate many of Gio's transitive dependencies. He did this by rewriting significant parts of the text segmentation library that we use, as well as figuring out the proper dance to update us to the multi-module version of The results are a go.sum with 500 fewer lines, and Gio binaries that are 1.5MiB smaller.

July 2022 - Editor Enhancements

This month saw a number of small-but-useful improvements to widget.Editor, including the ability to filter characters, enforce a maximum length, and built-in support for undo/redo. Additionally, numerous subtle event processing bugs were ironed out.

April 2022 - io/key changes

As many of you know, Fyne and Gio together ran a "Go GUI Developer Survey" recently, and Andy from Fyne has published the results here:

March 2022 - Complex script support

Elias spent the last month reviewing my text work, improving widget focus traversal, and improving many small details about core. In particular, there is now a nix-based development environment for gio available in core's flake.nix file. For details on nix, see:

February 2022 - pointer.CursorNameOp renamed to pointer.Cursor

Elias implemented focus traversal for Gio interfaces this month. This enables users to navigate between focusable widgets (buttons, editors, etc) with actions like pressing tab. This single feature has a huge impact on the ease of using Gio for entering data into form fields and general keyboard navigation.