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