From ae95dea153703445f2139e0c96798cbf0bf8a8b8 Mon Sep 17 00:00:00 2001 From: James Tabor Date: Thu, 10 Dec 2009 01:18:26 +0000 Subject: [PATCH] [Win32k] - Add a bypass flag to skip the Path support in IntGdiMoveToEx. See bug report 4364. This fixes 11 gdi path wine tests. svn path=/trunk/; revision=44507 --- reactos/subsystems/win32/win32k/include/intgdi.h | 3 ++- reactos/subsystems/win32/win32k/objects/arc.c | 6 +++--- reactos/subsystems/win32/win32k/objects/line.c | 7 +++++-- reactos/subsystems/win32/win32k/objects/path.c | 2 +- 4 files changed, 11 insertions(+), 7 deletions(-) diff --git a/reactos/subsystems/win32/win32k/include/intgdi.h b/reactos/subsystems/win32/win32k/include/intgdi.h index 333260f41e6..5f3612a7c42 100644 --- a/reactos/subsystems/win32/win32k/include/intgdi.h +++ b/reactos/subsystems/win32/win32k/include/intgdi.h @@ -67,7 +67,8 @@ BOOL FASTCALL IntGdiMoveToEx(DC *dc, int X, int Y, - LPPOINT Point); + LPPOINT Point, + BOOL BypassPath); BOOL FASTCALL IntGdiPolyBezier(DC *dc, diff --git a/reactos/subsystems/win32/win32k/objects/arc.c b/reactos/subsystems/win32/win32k/objects/arc.c index 1636f0df888..e1bbc89ea65 100644 --- a/reactos/subsystems/win32/win32k/objects/arc.c +++ b/reactos/subsystems/win32/win32k/objects/arc.c @@ -247,9 +247,9 @@ IntGdiArcInternal( if (arctype == GdiTypeArcTo) { if (dc->dclevel.flPath & DCPATH_CLOCKWISE) - IntGdiMoveToEx(dc, XStartArc, YStartArc, NULL); + IntGdiMoveToEx(dc, XStartArc, YStartArc, NULL, TRUE); else - IntGdiMoveToEx(dc, XEndArc, YEndArc, NULL); + IntGdiMoveToEx(dc, XEndArc, YEndArc, NULL, TRUE); } return Ret; } @@ -294,7 +294,7 @@ IntGdiAngleArc( PDC pDC, if (result) { - IntGdiMoveToEx(pDC, x2, y2, NULL); // Dont forget Path. + IntGdiMoveToEx(pDC, x2, y2, NULL, TRUE); } return result; } diff --git a/reactos/subsystems/win32/win32k/objects/line.c b/reactos/subsystems/win32/win32k/objects/line.c index 2c5355b3aa3..bbf60f426c4 100644 --- a/reactos/subsystems/win32/win32k/objects/line.c +++ b/reactos/subsystems/win32/win32k/objects/line.c @@ -30,7 +30,8 @@ BOOL FASTCALL IntGdiMoveToEx(DC *dc, int X, int Y, - LPPOINT Point) + LPPOINT Point, + BOOL BypassPath) { BOOL PathIsOpen; PDC_ATTR pdcattr = dc->pdcattr; @@ -54,6 +55,8 @@ IntGdiMoveToEx(DC *dc, CoordLPtoDP(dc, &pdcattr->ptfxCurrent); // Update fx pdcattr->ulDirty_ &= ~(DIRTY_PTLCURRENT|DIRTY_PTFXCURRENT|DIRTY_STYLESTATE); + if (BypassPath) return TRUE; + PathIsOpen = PATH_IsPathOpen(dc->dclevel); if ( PathIsOpen ) @@ -437,7 +440,7 @@ NtGdiPolyDraw( { if ( lpbTypes[i] == PT_MOVETO ) { - IntGdiMoveToEx( dc, lppt[i].x, lppt[i].y, NULL ); + IntGdiMoveToEx( dc, lppt[i].x, lppt[i].y, NULL, FALSE ); lastmove.x = pdcattr->ptlCurrent.x; lastmove.y = pdcattr->ptlCurrent.y; } diff --git a/reactos/subsystems/win32/win32k/objects/path.c b/reactos/subsystems/win32/win32k/objects/path.c index 6b5fbfd363e..1dfca39b381 100644 --- a/reactos/subsystems/win32/win32k/objects/path.c +++ b/reactos/subsystems/win32/win32k/objects/path.c @@ -1491,7 +1491,7 @@ end: POINT pt; IntGetCurrentPositionEx(dc, &pt); IntDPtoLP(dc, &pt, 1); - IntGdiMoveToEx(dc, pt.x, pt.y, NULL); + IntGdiMoveToEx(dc, pt.x, pt.y, NULL, FALSE); } DPRINT("Leave %s, ret=%d\n", __FUNCTION__, ret); return ret;