From 004d52d9049108ffedb8b276a568cf092a2b0729 Mon Sep 17 00:00:00 2001 From: lukefromdc Date: Thu, 13 Jun 2019 16:04:39 -0400 Subject: [PATCH 5/6] gtk-window-decorator: use code from compiz 0.9 for corners fix This is based on the same code as in compiz 0.9 and may be necessary to support resizing windows from outside the visible borders later. Probably more commits from compiz 0.9 will have to be ported to suppport that feature, and keeping the code as similar as possible now makes that easier. This also avoids passing two unused variables and two that were having to be modified and could more easily just be set inside meta_get_top_border_region and in meta_get_bottom_border_region . --- gtk-window-decorator/gtk-window-decorator.c | 69 ++++++++++++++++----- 1 file changed, 53 insertions(+), 16 deletions(-) diff --git a/gtk-window-decorator/gtk-window-decorator.c b/gtk-window-decorator/gtk-window-decorator.c index 6c872486..a93db39c 100644 --- a/gtk-window-decorator/gtk-window-decorator.c +++ b/gtk-window-decorator/gtk-window-decorator.c @@ -1579,9 +1579,15 @@ radius_to_width (int radius, return floor (0.5f + r1 - sqrt (r2)); } + static Region +#ifdef HAVE_MARCO_1_23_1 +meta_get_top_border_region (const MetaFrameGeometry *fgeom) +#else meta_get_top_border_region (const MetaFrameGeometry *fgeom, int width) +#endif + { Region corners_xregion, border_xregion; XRectangle xrect; @@ -1590,7 +1596,10 @@ meta_get_top_border_region (const MetaFrameGeometry *fgeom, int bottom_left_radius; int bottom_right_radius; int w, i; - +#ifdef HAVE_MARCO_1_23_1 + int width; + int height; +#endif corners_xregion = XCreateRegion (); meta_get_corner_radius (fgeom, @@ -1599,6 +1608,11 @@ meta_get_top_border_region (const MetaFrameGeometry *fgeom, &bottom_left_radius, &bottom_right_radius); +#ifdef HAVE_MARCO_1_23_1 + /*We have to define these here with newer marco versions*/ + width = fgeom->width - fgeom->borders.invisible.left - fgeom->borders.invisible.right; + height = fgeom->borders.visible.top; +#endif if (top_left_radius) { for (i = 0; i < top_left_radius; i++) @@ -1619,12 +1633,8 @@ meta_get_top_border_region (const MetaFrameGeometry *fgeom, for (i = 0; i < top_right_radius; i++) { w = radius_to_width (top_right_radius, i); -#ifdef HAVE_MARCO_1_23_1 - xrect.x = width - w - fgeom->borders.invisible.left - - fgeom->borders.invisible.right; -#else + xrect.x = width - w; -#endif xrect.y = i; xrect.width = w; xrect.height = 1; @@ -1653,8 +1663,12 @@ meta_get_top_border_region (const MetaFrameGeometry *fgeom, } static Region +#ifdef HAVE_MARCO_1_23_1 +meta_get_bottom_border_region (const MetaFrameGeometry *fgeom) +#else meta_get_bottom_border_region (const MetaFrameGeometry *fgeom, int width) +#endif { Region corners_xregion, border_xregion; XRectangle xrect; @@ -1664,6 +1678,11 @@ meta_get_bottom_border_region (const MetaFrameGeometry *fgeom, int bottom_right_radius; int w, i; +#ifdef HAVE_MARCO_1_23_1 + int width; + int height; +#endif + corners_xregion = XCreateRegion (); meta_get_corner_radius (fgeom, @@ -1672,6 +1691,12 @@ meta_get_bottom_border_region (const MetaFrameGeometry *fgeom, &bottom_left_radius, &bottom_right_radius); +#ifdef HAVE_MARCO_1_23_1 + /*We have to define these here with newer marco versions*/ + width = fgeom->width - fgeom->borders.invisible.left - fgeom->borders.invisible.right; + height = fgeom->borders.visible.top; +#endif + if (bottom_left_radius) { for (i = 0; i < bottom_left_radius; i++) @@ -1731,8 +1756,12 @@ meta_get_bottom_border_region (const MetaFrameGeometry *fgeom, } static Region +#ifdef HAVE_MARCO_1_23_1 +meta_get_left_border_region (const MetaFrameGeometry *fgeom) +#else meta_get_left_border_region (const MetaFrameGeometry *fgeom, int height) +#endif { Region border_xregion; XRectangle xrect; @@ -1742,7 +1771,7 @@ meta_get_left_border_region (const MetaFrameGeometry *fgeom, xrect.x = 0; xrect.y = 0; #ifdef HAVE_MARCO_1_23_1 - xrect.width = fgeom->borders.total.left; + xrect.width = fgeom->borders.visible.left; xrect.height = fgeom->height - fgeom->borders.total.top - fgeom->borders.total.bottom; #else xrect.width = fgeom->left_width; @@ -1754,8 +1783,12 @@ meta_get_left_border_region (const MetaFrameGeometry *fgeom, } static Region +#ifdef HAVE_MARCO_1_23_1 +meta_get_right_border_region (const MetaFrameGeometry *fgeom) +#else meta_get_right_border_region (const MetaFrameGeometry *fgeom, int height) +#endif { Region border_xregion; XRectangle xrect; @@ -1765,7 +1798,7 @@ meta_get_right_border_region (const MetaFrameGeometry *fgeom, xrect.x = 0; xrect.y = 0; #ifdef HAVE_MARCO_1_23_1 - xrect.width = fgeom->borders.total.right; + xrect.width = fgeom->borders.visible.right; xrect.height = fgeom->height - fgeom->borders.total.top - fgeom->borders.total.bottom; #else xrect.width = fgeom->right_width; @@ -2171,12 +2204,13 @@ meta_draw_window_decoration (decor_t *d) NULL); #ifdef HAVE_MARCO_1_23_1 if (fgeom.borders.visible.top) + { + top_region = meta_get_top_border_region (&fgeom); #else if (fgeom.top_height) -#endif { top_region = meta_get_top_border_region (&fgeom, clip.width); - +#endif decor_blend_border_picture (xdisplay, d->context, src, @@ -2196,12 +2230,13 @@ meta_draw_window_decoration (decor_t *d) } #ifdef HAVE_MARCO_1_23_1 if (fgeom.borders.visible.bottom ) + { + bottom_region = meta_get_bottom_border_region (&fgeom); #else if (fgeom.bottom_height) -#endif { bottom_region = meta_get_bottom_border_region (&fgeom, clip.width); - +#endif decor_blend_border_picture (xdisplay, d->context, src, @@ -2221,12 +2256,13 @@ meta_draw_window_decoration (decor_t *d) } #ifdef HAVE_MARCO_1_23_1 if (fgeom.borders.visible.left) + { + left_region = meta_get_left_border_region (&fgeom); #else if (fgeom.left_width) -#endif { left_region = meta_get_left_border_region (&fgeom, clip.height); - +#endif decor_blend_border_picture (xdisplay, d->context, src, @@ -2246,12 +2282,13 @@ meta_draw_window_decoration (decor_t *d) } #ifdef HAVE_MARCO_1_23_1 if (fgeom.borders.visible.right) + { + right_region = meta_get_right_border_region (&fgeom); #else if (fgeom.right_width) -#endif { right_region = meta_get_right_border_region (&fgeom, clip.height); - +#endif decor_blend_border_picture (xdisplay, d->context, src, -- 2.21.0