Module: wine Branch: master Commit: b67f39ccc6ea4b366e4a839f64d72d5200518a00 URL: https://source.winehq.org/git/wine.git/?a=commit;h=b67f39ccc6ea4b366e4a839f6...
Author: Alexandre Julliard julliard@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@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; }