compiz/compiz_0005-gtk-window-deco...

219 lines
6.7 KiB
Diff

From 004d52d9049108ffedb8b276a568cf092a2b0729 Mon Sep 17 00:00:00 2001
From: lukefromdc <lukefromdc@hushmail.com>
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