[metacity] surface-xrender: clip image to shape region
- From: Alberts Muktupāvels <muktupavels src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [metacity] surface-xrender: clip image to shape region
- Date: Thu, 17 Oct 2019 23:31:16 +0000 (UTC)
commit 5c7ac3d231326edc29d7e3263748a0ac7080f7f3
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date: Fri Oct 18 01:57:15 2019 +0300
surface-xrender: clip image to shape region
src/compositor/meta-surface-xrender.c | 30 ++++++++++++++++++++++++++++++
1 file changed, 30 insertions(+)
---
diff --git a/src/compositor/meta-surface-xrender.c b/src/compositor/meta-surface-xrender.c
index 6ad837e6..35c9239a 100644
--- a/src/compositor/meta-surface-xrender.c
+++ b/src/compositor/meta-surface-xrender.c
@@ -44,6 +44,34 @@ struct _MetaSurfaceXRender
G_DEFINE_TYPE (MetaSurfaceXRender, meta_surface_xrender, META_TYPE_SURFACE)
+static void
+clip_to_shape_region (MetaSurfaceXRender *self,
+ cairo_t *cr)
+{
+ XserverRegion shape_region;
+ int n_rects;
+ XRectangle *rects;
+ int i;
+
+ shape_region = meta_surface_get_shape_region (META_SURFACE (self));
+ rects = XFixesFetchRegion (self->xdisplay, shape_region, &n_rects);
+
+ if (rects == NULL)
+ return;
+
+ for (i = 0; i < n_rects; i++)
+ {
+ XRectangle *rect;
+
+ rect = &rects[i];
+
+ cairo_rectangle (cr, rect->x, rect->y, rect->width, rect->height);
+ }
+
+ cairo_clip (cr);
+ XFree (rects);
+}
+
static Pixmap
create_mask_pixmap (MetaSurfaceXRender *self,
gboolean with_opacity)
@@ -343,6 +371,8 @@ meta_surface_xrender_get_image (MetaSurface *surface)
cairo_set_source_surface (cr, back_surface, 0, 0);
cairo_surface_destroy (back_surface);
+ clip_to_shape_region (self, cr);
+
if (mask_pixmap != None)
{
Screen *xscreen;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]