Module: wine Branch: master Commit: b70616b50832a9e887a619123bcb61d52de7631c URL: https://source.winehq.org/git/wine.git/?a=commit;h=b70616b50832a9e887a619123...
Author: Jacek Caban jacek@codeweavers.com Date: Sat Jul 17 17:01:18 2021 +0200
gdi32: Handle metafiles directly in Chord and Pie implementations.
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 | 4 ++++ dlls/gdi32/gdidc.c | 8 ++++++++ dlls/gdi32/mfdrv/graphics.c | 20 ++++++++++---------- dlls/gdi32/mfdrv/init.c | 15 +++++++++++++-- dlls/gdi32/mfdrv/metafiledrv.h | 7 +++---- 5 files changed, 38 insertions(+), 16 deletions(-)
diff --git a/dlls/gdi32/gdi_private.h b/dlls/gdi32/gdi_private.h index 41758b6a25b..8c014b7123f 100644 --- a/dlls/gdi32/gdi_private.h +++ b/dlls/gdi32/gdi_private.h @@ -37,7 +37,11 @@ static inline BOOL is_meta_dc( HDC hdc ) return (handle & NTGDI_HANDLE_TYPE_MASK) >> NTGDI_HANDLE_TYPE_SHIFT == NTGDI_OBJ_METADC; }
+extern BOOL METADC_Chord( HDC hdc, INT left, INT top, INT right, INT bottom, INT xstart, + INT ystart, INT xend, INT yend ) DECLSPEC_HIDDEN; extern BOOL METADC_LineTo( HDC hdc, INT x, INT y ) DECLSPEC_HIDDEN; extern BOOL METADC_MoveTo( HDC hdc, INT x, INT y ) DECLSPEC_HIDDEN; +extern BOOL METADC_Pie( HDC hdc, INT left, INT top, INT right, INT bottom, + INT xstart, INT ystart, INT xend, INT yend ) DECLSPEC_HIDDEN;
#endif /* __WINE_GDI_PRIVATE_H */ diff --git a/dlls/gdi32/gdidc.c b/dlls/gdi32/gdidc.c index 1aac2d5b418..d3f71d3c59d 100644 --- a/dlls/gdi32/gdidc.c +++ b/dlls/gdi32/gdidc.c @@ -81,6 +81,10 @@ BOOL WINAPI Chord( HDC hdc, INT left, INT top, INT right, INT bottom, TRACE( "%p, (%d, %d)-(%d, %d), (%d, %d), (%d, %d)\n", hdc, left, top, right, bottom, xstart, ystart, xend, yend );
+ if (is_meta_dc( hdc )) + return METADC_Chord( hdc, left, top, right, bottom, + xstart, ystart, xend, yend ); + return NtGdiArcInternal( NtGdiChord, hdc, left, top, right, bottom, xstart, ystart, xend, yend ); } @@ -94,6 +98,10 @@ BOOL WINAPI Pie( HDC hdc, INT left, INT top, INT right, INT bottom, TRACE( "%p, (%d, %d)-(%d, %d), (%d, %d), (%d, %d)\n", hdc, left, top, right, bottom, xstart, ystart, xend, yend );
+ if (is_meta_dc( hdc )) + return METADC_Pie( hdc, left, top, right, bottom, + xstart, ystart, xend, yend ); + return NtGdiArcInternal( NtGdiPie, hdc, left, top, right, bottom, xstart, ystart, xend, yend ); } diff --git a/dlls/gdi32/mfdrv/graphics.c b/dlls/gdi32/mfdrv/graphics.c index ebed0f8bc3b..89793d0e72d 100644 --- a/dlls/gdi32/mfdrv/graphics.c +++ b/dlls/gdi32/mfdrv/graphics.c @@ -59,24 +59,24 @@ BOOL CDECL MFDRV_Arc( PHYSDEV dev, INT left, INT top, INT right, INT bottom,
/*********************************************************************** - * MFDRV_Pie + * METADC_Pie */ -BOOL CDECL MFDRV_Pie( PHYSDEV dev, INT left, INT top, INT right, INT bottom, - INT xstart, INT ystart, INT xend, INT yend ) +BOOL METADC_Pie( HDC hdc, INT left, INT top, INT right, INT bottom, + INT xstart, INT ystart, INT xend, INT yend ) { - return MFDRV_MetaParam8(dev, META_PIE, left, top, right, bottom, - xstart, ystart, xend, yend); + return metadc_param8( hdc, META_PIE, left, top, right, bottom, + xstart, ystart, xend, yend ); }
/*********************************************************************** - * MFDRV_Chord + * METADC_Chord */ -BOOL CDECL MFDRV_Chord( PHYSDEV dev, INT left, INT top, INT right, INT bottom, - INT xstart, INT ystart, INT xend, INT yend ) +BOOL METADC_Chord( HDC hdc, INT left, INT top, INT right, INT bottom, + INT xstart, INT ystart, INT xend, INT yend ) { - return MFDRV_MetaParam8(dev, META_CHORD, left, top, right, bottom, - xstart, ystart, xend, yend); + return metadc_param8( hdc, META_CHORD, left, top, right, bottom, + xstart, ystart, xend, yend ); }
/*********************************************************************** diff --git a/dlls/gdi32/mfdrv/init.c b/dlls/gdi32/mfdrv/init.c index df97817e0a9..17352282471 100644 --- a/dlls/gdi32/mfdrv/init.c +++ b/dlls/gdi32/mfdrv/init.c @@ -107,7 +107,7 @@ static const struct gdi_dc_funcs MFDRV_Funcs = NULL, /* pArcTo */ MFDRV_BeginPath, /* pBeginPath */ NULL, /* pBlendImage */ - MFDRV_Chord, /* pChord */ + NULL, /* pChord */ MFDRV_CloseFigure, /* pCloseFigure */ MFDRV_CreateCompatibleDC, /* pCreateCompatibleDC */ NULL, /* pCreateDC */ @@ -167,7 +167,7 @@ static const struct gdi_dc_funcs MFDRV_Funcs = MFDRV_OffsetWindowOrgEx, /* pOffsetWindowOrgEx */ MFDRV_PaintRgn, /* pPaintRgn */ MFDRV_PatBlt, /* pPatBlt */ - MFDRV_Pie, /* pPie */ + NULL, /* pPie */ MFDRV_PolyBezier, /* pPolyBezier */ MFDRV_PolyBezierTo, /* pPolyBezierTo */ NULL, /* pPolyDraw */ @@ -613,3 +613,14 @@ BOOL metadc_param2( HDC hdc, short func, short param1, short param2 ) if (!(dev = get_metadc_ptr( hdc ))) return FALSE; return MFDRV_MetaParam2( &dev->dev, func, param1, param2 ); } + +BOOL metadc_param8( HDC hdc, short func, short param1, short param2, + short param3, short param4, short param5, + short param6, short param7, short param8) +{ + METAFILEDRV_PDEVICE *dev; + + if (!(dev = get_metadc_ptr( hdc ))) return FALSE; + return MFDRV_MetaParam8( &dev->dev, func, param1, param2, param3, + param4, param5, param6, param7, param8 ); +} diff --git a/dlls/gdi32/mfdrv/metafiledrv.h b/dlls/gdi32/mfdrv/metafiledrv.h index b2384602743..fd206b75ac0 100644 --- a/dlls/gdi32/mfdrv/metafiledrv.h +++ b/dlls/gdi32/mfdrv/metafiledrv.h @@ -60,6 +60,9 @@ extern BOOL MFDRV_RemoveHandle( PHYSDEV dev, UINT index ) DECLSPEC_HIDDEN; extern INT16 MFDRV_CreateBrushIndirect( PHYSDEV dev, HBRUSH hBrush ) DECLSPEC_HIDDEN;
extern BOOL metadc_param2( HDC hdc, short func, short param1, short param2 ) DECLSPEC_HIDDEN; +extern BOOL metadc_param8( HDC hdc, short func, short param1, short param2, + short param3, short param4, short param5, short param6, + short param7, short param8 ) DECLSPEC_HIDDEN;
/* Metafile driver functions */
@@ -67,8 +70,6 @@ extern BOOL CDECL MFDRV_AbortPath( PHYSDEV dev ) DECLSPEC_HIDDEN; extern BOOL CDECL MFDRV_Arc( PHYSDEV dev, INT left, INT top, INT right, INT bottom, INT xstart, INT ystart, INT xend, INT yend ) DECLSPEC_HIDDEN; extern BOOL CDECL MFDRV_BeginPath( PHYSDEV dev ) DECLSPEC_HIDDEN; -extern BOOL CDECL MFDRV_Chord( PHYSDEV dev, INT left, INT top, INT right, - INT bottom, INT xstart, INT ystart, INT xend, INT yend ) DECLSPEC_HIDDEN; extern BOOL CDECL MFDRV_CloseFigure( PHYSDEV dev ) DECLSPEC_HIDDEN; extern BOOL CDECL MFDRV_DeleteObject( PHYSDEV dev, HGDIOBJ obj ) DECLSPEC_HIDDEN; extern BOOL CDECL MFDRV_Ellipse( PHYSDEV dev, INT left, INT top, INT right, INT bottom ) DECLSPEC_HIDDEN; @@ -89,8 +90,6 @@ extern BOOL CDECL MFDRV_OffsetViewportOrgEx( PHYSDEV dev, INT x, INT y, POINT *p extern BOOL CDECL MFDRV_OffsetWindowOrgEx( PHYSDEV dev, INT x, INT y, POINT *pt ) DECLSPEC_HIDDEN; extern BOOL CDECL MFDRV_PaintRgn( PHYSDEV dev, HRGN hrgn ) DECLSPEC_HIDDEN; extern BOOL CDECL MFDRV_PatBlt( PHYSDEV dev, struct bitblt_coords *dst, DWORD rop ) DECLSPEC_HIDDEN; -extern BOOL CDECL MFDRV_Pie( PHYSDEV dev, INT left, INT top, INT right, - INT bottom, INT xstart, INT ystart, INT xend, INT yend ) DECLSPEC_HIDDEN; extern BOOL CDECL MFDRV_PolyBezier( PHYSDEV dev, const POINT* pt, DWORD count ) DECLSPEC_HIDDEN; extern BOOL CDECL MFDRV_PolyBezierTo( PHYSDEV dev, const POINT* pt, DWORD count ) DECLSPEC_HIDDEN; extern BOOL CDECL MFDRV_PolyPolygon( PHYSDEV dev, const POINT* pt, const INT* counts, UINT polygons) DECLSPEC_HIDDEN;