mirror of
https://github.com/brl/mutter.git
synced 2024-11-25 09:30:45 -05:00
window-actor: Cull out areas covered by opaque windows
Wayland clients do this through the opaque region in the surface actor. However X11 clients were considered fully transparent for culling purposes, which may result in mutter painting other bits of the background or other windows that will be painted over in reality. https://gitlab.gnome.org/GNOME/mutter/merge_requests/698
This commit is contained in:
parent
cc5968109b
commit
ac7aa11417
@ -1370,9 +1370,27 @@ meta_window_actor_cull_out (MetaCullable *cullable,
|
|||||||
cairo_region_t *clip_region)
|
cairo_region_t *clip_region)
|
||||||
{
|
{
|
||||||
MetaWindowActor *self = META_WINDOW_ACTOR (cullable);
|
MetaWindowActor *self = META_WINDOW_ACTOR (cullable);
|
||||||
|
MetaWindowActorPrivate *priv =
|
||||||
|
meta_window_actor_get_instance_private (self);
|
||||||
|
|
||||||
meta_cullable_cull_out_children (cullable, unobscured_region, clip_region);
|
meta_cullable_cull_out_children (cullable, unobscured_region, clip_region);
|
||||||
meta_window_actor_set_clip_region_beneath (self, clip_region);
|
meta_window_actor_set_clip_region_beneath (self, clip_region);
|
||||||
|
|
||||||
|
if (unobscured_region && !is_non_opaque (self))
|
||||||
|
{
|
||||||
|
cairo_region_t *region = meta_window_get_frame_bounds (priv->window);
|
||||||
|
|
||||||
|
if (region)
|
||||||
|
{
|
||||||
|
cairo_region_subtract (unobscured_region, region);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cairo_rectangle_int_t rect;
|
||||||
|
meta_window_get_frame_rect (priv->window, &rect);
|
||||||
|
cairo_region_subtract_rectangle (unobscured_region, &rect);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
Loading…
Reference in New Issue
Block a user