mirror of
https://github.com/brl/mutter.git
synced 2024-11-28 02:50:41 -05:00
shaped-texture: Don't change the callers clip rect
We intersected the callers clip rect. That is probably not a good idea, and easily avoided, so lets avoid it. https://gitlab.gnome.org/GNOME/mutter/merge_requests/362
This commit is contained in:
parent
a53eb8dcbd
commit
1fe3adcd95
@ -925,6 +925,7 @@ meta_shaped_texture_get_image (MetaShapedTexture *stex,
|
|||||||
cairo_rectangle_int_t *clip)
|
cairo_rectangle_int_t *clip)
|
||||||
{
|
{
|
||||||
MetaShapedTexturePrivate *priv = stex->priv;
|
MetaShapedTexturePrivate *priv = stex->priv;
|
||||||
|
cairo_rectangle_int_t *transformed_clip = NULL;
|
||||||
CoglTexture *texture, *mask_texture;
|
CoglTexture *texture, *mask_texture;
|
||||||
cairo_rectangle_int_t texture_rect = { 0, 0, 0, 0 };
|
cairo_rectangle_int_t texture_rect = { 0, 0, 0, 0 };
|
||||||
cairo_surface_t *surface;
|
cairo_surface_t *surface;
|
||||||
@ -936,21 +937,23 @@ meta_shaped_texture_get_image (MetaShapedTexture *stex,
|
|||||||
if (texture == NULL)
|
if (texture == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
texture_rect.width = cogl_texture_get_width (texture);
|
|
||||||
texture_rect.height = cogl_texture_get_height (texture);
|
|
||||||
|
|
||||||
if (clip != NULL)
|
if (clip != NULL)
|
||||||
{
|
{
|
||||||
if (!meta_rectangle_intersect (&texture_rect, clip, clip))
|
transformed_clip = alloca (sizeof (cairo_rectangle_int_t));
|
||||||
|
*transformed_clip = *clip;
|
||||||
|
|
||||||
|
if (!meta_rectangle_intersect (&texture_rect, transformed_clip,
|
||||||
|
transformed_clip))
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (clip != NULL)
|
if (transformed_clip)
|
||||||
texture = cogl_texture_new_from_sub_texture (texture,
|
texture = cogl_texture_new_from_sub_texture (texture,
|
||||||
clip->x,
|
transformed_clip->x,
|
||||||
clip->y,
|
transformed_clip->y,
|
||||||
clip->width,
|
transformed_clip->width,
|
||||||
clip->height);
|
transformed_clip->height);
|
||||||
|
|
||||||
surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
|
surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
|
||||||
cogl_texture_get_width (texture),
|
cogl_texture_get_width (texture),
|
||||||
@ -962,7 +965,7 @@ meta_shaped_texture_get_image (MetaShapedTexture *stex,
|
|||||||
|
|
||||||
cairo_surface_mark_dirty (surface);
|
cairo_surface_mark_dirty (surface);
|
||||||
|
|
||||||
if (clip != NULL)
|
if (transformed_clip)
|
||||||
cogl_object_unref (texture);
|
cogl_object_unref (texture);
|
||||||
|
|
||||||
mask_texture = priv->mask_texture;
|
mask_texture = priv->mask_texture;
|
||||||
@ -971,12 +974,13 @@ meta_shaped_texture_get_image (MetaShapedTexture *stex,
|
|||||||
cairo_t *cr;
|
cairo_t *cr;
|
||||||
cairo_surface_t *mask_surface;
|
cairo_surface_t *mask_surface;
|
||||||
|
|
||||||
if (clip != NULL)
|
if (transformed_clip)
|
||||||
mask_texture = cogl_texture_new_from_sub_texture (mask_texture,
|
mask_texture =
|
||||||
clip->x,
|
cogl_texture_new_from_sub_texture (mask_texture,
|
||||||
clip->y,
|
transformed_clip->x,
|
||||||
clip->width,
|
transformed_clip->y,
|
||||||
clip->height);
|
transformed_clip->width,
|
||||||
|
transformed_clip->height);
|
||||||
|
|
||||||
mask_surface = cairo_image_surface_create (CAIRO_FORMAT_A8,
|
mask_surface = cairo_image_surface_create (CAIRO_FORMAT_A8,
|
||||||
cogl_texture_get_width (mask_texture),
|
cogl_texture_get_width (mask_texture),
|
||||||
@ -996,7 +1000,7 @@ meta_shaped_texture_get_image (MetaShapedTexture *stex,
|
|||||||
|
|
||||||
cairo_surface_destroy (mask_surface);
|
cairo_surface_destroy (mask_surface);
|
||||||
|
|
||||||
if (clip != NULL)
|
if (transformed_clip)
|
||||||
cogl_object_unref (mask_texture);
|
cogl_object_unref (mask_texture);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user