Skip to content

background-content: Add support for rounded clipping when drawing

Jonas Dreßler requested to merge verdre/mutter:background-rounding into master

We're going to round the workspace backgrounds in the new overview for gnome-shell 40.

So far corner-rounding was only possible for StWidgets because the rounded clipping was done using cairo drawing. We now need rounded clipping for ClutterActors too because backgrounds are drawn using ClutterActors (or more specifically a ClutterContent). To implement that, first a ClutterOffscreenEffect subclass together with a fragment shader from GSK (see gskSetOutputColor() [1] in the GSK GL renderer code) was investigated, and while that was generic and worked quite well, it was extremely slow for the case of drawing wallpapers because of all the FBOs that had to be allocated.

This is the new, more performant approach: Use the same fragment shader, but perform the rounded clipping right in MetaBackgroundContent while we're painting the wallpaper. This has almost no performance impact, with the downside of not being a generic solution.

To allow for rounded clipping not only at the edges of the wallpaper, but using any given bounding rectangle, the API exposes not only the radius, but also a bounding rect.

[1] https://gitlab.gnome.org/GNOME/gtk/-/blob/master/gsk/resources/glsl/preamble.fs.glsl

Edited by Jonas Dreßler

Merge request reports