From 0f3173e7d97bfcd4a189cee1916f1bc1e0fb47b7 Mon Sep 17 00:00:00 2001 From: Jacek Caban Date: Fri, 23 Jul 2021 10:50:13 +0200 Subject: [PATCH] gdi32: Use NtGdiCloseFigure for CloseFigure implementation. Signed-off-by: Jacek Caban Signed-off-by: Huw Davies Signed-off-by: Alexandre Julliard --- dlls/gdi32/enhmfdrv/dc.c | 19 +++---------------- dlls/gdi32/enhmfdrv/enhmetafiledrv.h | 1 - dlls/gdi32/enhmfdrv/init.c | 4 ++-- dlls/gdi32/gdi_private.h | 1 + dlls/gdi32/gdidc.c | 12 ++++++++++++ dlls/gdi32/path.c | 6 ++---- 6 files changed, 20 insertions(+), 23 deletions(-) diff --git a/dlls/gdi32/enhmfdrv/dc.c b/dlls/gdi32/enhmfdrv/dc.c index 7c7c060a53b..855f01970d4 100644 --- a/dlls/gdi32/enhmfdrv/dc.c +++ b/dlls/gdi32/enhmfdrv/dc.c @@ -513,15 +513,14 @@ BOOL CDECL EMFDRV_BeginPath( PHYSDEV dev ) return TRUE; } -BOOL CDECL EMFDRV_CloseFigure( PHYSDEV dev ) +BOOL EMFDC_CloseFigure( DC_ATTR *dc_attr ) { EMRCLOSEFIGURE emr; emr.emr.iType = EMR_CLOSEFIGURE; emr.emr.nSize = sizeof(emr); - EMFDRV_WriteRecord( dev, &emr.emr ); - return FALSE; /* always fails without a path */ + return EMFDRV_WriteRecord( dc_attr->emf, &emr.emr ); } BOOL CDECL EMFDRV_EndPath( PHYSDEV dev ) @@ -611,18 +610,6 @@ static BOOL CDECL emfpathdrv_BeginPath( PHYSDEV dev ) return (emfdev->funcs->pBeginPath( emfdev ) && next->funcs->pBeginPath( next )); } -/*********************************************************************** - * emfpathdrv_CloseFigure - */ -static BOOL CDECL emfpathdrv_CloseFigure( PHYSDEV dev ) -{ - PHYSDEV emfdev = get_emfdev( dev ); - PHYSDEV next = GET_NEXT_PHYSDEV( dev, pCloseFigure ); - - emfdev->funcs->pCloseFigure( emfdev ); - return next->funcs->pCloseFigure( next ); -} - /*********************************************************************** * emfpathdrv_CreateDC */ @@ -670,7 +657,7 @@ static const struct gdi_dc_funcs emfpath_driver = emfpathdrv_BeginPath, /* pBeginPath */ NULL, /* pBlendImage */ NULL, /* pChord */ - emfpathdrv_CloseFigure, /* pCloseFigure */ + NULL, /* pCloseFigure */ NULL, /* pCreateCompatibleDC */ emfpathdrv_CreateDC, /* pCreateDC */ emfpathdrv_DeleteDC, /* pDeleteDC */ diff --git a/dlls/gdi32/enhmfdrv/enhmetafiledrv.h b/dlls/gdi32/enhmfdrv/enhmetafiledrv.h index 128b157c45a..554f55973f6 100644 --- a/dlls/gdi32/enhmfdrv/enhmetafiledrv.h +++ b/dlls/gdi32/enhmfdrv/enhmetafiledrv.h @@ -71,7 +71,6 @@ extern BOOL CDECL EMFDRV_BitBlt( PHYSDEV devDst, INT xDst, INT yDst, INT wid PHYSDEV devSrc, INT xSrc, INT ySrc, DWORD rop ) DECLSPEC_HIDDEN; extern BOOL CDECL EMFDRV_Chord( PHYSDEV dev, INT left, INT top, INT right, INT bottom, INT xstart, INT ystart, INT xend, INT yend ) DECLSPEC_HIDDEN; -extern BOOL CDECL EMFDRV_CloseFigure( PHYSDEV dev ) DECLSPEC_HIDDEN; extern BOOL CDECL EMFDRV_DeleteObject( PHYSDEV dev, HGDIOBJ obj ) DECLSPEC_HIDDEN; extern BOOL CDECL EMFDRV_Ellipse( PHYSDEV dev, INT left, INT top, INT right, INT bottom ) DECLSPEC_HIDDEN; extern BOOL CDECL EMFDRV_EndPath( PHYSDEV dev ) DECLSPEC_HIDDEN; diff --git a/dlls/gdi32/enhmfdrv/init.c b/dlls/gdi32/enhmfdrv/init.c index 0aac934a87b..4e7105b1b80 100644 --- a/dlls/gdi32/enhmfdrv/init.c +++ b/dlls/gdi32/enhmfdrv/init.c @@ -44,8 +44,8 @@ static const struct gdi_dc_funcs emfdrv_driver = EMFDRV_ArcTo, /* pArcTo */ EMFDRV_BeginPath, /* pBeginPath */ NULL, /* pBlendImage */ - EMFDRV_Chord, /* pChord */ - EMFDRV_CloseFigure, /* pCloseFigure */ + NULL, /* pChord */ + NULL, /* pCloseFigure */ NULL, /* pCreateCompatibleDC */ NULL, /* pCreateDC */ EMFDRV_DeleteDC, /* pDeleteDC */ diff --git a/dlls/gdi32/gdi_private.h b/dlls/gdi32/gdi_private.h index ea670732f96..829dacd073c 100644 --- a/dlls/gdi32/gdi_private.h +++ b/dlls/gdi32/gdi_private.h @@ -67,6 +67,7 @@ extern BOOL EMFDC_AngleArc( DC_ATTR *dc_attr, INT x, INT y, DWORD radius, FLOAT extern BOOL EMFDC_ArcChordPie( DC_ATTR *dc_attr, INT left, INT top, INT right, INT bottom, INT xstart, INT ystart, INT xend, INT yend, DWORD type ) DECLSPEC_HIDDEN; +extern BOOL EMFDC_CloseFigure( DC_ATTR *dc_attr ) DECLSPEC_HIDDEN; extern BOOL EMFDC_Ellipse( DC_ATTR *dc_attr, INT left, INT top, INT right, INT bottom ) DECLSPEC_HIDDEN; extern BOOL EMFDC_ExtTextOut( DC_ATTR *dc_attr, INT x, INT y, UINT flags, const RECT *rect, diff --git a/dlls/gdi32/gdidc.c b/dlls/gdi32/gdidc.c index 9200803b6f0..1d2ad9766c4 100644 --- a/dlls/gdi32/gdidc.c +++ b/dlls/gdi32/gdidc.c @@ -375,3 +375,15 @@ BOOL WINAPI ExtTextOutW( HDC hdc, INT x, INT y, UINT flags, const RECT *rect, return FALSE; return NtGdiExtTextOutW( hdc, x, y, flags, rect, str, count, dx, 0 ); } + +/*********************************************************************** + * CloseFigure (GDI32.@) + */ +BOOL WINAPI CloseFigure( HDC hdc ) +{ + DC_ATTR *dc_attr; + + if (!(dc_attr = get_dc_attr( hdc ))) return FALSE; + if (dc_attr->emf && !EMFDC_CloseFigure( dc_attr )) return FALSE; + return NtGdiCloseFigure( hdc ); +} diff --git a/dlls/gdi32/path.c b/dlls/gdi32/path.c index 3646ba91079..fc9a4d4721f 100644 --- a/dlls/gdi32/path.c +++ b/dlls/gdi32/path.c @@ -617,11 +617,9 @@ BOOL WINAPI AbortPath( HDC hdc ) /*********************************************************************** - * CloseFigure (GDI32.@) - * - * FIXME: Check that SetLastError is being called correctly + * NtGdiCloseFigure (win32u.@) */ -BOOL WINAPI CloseFigure(HDC hdc) +BOOL WINAPI NtGdiCloseFigure( HDC hdc ) { BOOL ret = FALSE; DC *dc = get_dc_ptr( hdc );