North Carolina


Interested in Linux, decentralization, cryptography, golang/rust/c, and communication.

I spend most of my free time on:

  • Arbor, a tree-based, decentralizable chat platform
  • Gio, an immediate-mode UI framework for Go
  • Gio-Extras, my collection of libraries to extend Gio

If you get value out of my work, please consider sponsoring me on Liberapay or GitHub.


Last active 25 days ago


Last active 2 months ago


Last active 4 months ago


Last active 5 months ago


Last active 11 months ago


Last active 1 year, 8 months ago


Last active 1 year, 8 months ago
View more

Recent activity

Re: Detecting mouse wheel 2 hours ago

From Chris Waldon to ~eliasnaur/gio

It sounds like you just need to use gesture.Scroll to listen for
scrolling operations on the slider.


You should be able to put a clip.Rect on top of the area the slider
occupies and then call gesture.Scroll.Add to make the area listen for
scroll events. gesture.Scroll.Scroll will then report distance
scrolled in pixels, which you can convert to motion of the control of

Does that make sense? If not, perhaps you could provide a modified
gioui.org/example/hello that demonstrates what you've tried?

Re: [PATCH gio] Add grid and table 12 days ago

From Chris Waldon to ~eliasnaur/gio-patches

> The table is a grid with headings. The implementation is modeled after the List.
> Both are scrollable vertical and horizontal. The column widths must be given,
> and all rows are same height.

Thanks for the patch Jan! I've explored the code in some depth, and my
comments are available inline below. At a high level:

- I needed to change the layout.Grid to process its own scroll
gestures in order to use layout.Grid by itself (to get a grid with no
scroll bars). Implementation is linked below.
- I found that the grid only constrained cells horizontally, so I
tweaked it to also constrain vertically. Implementation is linked

gio-x module consolidation 18 days ago

From Chris Waldon to ~eliasnaur/gio

Hey all,

I'm consolidating the many submodules of gioui.org/x into a single
module. They were originally broken out in order to isolate their
transitive dependencies so that application authors were not forced to
depend on things they didn't need, but Go 1.17's dependency graph
pruning seems to be good enough that this is no longer a concern.
Application authors using `go 1.17` in their go.mod will not pick up
transitive dependencies from parts of gio-x that they do not actually

This consolidation will make it much easier to consume and maintain
the growing number of packages in gioui.org/x.

Re: Possible todo.sr.ht GraphQL pagination bug 18 days ago

From Chris Waldon to ~sircmpwn/sr.ht-discuss

Thank you for trying to reproduce it Adnan!

Drew, should I file a bug for this one?

Gio January Community Call 20 days ago

From Chris Waldon to ~eliasnaur/gio

Hey all,

We'll be having our monthly community call on Tuesday, January 11th at
1530 UTC. You'll be able to join here:


We'll go over recent project updates, have an informal chat about the
project's history, and hear from Peter Sanford about the experience of
building the Wormhole William Android mobile application with Gio.


Gio News, December 2021 20 days ago

From Chris Waldon to ~eliasnaur/gio

Hello Gioverse!

We've finished 2021, and we got a lot done! I'd like to take some time
to appreciate the many people who make Gio possible.

Many people contribute to Gio regularly by opening bug reports,
answering questions on our mailing list/slack, writing
guides/documentation about how to use Gio, and sponsoring the core
team either on GitHub Sponsors, LiberaPay, or OpenCollective. I wanted
to try to pull a list of those contributions, but gathering all of
that data in a consistent way proved too complex. If you make non-code
contributions to Gio, we offer you our sincere thanks.

I was able to pull our commit data, so I can provide accurate info on

[PATCH gio] cmd/gogio: allow missing tool version components 21 days ago

From Chris Waldon to ~eliasnaur/gio-patches

This commit changes the way that gogio searches for build tools
so that it correctly identifies versions like '31' as equivalent
to '31.0.0'. The Android SDK appears to not provide version
components in the path name when the component is zero.

Signed-off-by: Chris Waldon <christopher.waldon.dev@gmail.com>
 cmd/gogio/androidbuild.go | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/cmd/gogio/androidbuild.go b/cmd/gogio/androidbuild.go
index 78eb24fa..b322ae9d 100644
--- a/cmd/gogio/androidbuild.go
+++ b/cmd/gogio/androidbuild.go
[message trimmed]

Possible todo.sr.ht GraphQL pagination bug 21 days ago

From Chris Waldon to ~sircmpwn/sr.ht-discuss

Hey all,

I'm having trouble paging through tickets with the GraphQL API on
todo.sr.ht. Using this query:

query ($cursor: Cursor) {
    trackerByOwner(owner: "~eliasnaur", tracker: "gio") {
        tickets(cursor: $cursor) {
            results {
                submitter {

December Gio Community Call is tomorrow! a month ago

From Chris Waldon to ~eliasnaur/gio

Hey all,

This is a reminder that our community call is tomorrow (December 14th)
at 1530 UTC. You can join at this link:


If you want to make sure you're admitted to the call (we only can
admit names we recognize), RSVP by replying to this email (you don't
need to reply to the whole list) or letting me know on some other

I'll see you there!

Re: Request for comments for a op.Save/Load replacement a month ago

From Chris Waldon to ~eliasnaur/gio

On Thu, Dec 9, 2021 at 9:55 AM Jeff Williams <kanobe@gmail.com> wrote:
> > Good idea. I've pushed the API change with a op.Save/Load that works for
> > the transformation and clip stack. I didn't figure out a nice way to
> > preserve the pointer.AreaOp stack.
> Are the op.Save and op.Load functions still available? I can't seem to
> find them in v0.0.0-20211207114553-03016f0c69b7.
> I've been using them at the top of layout-related functions to undo
> all of the transformations and clips that all functions called by the
> current function make, without needing to have knowledge about each
> individual operation.