Alexandre Julliard : gdi32: Merge rectangles horizontally when possible in CreatePolyPolygonRgn.

Alexandre Julliard julliard at winehq.org
Fri Jan 22 15:59:14 CST 2021


Module: wine
Branch: master
Commit: b67f39ccc6ea4b366e4a839f64d72d5200518a00
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=b67f39ccc6ea4b366e4a839f64d72d5200518a00

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Fri Jan 22 11:02:45 2021 +0100

gdi32: Merge rectangles horizontally when possible in CreatePolyPolygonRgn.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50539
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/gdi32/region.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/dlls/gdi32/region.c b/dlls/gdi32/region.c
index fba2e125731..b3764b31442 100644
--- a/dlls/gdi32/region.c
+++ b/dlls/gdi32/region.c
@@ -2613,12 +2613,15 @@ static void scan_convert( WINEREGION *obj, EdgeTable *ET, INT mode, const RECT *
                     {
                         obj->rects[obj->numRects].left = active->bres.minor_axis;
                         obj->rects[obj->numRects].top = y;
+                        obj->rects[obj->numRects].bottom = y + 1;
                     }
                     else if (obj->rects[obj->numRects].left != active->bres.minor_axis)
                     {
-                        obj->rects[obj->numRects].right = active->bres.minor_axis;
-                        obj->rects[obj->numRects].bottom = y + 1;
-                        obj->numRects++;
+                        /* create new rect only if we can't merge with the previous one */
+                        if (!obj->numRects || obj->rects[obj->numRects-1].top != y ||
+                            obj->rects[obj->numRects-1].right < obj->rects[obj->numRects].left)
+                            obj->numRects++;
+                        obj->rects[obj->numRects-1].right = active->bres.minor_axis;
                     }
                     first = !first;
                 }




More information about the wine-cvs mailing list