From 1b684e8191a9fa0cddf58fd374d7e1ee5ea03028 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Thu, 9 May 2013 14:14:52 +0100 Subject: [PATCH] correctly calculate border frame shape when cutting a window --- src/bin/e_comp.c | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/src/bin/e_comp.c b/src/bin/e_comp.c index 28729cb3b..fb11f7299 100644 --- a/src/bin/e_comp.c +++ b/src/bin/e_comp.c @@ -3751,14 +3751,39 @@ _e_comp_shapes_update_comp_win_shape_comp_helper(E_Comp_Win *cw, Eina_Tiler *tb) /* add the frame */ if (cw->bd) { - eina_tiler_rect_add(tb, &(Eina_Rectangle){cw->bd->x, cw->bd->y, cw->bd->w, cw->bd->h}); - SHAPE_INF("ADD: %d,%d@%dx%d", cw->bd->x, cw->bd->y, cw->bd->w, cw->bd->h); + if (cw->bd->client_inset.calc) + { + if (cw->bd->client_inset.t) + { + eina_tiler_rect_add(tb, &(Eina_Rectangle){cw->bd->x, cw->bd->y, cw->bd->w, cw->bd->client_inset.t}); + SHAPE_INF("ADD: %d,%d@%dx%d", cw->bd->x, cw->bd->y, cw->bd->w, cw->bd->client_inset.t); + } + if (cw->bd->client_inset.l) + { + eina_tiler_rect_add(tb, &(Eina_Rectangle){cw->bd->x, cw->bd->y, cw->bd->client_inset.l, cw->bd->h}); + SHAPE_INF("ADD: %d,%d@%dx%d", cw->bd->x, cw->bd->y, cw->bd->client_inset.l, cw->bd->h); + } + if (cw->bd->client_inset.r) + { + eina_tiler_rect_add(tb, &(Eina_Rectangle){cw->bd->x + cw->bd->client_inset.l + cw->bd->client.w, cw->bd->y, cw->bd->client_inset.r, cw->bd->h}); + SHAPE_INF("ADD: %d,%d@%dx%d", cw->bd->x + cw->bd->client_inset.l + cw->bd->client.w, cw->bd->y, cw->bd->client_inset.r, cw->bd->h); + } + if (cw->bd->client_inset.b) + { + eina_tiler_rect_add(tb, &(Eina_Rectangle){cw->bd->x, cw->bd->y + cw->bd->client_inset.t + cw->bd->client.h, cw->bd->w, cw->bd->client_inset.b}); + SHAPE_INF("ADD: %d,%d@%dx%d", cw->bd->x, cw->bd->y, cw->bd->w, cw->bd->h); + } + } } for (num = 0, rect = cw->rects; num < cw->rects_num; num++, rect++) { x = rect->x, y = rect->y, w = rect->width, h = rect->height; if (cw->bd) - x += cw->bd->x, y += cw->bd->y; + { + x += cw->bd->x, y += cw->bd->y; + if (cw->bd->client_inset.calc) + x += cw->bd->client_inset.l, y += cw->bd->client_inset.t; + } else x += cw->x, y += cw->y; E_RECTS_CLIP_TO_RECT(x, y, w, h, cw->c->man->x, cw->c->man->y, cw->c->man->w, cw->c->man->h);