Module: wine Branch: master Commit: 95b3504e1e8e065046b63cd4c5237f809b8ead00 URL: https://source.winehq.org/git/wine.git/?a=commit;h=95b3504e1e8e065046b63cd4c...
Author: Jacek Caban jacek@codeweavers.com Date: Sat Jul 17 17:20:11 2021 +0200
gdi32: Handle metafiles directly in MoveToEx implementation.
Signed-off-by: Jacek Caban jacek@codeweavers.com Signed-off-by: Huw Davies huw@codeweavers.com Signed-off-by: Alexandre Julliard julliard@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());