diff --git a/dlls/gdi32/enhmfdrv/enhmetafiledrv.h b/dlls/gdi32/enhmfdrv/enhmetafiledrv.h index fd2f85ba1d1..6f1ef7c4ad9 100644 --- a/dlls/gdi32/enhmfdrv/enhmetafiledrv.h +++ b/dlls/gdi32/enhmfdrv/enhmetafiledrv.h @@ -71,7 +71,6 @@ extern BOOL CDECL EMFDRV_Chord( PHYSDEV dev, INT left, INT top, INT right, I 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 INT CDECL EMFDRV_ExcludeClipRect( PHYSDEV dev, INT left, INT top, INT right, INT bottom ) DECLSPEC_HIDDEN; -extern BOOL CDECL EMFDRV_ExtFloodFill( PHYSDEV dev, INT x, INT y, COLORREF color, UINT fillType ) DECLSPEC_HIDDEN; extern INT CDECL EMFDRV_ExtSelectClipRgn( PHYSDEV dev, HRGN hrgn, INT mode ) DECLSPEC_HIDDEN; extern BOOL CDECL EMFDRV_ExtTextOut( PHYSDEV dev, INT x, INT y, UINT flags, const RECT *lprect, LPCWSTR str, UINT count, const INT *lpDx ) DECLSPEC_HIDDEN; diff --git a/dlls/gdi32/enhmfdrv/graphics.c b/dlls/gdi32/enhmfdrv/graphics.c index 2b61b706560..bcf1b499342 100644 --- a/dlls/gdi32/enhmfdrv/graphics.c +++ b/dlls/gdi32/enhmfdrv/graphics.c @@ -792,9 +792,9 @@ BOOL CDECL EMFDRV_PolyDraw( PHYSDEV dev, const POINT *pts, const BYTE *types, DW /********************************************************************** - * EMFDRV_ExtFloodFill + * EMFDC_ExtFloodFill */ -BOOL CDECL EMFDRV_ExtFloodFill( PHYSDEV dev, INT x, INT y, COLORREF color, UINT fillType ) +BOOL EMFDC_ExtFloodFill( DC_ATTR *dc_attr, INT x, INT y, COLORREF color, UINT fill_type ) { EMREXTFLOODFILL emr; @@ -803,9 +803,9 @@ BOOL CDECL EMFDRV_ExtFloodFill( PHYSDEV dev, INT x, INT y, COLORREF color, UINT emr.ptlStart.x = x; emr.ptlStart.y = y; emr.crColor = color; - emr.iMode = fillType; + emr.iMode = fill_type; - return EMFDRV_WriteRecord( dev, &emr.emr ); + return EMFDRV_WriteRecord( dc_attr->emf, &emr.emr ); } diff --git a/dlls/gdi32/enhmfdrv/init.c b/dlls/gdi32/enhmfdrv/init.c index ad5e05a534d..45ec60c8d33 100644 --- a/dlls/gdi32/enhmfdrv/init.c +++ b/dlls/gdi32/enhmfdrv/init.c @@ -60,7 +60,7 @@ static const struct gdi_dc_funcs emfdrv_driver = EMFDRV_ExcludeClipRect, /* pExcludeClipRect */ NULL, /* pExtDeviceMode */ NULL, /* pExtEscape */ - EMFDRV_ExtFloodFill, /* pExtFloodFill */ + NULL, /* pExtFloodFill */ EMFDRV_ExtSelectClipRgn, /* pExtSelectClipRgn */ EMFDRV_ExtTextOut, /* pExtTextOut */ EMFDRV_FillPath, /* pFillPath */ diff --git a/dlls/gdi32/gdi_private.h b/dlls/gdi32/gdi_private.h index 378d85a0c19..8f0cb29a8d4 100644 --- a/dlls/gdi32/gdi_private.h +++ b/dlls/gdi32/gdi_private.h @@ -47,6 +47,8 @@ extern BOOL METADC_Arc( HDC hdc, INT left, INT top, INT right, INT bottom, 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_Ellipse( HDC hdc, INT left, INT top, INT right, INT bottom ) DECLSPEC_HIDDEN; +extern BOOL METADC_ExtFloodFill( HDC hdc, INT x, INT y, COLORREF color, + UINT fill_type ) DECLSPEC_HIDDEN; extern BOOL METADC_ExtTextOut( HDC hdc, INT x, INT y, UINT flags, const RECT *rect, const WCHAR *str, UINT count, const INT *dx ) DECLSPEC_HIDDEN; extern BOOL METADC_FillRgn( HDC hdc, HRGN hrgn, HBRUSH hbrush ) DECLSPEC_HIDDEN; @@ -78,6 +80,8 @@ 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_EndPath( DC_ATTR *dc_attr ) DECLSPEC_HIDDEN; +extern BOOL EMFDC_ExtFloodFill( DC_ATTR *dc_attr, INT x, INT y, COLORREF color, + UINT fill_type ) DECLSPEC_HIDDEN; extern BOOL EMFDC_ExtTextOut( DC_ATTR *dc_attr, INT x, INT y, UINT flags, const RECT *rect, const WCHAR *str, UINT count, const INT *dx ) DECLSPEC_HIDDEN; extern BOOL EMFDC_FillRgn( DC_ATTR *dc_attr, HRGN hrgn, HBRUSH hbrush ) DECLSPEC_HIDDEN; diff --git a/dlls/gdi32/gdidc.c b/dlls/gdi32/gdidc.c index 64a5cb06ff0..605294cc6b8 100644 --- a/dlls/gdi32/gdidc.c +++ b/dlls/gdi32/gdidc.c @@ -443,6 +443,29 @@ BOOL WINAPI InvertRgn( HDC hdc, HRGN hrgn ) return NtGdiInvertRgn( hdc, hrgn ); } +/*********************************************************************** + * ExtFloodFill (GDI32.@) + */ +BOOL WINAPI ExtFloodFill( HDC hdc, INT x, INT y, COLORREF color, UINT fill_type ) +{ + DC_ATTR *dc_attr; + + TRACE( "%p, (%d, %d), %08x, %x\n", hdc, x, y, color, fill_type ); + + if (is_meta_dc( hdc )) return METADC_ExtFloodFill( hdc, x, y, color, fill_type ); + if (!(dc_attr = get_dc_attr( hdc ))) return FALSE; + if (dc_attr->emf && !EMFDC_ExtFloodFill( dc_attr, x, y, color, fill_type )) return FALSE; + return NtGdiExtFloodFill( hdc, x, y, color, fill_type ); +} + +/*********************************************************************** + * FloodFill (GDI32.@) + */ +BOOL WINAPI FloodFill( HDC hdc, INT x, INT y, COLORREF color ) +{ + return ExtFloodFill( hdc, x, y, color, FLOODFILLBORDER ); +} + /*********************************************************************** * ExtTextOutW (GDI32.@) */ diff --git a/dlls/gdi32/mfdrv/graphics.c b/dlls/gdi32/mfdrv/graphics.c index a240f193a52..0f6b3d75e52 100644 --- a/dlls/gdi32/mfdrv/graphics.c +++ b/dlls/gdi32/mfdrv/graphics.c @@ -248,12 +248,11 @@ BOOL METADC_PolyPolygon( HDC hdc, const POINT *pt, const INT *counts, UINT polyg /********************************************************************** - * MFDRV_ExtFloodFill + * METADC_ExtFloodFill */ -BOOL CDECL MFDRV_ExtFloodFill( PHYSDEV dev, INT x, INT y, COLORREF color, UINT fillType ) +BOOL METADC_ExtFloodFill( HDC hdc, INT x, INT y, COLORREF color, UINT fillType ) { - return MFDRV_MetaParam4(dev,META_FLOODFILL,x,y,HIWORD(color), - LOWORD(color)); + return metadc_param4( hdc, META_FLOODFILL, x, y, HIWORD(color), LOWORD(color) ); } diff --git a/dlls/gdi32/mfdrv/init.c b/dlls/gdi32/mfdrv/init.c index 877f19ed1d7..8961c45d24f 100644 --- a/dlls/gdi32/mfdrv/init.c +++ b/dlls/gdi32/mfdrv/init.c @@ -123,7 +123,7 @@ static const struct gdi_dc_funcs MFDRV_Funcs = MFDRV_ExcludeClipRect, /* pExcludeClipRect */ NULL, /* pExtDeviceMode */ MFDRV_ExtEscape, /* pExtEscape */ - MFDRV_ExtFloodFill, /* pExtFloodFill */ + NULL, /* pExtFloodFill */ MFDRV_ExtSelectClipRgn, /* pExtSelectClipRgn */ NULL, /* pExtTextOut */ MFDRV_FillPath, /* pFillPath */ diff --git a/dlls/gdi32/mfdrv/metafiledrv.h b/dlls/gdi32/mfdrv/metafiledrv.h index 214de5c52ad..9b4bb2d9e84 100644 --- a/dlls/gdi32/mfdrv/metafiledrv.h +++ b/dlls/gdi32/mfdrv/metafiledrv.h @@ -80,7 +80,6 @@ extern BOOL CDECL MFDRV_CloseFigure( PHYSDEV dev ) DECLSPEC_HIDDEN; extern BOOL CDECL MFDRV_DeleteObject( PHYSDEV dev, HGDIOBJ obj ) DECLSPEC_HIDDEN; extern BOOL CDECL MFDRV_EndPath( PHYSDEV dev ) DECLSPEC_HIDDEN; extern INT CDECL MFDRV_ExcludeClipRect( PHYSDEV dev, INT left, INT top, INT right, INT bottom ) DECLSPEC_HIDDEN; -extern BOOL CDECL MFDRV_ExtFloodFill( PHYSDEV dev, INT x, INT y, COLORREF color, UINT fillType ) DECLSPEC_HIDDEN; extern INT CDECL MFDRV_ExtSelectClipRgn( PHYSDEV dev, HRGN hrgn, INT mode ) DECLSPEC_HIDDEN; extern BOOL CDECL MFDRV_FillPath( PHYSDEV dev ) DECLSPEC_HIDDEN; extern BOOL CDECL MFDRV_FillRgn( PHYSDEV dev, HRGN hrgn, HBRUSH hbrush ) DECLSPEC_HIDDEN; diff --git a/dlls/gdi32/painting.c b/dlls/gdi32/painting.c index 61d1505965d..992f2cfb2b0 100644 --- a/dlls/gdi32/painting.c +++ b/dlls/gdi32/painting.c @@ -597,34 +597,23 @@ ULONG WINAPI NtGdiPolyPolyDraw( HDC hdc, const POINT *points, const UINT *counts } /********************************************************************** - * ExtFloodFill (GDI32.@) + * NtGdiExtFloodFill (win32u.@) */ -BOOL WINAPI ExtFloodFill( HDC hdc, INT x, INT y, COLORREF color, - UINT fillType ) +BOOL WINAPI NtGdiExtFloodFill( HDC hdc, INT x, INT y, COLORREF color, UINT fill_type ) { PHYSDEV physdev; BOOL ret; DC * dc = get_dc_ptr( hdc ); - TRACE( "%p, (%d, %d), %08x, %x\n", hdc, x, y, color, fillType ); - if (!dc) return FALSE; update_dc( dc ); physdev = GET_DC_PHYSDEV( dc, pExtFloodFill ); - ret = physdev->funcs->pExtFloodFill( physdev, x, y, color, fillType ); + ret = physdev->funcs->pExtFloodFill( physdev, x, y, color, fill_type ); release_dc_ptr( dc ); return ret; } -/********************************************************************** - * FloodFill (GDI32.@) - */ -BOOL WINAPI FloodFill( HDC hdc, INT x, INT y, COLORREF color ) -{ - return ExtFloodFill( hdc, x, y, color, FLOODFILLBORDER ); -} - /*********************************************************************** * NtGdiAngleArc (win32u.@) */