Jacek Caban : gdi32: Use NtGdiCloseFigure for CloseFigure implementation.

Alexandre Julliard julliard at winehq.org
Fri Jul 23 18:08:00 CDT 2021


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Fri Jul 23 10:50:13 2021 +0200

gdi32: Use NtGdiCloseFigure for CloseFigure 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/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 );




More information about the wine-cvs mailing list