From eb8611b79f0b56b89d615769a07a4a16ac1f42f3 Mon Sep 17 00:00:00 2001 From: James Tabor Date: Mon, 30 Jun 2008 00:47:58 +0000 Subject: [PATCH] Add and fix path calls. This allows more drawing tests (Area.exe by Yian)to pass based on observation. svn path=/trunk/; revision=34198 --- .../win32/win32k/objects/fillshap.c | 33 +++++++++++-------- .../subsystems/win32/win32k/objects/line.c | 7 ++-- 2 files changed, 24 insertions(+), 16 deletions(-) diff --git a/reactos/subsystems/win32/win32k/objects/fillshap.c b/reactos/subsystems/win32/win32k/objects/fillshap.c index 3ac887c6fb1..791df4fb25c 100644 --- a/reactos/subsystems/win32/win32k/objects/fillshap.c +++ b/reactos/subsystems/win32/win32k/objects/fillshap.c @@ -76,10 +76,7 @@ IntGdiPolygon(PDC dc, UnsafePoints[CurrentPoint].x += dc->ptlDCOrig.x; UnsafePoints[CurrentPoint].y += dc->ptlDCOrig.y; } - - if (PATH_IsPathOpen(dc->DcLevel)) - ret = PATH_Polygon(dc, UnsafePoints, Count ); - else + // No need to have path here. { DestRect.left = UnsafePoints[0].x; DestRect.right = UnsafePoints[0].x; @@ -157,6 +154,8 @@ IntGdiPolyPolygon(DC *dc, LPINT PolyCounts, int Count) { + if (PATH_IsPathOpen(dc->DcLevel)) + return PATH_PolyPolygon ( dc, Points, PolyCounts, Count); while (--Count >=0) { if (!IntGdiPolygon ( dc, Points, *PolyCounts )) @@ -225,15 +224,6 @@ NtGdiEllipse( if ((nLeftRect == nRightRect) || (nTopRect == nBottomRect)) return TRUE; - if (nRightRect < nLeftRect) - { - INT tmp = nRightRect; nRightRect = nLeftRect; nLeftRect = tmp; - } - if (nBottomRect < nTopRect) - { - INT tmp = nBottomRect; nBottomRect = nTopRect; nTopRect = tmp; - } - /* * Get pointers to all necessary GDI objects. */ @@ -244,6 +234,7 @@ NtGdiEllipse( SetLastWin32Error(ERROR_INVALID_HANDLE); return FALSE; } + if (dc->DC_Type == DC_TYPE_INFO) { DC_UnlockDc(dc); @@ -251,6 +242,22 @@ NtGdiEllipse( return TRUE; } + if (PATH_IsPathOpen(dc->DcLevel)) + { + ret = PATH_Ellipse(dc, nLeftRect, nTopRect, nRightRect, nBottomRect); + DC_UnlockDc(dc); + return ret; + } + + if (nRightRect < nLeftRect) + { + INT tmp = nRightRect; nRightRect = nLeftRect; nLeftRect = tmp; + } + if (nBottomRect < nTopRect) + { + INT tmp = nBottomRect; nBottomRect = nTopRect; nTopRect = tmp; + } + Dc_Attr = dc->pDc_Attr; if(!Dc_Attr) Dc_Attr = &dc->Dc_Attr; diff --git a/reactos/subsystems/win32/win32k/objects/line.c b/reactos/subsystems/win32/win32k/objects/line.c index d965426fb36..66fce7a7ab9 100644 --- a/reactos/subsystems/win32/win32k/objects/line.c +++ b/reactos/subsystems/win32/win32k/objects/line.c @@ -102,17 +102,15 @@ IntGdiLineTo(DC *dc, if (PATH_IsPathOpen(dc->DcLevel)) { Ret = PATH_LineTo(dc, XEnd, YEnd); -//#if 0 if (Ret) { - // FIXME - PATH_LineTo should maybe do this... + // FIXME - PATH_LineTo should maybe do this? No Dc_Attr->ptlCurrent.x = XEnd; Dc_Attr->ptlCurrent.y = YEnd; Dc_Attr->ptfxCurrent = Dc_Attr->ptlCurrent; CoordLPtoDP(dc, &Dc_Attr->ptfxCurrent); // Update fx Dc_Attr->ulDirty_ &= ~(DIRTY_PTLCURRENT|DIRTY_PTFXCURRENT|DIRTY_STYLESTATE); } -//#endif return Ret; } else @@ -362,6 +360,9 @@ IntGdiPolyPolyline(DC *dc, pts = pt; pc = PolyPoints; + if (PATH_IsPathOpen(dc->DcLevel)) + return PATH_PolyPolyline( dc, pt, PolyPoints, Count ); + for (i = 0; i < Count; i++) { ret = IntGdiPolyline ( dc, pts, *pc );