diff --git a/dlls/gdi32/dc.c b/dlls/gdi32/dc.c index 7af91e3bcdb..d14593652b8 100644 --- a/dlls/gdi32/dc.c +++ b/dlls/gdi32/dc.c @@ -1392,34 +1392,6 @@ UINT WINAPI SetBoundsRect(HDC hdc, const RECT* rect, UINT flags) } -/*********************************************************************** - * SetPolyFillMode (GDI32.@) - */ -INT WINAPI SetPolyFillMode( HDC hdc, INT mode ) -{ - INT ret = 0; - DC *dc; - - if ((mode <= 0) || (mode > POLYFILL_LAST)) - { - SetLastError(ERROR_INVALID_PARAMETER); - return 0; - } - if ((dc = get_dc_ptr( hdc ))) - { - PHYSDEV physdev = GET_DC_PHYSDEV( dc, pSetPolyFillMode ); - mode = physdev->funcs->pSetPolyFillMode( physdev, mode ); - if (mode) - { - ret = dc->attr->poly_fill_mode; - dc->attr->poly_fill_mode = mode; - } - release_dc_ptr( dc ); - } - return ret; -} - - /*********************************************************************** * GetStretchBltMode (GDI32.@) */ diff --git a/dlls/gdi32/enhmfdrv/dc.c b/dlls/gdi32/enhmfdrv/dc.c index 69e4a89af97..78969c69783 100644 --- a/dlls/gdi32/enhmfdrv/dc.c +++ b/dlls/gdi32/enhmfdrv/dc.c @@ -125,13 +125,13 @@ BOOL EMFDC_SetROP2( DC_ATTR *dc_attr, INT rop ) return EMFDRV_WriteRecord( dc_attr->emf, &emr.emr ); } -INT CDECL EMFDRV_SetPolyFillMode( PHYSDEV dev, INT mode ) +BOOL EMFDC_SetPolyFillMode( DC_ATTR *dc_attr, INT mode ) { EMRSETPOLYFILLMODE emr; emr.emr.iType = EMR_SETPOLYFILLMODE; emr.emr.nSize = sizeof(emr); emr.iMode = mode; - return EMFDRV_WriteRecord( dev, &emr.emr ) ? mode : 0; + return EMFDRV_WriteRecord( dc_attr->emf, &emr.emr ); } INT CDECL EMFDRV_SetStretchBltMode( PHYSDEV dev, INT mode ) diff --git a/dlls/gdi32/enhmfdrv/enhmetafiledrv.h b/dlls/gdi32/enhmfdrv/enhmetafiledrv.h index def005cefbd..12b39067b2b 100644 --- a/dlls/gdi32/enhmfdrv/enhmetafiledrv.h +++ b/dlls/gdi32/enhmfdrv/enhmetafiledrv.h @@ -123,7 +123,6 @@ extern DWORD CDECL EMFDRV_SetLayout( PHYSDEV dev, DWORD layout ) DECLSPEC_HID extern INT CDECL EMFDRV_SetMapMode( PHYSDEV dev, INT mode ) DECLSPEC_HIDDEN; extern DWORD CDECL EMFDRV_SetMapperFlags( PHYSDEV dev, DWORD flags ) DECLSPEC_HIDDEN; extern COLORREF CDECL EMFDRV_SetPixel( PHYSDEV dev, INT x, INT y, COLORREF color ) DECLSPEC_HIDDEN; -extern INT CDECL EMFDRV_SetPolyFillMode( PHYSDEV dev, INT mode ) DECLSPEC_HIDDEN; extern INT CDECL EMFDRV_SetStretchBltMode( PHYSDEV dev, INT mode ) DECLSPEC_HIDDEN; extern COLORREF CDECL EMFDRV_SetTextColor( PHYSDEV dev, COLORREF color ) DECLSPEC_HIDDEN; extern BOOL CDECL EMFDRV_SetTextJustification( PHYSDEV dev, INT nBreakExtra, INT nBreakCount ) DECLSPEC_HIDDEN; diff --git a/dlls/gdi32/enhmfdrv/init.c b/dlls/gdi32/enhmfdrv/init.c index 929d7a2dd51..8f210cb71a3 100644 --- a/dlls/gdi32/enhmfdrv/init.c +++ b/dlls/gdi32/enhmfdrv/init.c @@ -139,7 +139,7 @@ static const struct gdi_dc_funcs emfdrv_driver = EMFDRV_SetMapMode, /* pSetMapMode */ EMFDRV_SetMapperFlags, /* pSetMapperFlags */ EMFDRV_SetPixel, /* pSetPixel */ - EMFDRV_SetPolyFillMode, /* pSetPolyFillMode */ + NULL, /* pSetPolyFillMode */ NULL, /* pSetRelAbs */ EMFDRV_SetStretchBltMode, /* pSetStretchBltMode */ NULL, /* pSetTextCharacterExtra */ diff --git a/dlls/gdi32/gdi_private.h b/dlls/gdi32/gdi_private.h index e57524d0a29..dec66f69dbc 100644 --- a/dlls/gdi32/gdi_private.h +++ b/dlls/gdi32/gdi_private.h @@ -68,6 +68,7 @@ extern BOOL METADC_RoundRect( HDC hdc, INT left, INT top, INT right, INT bottom, INT ell_width, INT ell_height ) DECLSPEC_HIDDEN; extern BOOL METADC_SetBkMode( HDC hdc, INT mode ) DECLSPEC_HIDDEN; extern BOOL METADC_SetPixel( HDC hdc, INT x, INT y, COLORREF color ) DECLSPEC_HIDDEN; +extern BOOL METADC_SetPolyFillMode( HDC hdc, INT mode ) DECLSPEC_HIDDEN; extern BOOL METADC_SetRelAbs( HDC hdc, INT mode ) DECLSPEC_HIDDEN; extern BOOL METADC_SetROP2( HDC hdc, INT rop ) DECLSPEC_HIDDEN; extern BOOL METADC_SetTextAlign( HDC hdc, UINT align ) DECLSPEC_HIDDEN; @@ -115,6 +116,7 @@ extern BOOL EMFDC_RoundRect( DC_ATTR *dc_attr, INT left, INT top, INT right, INT extern BOOL EMFDC_SetArcDirection( DC_ATTR *dc_attr, INT dir ) DECLSPEC_HIDDEN; extern BOOL EMFDC_SetBkMode( DC_ATTR *dc_attr, INT mode ) DECLSPEC_HIDDEN; extern BOOL EMFDC_SetPixel( DC_ATTR *dc_attr, INT x, INT y, COLORREF color ) DECLSPEC_HIDDEN; +extern BOOL EMFDC_SetPolyFillMode( DC_ATTR *dc_attr, INT mode ) DECLSPEC_HIDDEN; extern BOOL EMFDC_SetROP2( DC_ATTR *dc_attr, INT rop ) DECLSPEC_HIDDEN; extern BOOL EMFDC_SetTextAlign( DC_ATTR *dc_attr, UINT align ) DECLSPEC_HIDDEN; diff --git a/dlls/gdi32/gdidc.c b/dlls/gdi32/gdidc.c index b3ec0cf5587..90c70f9d976 100644 --- a/dlls/gdi32/gdidc.c +++ b/dlls/gdi32/gdidc.c @@ -173,6 +173,29 @@ INT WINAPI GetPolyFillMode( HDC hdc ) return dc_attr ? dc_attr->poly_fill_mode : 0; } +/*********************************************************************** + * SetPolyFillMode (GDI32.@) + */ +INT WINAPI SetPolyFillMode( HDC hdc, INT mode ) +{ + DC_ATTR *dc_attr; + INT ret; + + if (mode <= 0 || mode > POLYFILL_LAST) + { + SetLastError(ERROR_INVALID_PARAMETER); + return 0; + } + + if (is_meta_dc( hdc )) return METADC_SetPolyFillMode( hdc, mode ); + if (!(dc_attr = get_dc_attr( hdc ))) return 0; + if (dc_attr->emf && !EMFDC_SetPolyFillMode( dc_attr, mode )) return 0; + + ret = dc_attr->poly_fill_mode; + dc_attr->poly_fill_mode = mode; + return ret; +} + /*********************************************************************** * GetCurrentPositionEx (GDI32.@) */ diff --git a/dlls/gdi32/mfdrv/dc.c b/dlls/gdi32/mfdrv/dc.c index 661d2e49db4..4b886aaba6d 100644 --- a/dlls/gdi32/mfdrv/dc.c +++ b/dlls/gdi32/mfdrv/dc.c @@ -60,9 +60,9 @@ BOOL METADC_SetRelAbs( HDC hdc, INT mode ) return metadc_param1( hdc, META_SETRELABS, (WORD)mode ); } -INT CDECL MFDRV_SetPolyFillMode( PHYSDEV dev, INT mode ) +BOOL METADC_SetPolyFillMode( HDC hdc, INT mode ) { - return MFDRV_MetaParam1( dev, META_SETPOLYFILLMODE, (WORD)mode) ? mode : 0; + return metadc_param1( hdc, META_SETPOLYFILLMODE, mode ); } INT CDECL MFDRV_SetStretchBltMode( PHYSDEV dev, INT mode ) diff --git a/dlls/gdi32/mfdrv/init.c b/dlls/gdi32/mfdrv/init.c index 729140da700..f8c4153c410 100644 --- a/dlls/gdi32/mfdrv/init.c +++ b/dlls/gdi32/mfdrv/init.c @@ -202,7 +202,7 @@ static const struct gdi_dc_funcs MFDRV_Funcs = MFDRV_SetMapMode, /* pSetMapMode */ MFDRV_SetMapperFlags, /* pSetMapperFlags */ NULL, /* pSetPixel */ - MFDRV_SetPolyFillMode, /* pSetPolyFillMode */ + NULL, /* pSetPolyFillMode */ NULL, /* pSetRelAbs */ MFDRV_SetStretchBltMode, /* pSetStretchBltMode */ MFDRV_SetTextCharacterExtra, /* pSetTextCharacterExtra */ diff --git a/dlls/gdi32/mfdrv/metafiledrv.h b/dlls/gdi32/mfdrv/metafiledrv.h index a4c0f4b3e25..889cdfbb6a2 100644 --- a/dlls/gdi32/mfdrv/metafiledrv.h +++ b/dlls/gdi32/mfdrv/metafiledrv.h @@ -111,7 +111,6 @@ extern COLORREF CDECL MFDRV_SetDCPenColor( PHYSDEV dev, COLORREF color ) DECLSPE extern DWORD CDECL MFDRV_SetLayout( PHYSDEV dev, DWORD layout ) DECLSPEC_HIDDEN; extern INT CDECL MFDRV_SetMapMode( PHYSDEV dev, INT mode ) DECLSPEC_HIDDEN; extern DWORD CDECL MFDRV_SetMapperFlags( PHYSDEV dev, DWORD flags ) DECLSPEC_HIDDEN; -extern INT CDECL MFDRV_SetPolyFillMode( PHYSDEV dev, INT mode ) DECLSPEC_HIDDEN; extern INT CDECL MFDRV_SetStretchBltMode( PHYSDEV dev, INT mode ) DECLSPEC_HIDDEN; extern INT CDECL MFDRV_SetTextCharacterExtra( PHYSDEV dev, INT extra ) DECLSPEC_HIDDEN; extern COLORREF CDECL MFDRV_SetTextColor( PHYSDEV dev, COLORREF color ) DECLSPEC_HIDDEN;