[Win32k]
authorJames Tabor <james.tabor@reactos.org>
Thu, 10 Dec 2009 01:18:26 +0000 (01:18 +0000)
committerJames Tabor <james.tabor@reactos.org>
Thu, 10 Dec 2009 01:18:26 +0000 (01:18 +0000)
- 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
reactos/subsystems/win32/win32k/objects/arc.c
reactos/subsystems/win32/win32k/objects/line.c
reactos/subsystems/win32/win32k/objects/path.c

index 333260f..5f3612a 100644 (file)
@@ -67,7 +67,8 @@ BOOL FASTCALL
 IntGdiMoveToEx(DC      *dc,
                int     X,
                int     Y,
-               LPPOINT Point);
+               LPPOINT Point,
+               BOOL    BypassPath);
 
 BOOL FASTCALL
 IntGdiPolyBezier(DC      *dc,
index 1636f0d..e1bbc89 100644 (file)
@@ -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;
 }
index 2c5355b..bbf60f4 100644 (file)
@@ -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;
             }
index 6b5fbfd..1dfca39 100644 (file)
@@ -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;