~eliasnaur/gio

1

Gio News, (March + 0.3*April) 2021

Details
Message ID
<CAFcc3FQcXKpmbvOodi5VE6MnwDRHdGs0KpDmjLjFgwetY7KeUw@mail.gmail.com>
DKIM signature
pass
Download raw message
Hello Gioverse!

March flew right past me, and I got too caught up in buying a house
and getting vaccinated to realize it was time to write another
newsletter. Fortunately, my lack of coverage didn't stop the Gio
community from continuing to do amazing work:

========
core gio
========

Elias has spent the time since last letter working on many facets of
low-level GPU support. He is working towards making the compute
renderer into the default back-end (for Android/Linux) during April
(yes, this month), so please test your code with
GIORENDERER=forcecompute and report problems soon!

Elias has also been meeting with Raph Linus (author of piet-gpu, the
source of our compute shaders) to discuss various collaborations and
future plans. Mostly these discussions center around how to bring
support to various platforms, the structure of Elias' CPU fallback
support using SwiftShader, Vulkan support, and testing. If anyone is
looking for an opportunity to flex their Rust muscles, the piet-gpu
project could use some more test cases.

Elias posted some notes from these conversations at these links:

https://xi.zulipchat.com/#narrow/stream/197075-gpu/topic/piet-gpu.20meeting.20notes.202021-03-25
https://xi.zulipchat.com/#narrow/stream/197075-gpu/topic/piet-gpu.20meeting.20notes.202021-04-08

As always, core gio received lots of love as well:

- Elias:
  - ensured that Android log lines aren't truncated if too long.
  - updated the shaders from piet-gpu for faster RGBA output and fixes
to stroked clips and images.
  - fixed a macOS/iOS string handling bug (#210).
  - fixed a poiner input routing bug (#208).
  - restructured some complex stroke handling code to make performance
costs (and optimizations) more obvious. See
https://git.sr.ht/~eliasnaur/gio/commit/bc2c3db for details.
  - made the default stroked path style use rounded caps and joins.
This is natively supported by the compute renderer, and thus ensures
that the default paths are also the most performant.
  - made clip.Outline panic if provided a path that isn't closed. This
prevents undefined behavior and ensures good performance.
- Pierre Curto:
  - added support for changing window options (such as size and title)
at runtime.
  - added support for nested scrollable regions. This was a huge unit
of work, and has been a problem for a long time (#185). Huge thanks to
Pierre for this!
  - optimized performance in the pointer event router.
  - added fullscreen application support for macOS, Windows, and X11.
  - optimized pixel-aligned, zero-corner-radius clip.RRects.
  - fixed a visual bug in widget.Border where some sides were missing.
  - ensured that pressing the spacebar produces key.NameSpace on all
OSes (previously it varied by OS).
- Lucas Rodrigues:
  - squashed a WASM duplicate-paste bug.
  - restructured the WASM frame redraw to avoid deadlocks.
  - added support for fullscreen to WASM builds.
  - enabled gogio to generate `.aab` android applications in addition to APKs.
- Egon Elbre:
  - removed clip.Border in favor of a simple stroked path on an RRect.
  - made it easy to acquire paths representing circles and RRects.
  - converted RRect to use absolute coordinates in an effort to reduce
floating-point drift.
  - added test cases for depth buffer overlaps.
  - added widget.Image.Fit, which allows users to describe _how_ an
image should fit into the space available to it. Options include
Unscaled, Contain, Cover, ScaleDown, and Fill.
  - tweaked context creation so that it automatically takes into
account system insets (like android/iOS top bar). This greatly
improves the ergonomics of the API.
- Peter Sanford added support for requesting network state permissions
on Android.
- I (Chris Waldon):
  - fixed android app.ViewEvent documentation in the app/permission
package to reflect the latest API.
  - fixed an image scaling bug that caused the Scale field to be ignored.

=====
gio-x
=====

Gio's x package saw a number of updates this month. I spent a lot of
my nights and weekends working on adding a nice context menu component
to the `component` package. This also created the Shadow, Surface,
Divider, and Context components that compose well to form Menus.

Additionally, Lucas Rodrigues has proposed a `pref` package that will
provide an OS-agnostic way to fetch user preferences like light/dark
theme, language, and some battery information. Lucas also provided
implementations for Android, Windows, and WASM. This work is available
in PR#1 on gio-x's GitHub mirror:

https://github.com/gioui/gio-x/pull/1

Finally, Fabian Geiselhart provided an API simplification to SimpleIconAction.

===========
gio-example
===========

The examples have been updated to work with the latest gio version,
including changes to various APIs mentioned in core. Additionally:

- Egon Elbre fleshed out the `multiwindow` example to provide a better
reference for building multi-window applications.
- Elias expanded the `glfw` application to also support macOS.
- I added a demonstration of the new Menu component to the
`x/component` example.

===========
awesome-gio
===========

Werner Laurensse has started Gio's very own awesome list. You can see
the resources Werner has collected so far here:

https://github.com/wrnrlr/awesome-gio

Please submit PRs to add your own work and to update existing
information if it's out of date! These lists are a great entry point
for new people in a community, but they only work well if they're
reasonably accurate.

======
blocks
======

During our last community call, Pierre Curto demonstrated a
very-fleshed-out tetris-like game called "blocks". You can try that
here:

https://github.com/pierrec/games/tree/main/blocks/cmd/blocks

You can find that recording here:

https://www.youtube.com/watch?v=DPhkfAJFDoI

====
apps
====

This month, two new Gio applications were published to the Google Play Store:

- Protonet
  - https://play.google.com/store/apps/details?id=live.protonet
  - https://github.com/mearaj/protonet
- Wormhole William
  - https://play.google.com/store/apps/details?id=io.sanford.wormhole_william
  - https://github.com/psanford/wormhole-william-mobile

Congrats to those of you who published these! Thank you for paving the
way for the rest of us.

===========
sponsorship
===========

If Gio provides value to you, please consider sponsoring one or more of
its developers/maintainers!

Elias Naur:
https://github.com/sponsors/eliasnaur

Chris Waldon:
https://github.com/sponsors/whereswaldon
https://liberapay.com/whereswaldon

======================
call for presentations
======================

If you'd like to present any of your Gio-related work during the
next Gio community call, please reach out to me.

You can find recordings of previous Gio community calls here:

https://www.youtube.com/channel/UCzuKUnKK5gAFJKNyA1imIHw

=======
the end
=======

Thanks for reading! Please reach out if you'd like your work included
in future newsletters.

Cheers,
Chris Waldon
Details
Message ID
<CAKXH50KM7H2.226CW8PY5RVT2@vendetta>
In-Reply-To
<CAFcc3FQcXKpmbvOodi5VE6MnwDRHdGs0KpDmjLjFgwetY7KeUw@mail.gmail.com> (view parent)
DKIM signature
pass
Download raw message
Correction: Raph Levien is the author of piet-gpu, not Raph Linus. Thanks Anthony Starks for pointing this out! Sorry Raph, I got tripped up by your GitHub pages domain name https://raphlinus.github.io/.

Cheers,
Chris
Reply to thread Export thread (mbox)