mirror of
https://github.com/brl/mutter.git
synced 2025-06-14 01:09:30 +00:00
background-content: Add support for rounded clipping when drawing
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 Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1717>
This commit is contained in:
@ -63,4 +63,12 @@ void meta_background_content_set_vignette (MetaBackgroundContent *self,
|
||||
double brightness,
|
||||
double sharpness);
|
||||
|
||||
META_EXPORT
|
||||
void meta_background_content_set_rounded_clip_radius (MetaBackgroundContent *self,
|
||||
float radius);
|
||||
|
||||
META_EXPORT
|
||||
void meta_background_content_set_rounded_clip_bounds (MetaBackgroundContent *self,
|
||||
const graphene_rect_t *bounds);
|
||||
|
||||
#endif /* META_BACKGROUND_CONTENT_H */
|
||||
|
Reference in New Issue
Block a user