Jacek Caban : gdi32: Handle metafiles directly in MoveToEx implementation.

Alexandre Julliard julliard at winehq.org
Mon Jul 19 15:59:15 CDT 2021


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Sat Jul 17 17:20:11 2021 +0200

gdi32: Handle metafiles directly in MoveToEx implementation.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Huw Davies <huw at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/gdi32/gdi_private.h       |  1 +
 dlls/gdi32/gdidc.c             |  2 ++
 dlls/gdi32/mfdrv/graphics.c    |  6 +++---
 dlls/gdi32/mfdrv/init.c        |  2 +-
 dlls/gdi32/mfdrv/metafiledrv.h |  1 -
 dlls/gdi32/tests/metafile.c    | 12 ++++--------
 6 files changed, 11 insertions(+), 13 deletions(-)

diff --git a/dlls/gdi32/gdi_private.h b/dlls/gdi32/gdi_private.h
index 830c2707e29..41758b6a25b 100644
--- a/dlls/gdi32/gdi_private.h
+++ b/dlls/gdi32/gdi_private.h
@@ -38,5 +38,6 @@ static inline BOOL is_meta_dc( HDC hdc )
 }
 
 extern BOOL METADC_LineTo( HDC hdc, INT x, INT y ) DECLSPEC_HIDDEN;
+extern BOOL METADC_MoveTo( HDC hdc, INT x, INT y ) DECLSPEC_HIDDEN;
 
 #endif /* __WINE_GDI_PRIVATE_H */
diff --git a/dlls/gdi32/gdidc.c b/dlls/gdi32/gdidc.c
index eecd1b69ad6..1aac2d5b418 100644
--- a/dlls/gdi32/gdidc.c
+++ b/dlls/gdi32/gdidc.c
@@ -42,6 +42,8 @@ BOOL WINAPI LineTo( HDC hdc, INT x, INT y )
 BOOL WINAPI MoveToEx( HDC hdc, INT x, INT y, POINT *pt )
 {
     TRACE( "%p, (%d, %d), %p\n", hdc, x, y, pt );
+
+    if (is_meta_dc( hdc )) return METADC_MoveTo( hdc, x, y );
     return NtGdiMoveTo( hdc, x, y, pt );
 }
 
diff --git a/dlls/gdi32/mfdrv/graphics.c b/dlls/gdi32/mfdrv/graphics.c
index 95c25d1e709..ebed0f8bc3b 100644
--- a/dlls/gdi32/mfdrv/graphics.c
+++ b/dlls/gdi32/mfdrv/graphics.c
@@ -31,11 +31,11 @@
 WINE_DEFAULT_DEBUG_CHANNEL(metafile);
 
 /**********************************************************************
- *	     MFDRV_MoveTo
+ *	     METADC_MoveTo
  */
-BOOL CDECL MFDRV_MoveTo(PHYSDEV dev, INT x, INT y)
+BOOL METADC_MoveTo( HDC hdc, INT x, INT y )
 {
-    return MFDRV_MetaParam2(dev,META_MOVETO,x,y);
+    return metadc_param2( hdc, META_MOVETO, x, y );
 }
 
 /***********************************************************************
diff --git a/dlls/gdi32/mfdrv/init.c b/dlls/gdi32/mfdrv/init.c
index 36b523e52cc..df97817e0a9 100644
--- a/dlls/gdi32/mfdrv/init.c
+++ b/dlls/gdi32/mfdrv/init.c
@@ -161,7 +161,7 @@ static const struct gdi_dc_funcs MFDRV_Funcs =
     MFDRV_InvertRgn,                 /* pInvertRgn */
     NULL,                            /* pLineTo */
     NULL,                            /* pModifyWorldTransform */
-    MFDRV_MoveTo,                    /* pMoveTo */
+    NULL,                            /* pMoveTo */
     MFDRV_OffsetClipRgn,             /* pOffsetClipRgn */
     MFDRV_OffsetViewportOrgEx,       /* pOffsetViewportOrgEx */
     MFDRV_OffsetWindowOrgEx,         /* pOffsetWindowOrgEx */
diff --git a/dlls/gdi32/mfdrv/metafiledrv.h b/dlls/gdi32/mfdrv/metafiledrv.h
index 88c149e0523..b2384602743 100644
--- a/dlls/gdi32/mfdrv/metafiledrv.h
+++ b/dlls/gdi32/mfdrv/metafiledrv.h
@@ -84,7 +84,6 @@ extern BOOL CDECL MFDRV_FlattenPath( PHYSDEV dev ) DECLSPEC_HIDDEN;
 extern BOOL CDECL MFDRV_FrameRgn( PHYSDEV dev, HRGN hrgn, HBRUSH hbrush, INT x, INT y ) DECLSPEC_HIDDEN;
 extern INT  CDECL MFDRV_IntersectClipRect( PHYSDEV dev, INT left, INT top, INT right, INT bottom ) DECLSPEC_HIDDEN;
 extern BOOL CDECL MFDRV_InvertRgn( PHYSDEV dev, HRGN hrgn ) DECLSPEC_HIDDEN;
-extern BOOL CDECL MFDRV_MoveTo( PHYSDEV dev, INT x, INT y ) DECLSPEC_HIDDEN;
 extern INT  CDECL MFDRV_OffsetClipRgn( PHYSDEV dev, INT x, INT y ) DECLSPEC_HIDDEN;
 extern BOOL CDECL MFDRV_OffsetViewportOrgEx( PHYSDEV dev, INT x, INT y, POINT *pt ) DECLSPEC_HIDDEN;
 extern BOOL CDECL MFDRV_OffsetWindowOrgEx( PHYSDEV dev, INT x, INT y, POINT *pt ) DECLSPEC_HIDDEN;
diff --git a/dlls/gdi32/tests/metafile.c b/dlls/gdi32/tests/metafile.c
index 574ccc3d98f..2ea8b1070ce 100644
--- a/dlls/gdi32/tests/metafile.c
+++ b/dlls/gdi32/tests/metafile.c
@@ -3302,16 +3302,12 @@ static void test_mf_Graphics(void)
     ok( ret, "MoveToEx error %d.\n", GetLastError());
     ret = LineTo(hdcMetafile, 2, 2);
     ok( ret, "LineTo error %d.\n", GetLastError());
+
+    oldpoint.x = oldpoint.y = 0xdeadbeef;
     ret = MoveToEx(hdcMetafile, 1, 1, &oldpoint);
     ok( ret, "MoveToEx error %d.\n", GetLastError());
-
-/* oldpoint gets garbage under Win XP, so the following test would
- * work under Wine but fails under Windows:
- *
- *   ok((oldpoint.x == 2) && (oldpoint.y == 2),
- *       "MoveToEx: (x, y) = (%ld, %ld), should be (2, 2).\n",
- *       oldpoint.x, oldpoint.y);
- */
+    ok(oldpoint.x == 0xdeadbeef && oldpoint.y == 0xdeadbeef,
+       "MoveToEx modified oldpoint\n");
 
     ret = Ellipse(hdcMetafile, 0, 0, 2, 2);
     ok( ret, "Ellipse error %d.\n", GetLastError());




More information about the wine-cvs mailing list