summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlberts Muktupāvels <alberts.muktupavels@gmail.com>2016-04-14 20:18:16 +0300
committerAlberts Muktupāvels <alberts.muktupavels@gmail.com>2016-04-14 20:30:31 +0300
commit362e92da7e285b61990221db179f5aca4c8d10e2 (patch)
tree65913c37b9f510298d217a325f26004069ae6f99
parentdab0fcb1991f7aecc32df2ae857783bb646c1ddd (diff)
downloadmetacity-wip/test-3-18.tar.gz
compositor: use window maskwip/test-3-18
-rw-r--r--src/compositor/compositor-xrender.c56
-rw-r--r--src/ui/frames.c2
2 files changed, 42 insertions, 16 deletions
diff --git a/src/compositor/compositor-xrender.c b/src/compositor/compositor-xrender.c
index 8f325146..18954371 100644
--- a/src/compositor/compositor-xrender.c
+++ b/src/compositor/compositor-xrender.c
@@ -1534,17 +1534,24 @@ paint_windows (MetaScreen *screen,
if (cw->mode == WINDOW_SOLID)
{
int x, y, wid, hei;
+ MetaFrame *frame;
+ MetaFrameBorders borders;
x = cw->attrs.x;
y = cw->attrs.y;
wid = cw->attrs.width + cw->attrs.border_width * 2;
hei = cw->attrs.height + cw->attrs.border_width * 2;
+ frame = cw->window ? meta_window_get_frame (cw->window) : NULL;
+ meta_frame_calc_borders (frame, &borders);
+
XFixesSetPictureClipRegion (xdisplay, root_buffer,
0, 0, paint_region);
- XRenderComposite (xdisplay, PictOpSrc, cw->picture,
- None, root_buffer, 0, 0, 0, 0,
- x, y, wid, hei);
+ XRenderComposite (xdisplay, PictOpSrc, cw->picture, None, root_buffer,
+ borders.total.left, borders.total.top, 0, 0,
+ x + borders.total.left, y + borders.total.top,
+ wid - borders.total.left - borders.total.right,
+ hei - borders.total.top - borders.total.bottom);
if (cw->type == META_COMP_WINDOW_DESKTOP)
{
@@ -1552,8 +1559,16 @@ paint_windows (MetaScreen *screen,
XFixesCopyRegion (xdisplay, desktop_region, paint_region);
}
- XFixesSubtractRegion (xdisplay, paint_region,
- paint_region, cw->frame_region);
+ if (frame == NULL)
+ {
+ XFixesSubtractRegion (xdisplay, paint_region,
+ paint_region, cw->frame_region);
+ }
+ else
+ {
+ XFixesSubtractRegion (xdisplay, paint_region,
+ paint_region, cw->client_region);
+ }
}
if (!cw->border_clip)
@@ -1580,6 +1595,13 @@ paint_windows (MetaScreen *screen,
if (cw->picture)
{
+ int x, y, wid, hei;
+
+ x = cw->attrs.x;
+ y = cw->attrs.y;
+ wid = cw->attrs.width + cw->attrs.border_width * 2;
+ hei = cw->attrs.height + cw->attrs.border_width * 2;
+
if (cw->shadow && cw->type != META_COMP_WINDOW_DOCK)
{
XserverRegion shadow_clip;
@@ -1591,11 +1613,10 @@ paint_windows (MetaScreen *screen,
shadow_clip);
XRenderComposite (xdisplay, PictOpOver, info->black_picture,
- cw->shadow, root_buffer,
- 0, 0, 0, 0,
- cw->attrs.x + cw->shadow_dx,
- cw->attrs.y + cw->shadow_dy,
+ cw->shadow, root_buffer, 0, 0, 0, 0,
+ x + cw->shadow_dx, y + cw->shadow_dy,
cw->shadow_width, cw->shadow_height);
+
if (shadow_clip)
XFixesDestroyRegion (xdisplay, shadow_clip);
}
@@ -1611,15 +1632,20 @@ paint_windows (MetaScreen *screen,
cw->frame_region);
XFixesSetPictureClipRegion (xdisplay, root_buffer, 0, 0,
cw->border_clip);
- if (cw->mode == WINDOW_ARGB)
+
+ if (cw->mask != None)
{
- int x, y, wid, hei;
+ XRenderComposite (xdisplay, PictOpOver, cw->mask,
+ cw->alpha_pict, root_buffer, 0, 0, 0, 0,
+ x, y, wid, hei);
- x = cw->attrs.x;
- y = cw->attrs.y;
- wid = cw->attrs.width + cw->attrs.border_width * 2;
- hei = cw->attrs.height + cw->attrs.border_width * 2;
+ XRenderComposite (xdisplay, PictOpAdd, cw->picture,
+ None, root_buffer, 0, 0, 0, 0,
+ x, y, wid, hei);
+ }
+ if (cw->mode == WINDOW_ARGB)
+ {
XRenderComposite (xdisplay, PictOpOver, cw->picture,
cw->alpha_pict, root_buffer, 0, 0, 0, 0,
x, y, wid, hei);
diff --git a/src/ui/frames.c b/src/ui/frames.c
index 4bc4def0..b5ab0f0a 100644
--- a/src/ui/frames.c
+++ b/src/ui/frames.c
@@ -2248,7 +2248,7 @@ generate_pixmap (MetaFrames *frames,
return NULL;
result = gdk_window_create_similar_surface (frame->window,
- CAIRO_CONTENT_COLOR_ALPHA,
+ CAIRO_CONTENT_COLOR,
rect->width, rect->height);
cr = cairo_create (result);