From 2ef5b9720f9867371a5dcc6069d819cc93e3929d Mon Sep 17 00:00:00 2001 From: Jacek Caban Date: Tue, 17 Aug 2021 11:39:46 +0200 Subject: [PATCH] gdi32: Directly handle EMFs in GdiComment. Signed-off-by: Jacek Caban Signed-off-by: Huw Davies Signed-off-by: Alexandre Julliard --- dlls/gdi32/enhmfdrv/enhmetafiledrv.h | 1 - dlls/gdi32/enhmfdrv/init.c | 2 +- dlls/gdi32/enhmfdrv/objects.c | 11 +++++++---- dlls/gdi32/gdiobj.c | 19 ------------------- 4 files changed, 8 insertions(+), 25 deletions(-) diff --git a/dlls/gdi32/enhmfdrv/enhmetafiledrv.h b/dlls/gdi32/enhmfdrv/enhmetafiledrv.h index 3e24af9f0da..fb108c15be5 100644 --- a/dlls/gdi32/enhmfdrv/enhmetafiledrv.h +++ b/dlls/gdi32/enhmfdrv/enhmetafiledrv.h @@ -73,7 +73,6 @@ extern BOOL CDECL EMFDRV_FillPath( PHYSDEV dev ) DECLSPEC_HIDDEN; extern BOOL CDECL EMFDRV_FillRgn( PHYSDEV dev, HRGN hrgn, HBRUSH hbrush ) DECLSPEC_HIDDEN; extern BOOL CDECL EMFDRV_FlattenPath( PHYSDEV dev ) DECLSPEC_HIDDEN; extern BOOL CDECL EMFDRV_FrameRgn( PHYSDEV dev, HRGN hrgn, HBRUSH hbrush, INT width, INT height ) DECLSPEC_HIDDEN; -extern BOOL CDECL EMFDRV_GdiComment( PHYSDEV dev, UINT bytes, const BYTE *buffer ) DECLSPEC_HIDDEN; extern INT CDECL EMFDRV_GetDeviceCaps( PHYSDEV dev, INT cap ) DECLSPEC_HIDDEN; extern BOOL CDECL EMFDRV_GradientFill( PHYSDEV dev, TRIVERTEX *vert_array, ULONG nvert, void *grad_array, ULONG ngrad, ULONG mode ) DECLSPEC_HIDDEN; diff --git a/dlls/gdi32/enhmfdrv/init.c b/dlls/gdi32/enhmfdrv/init.c index bdae8005e90..4bd9d831a53 100644 --- a/dlls/gdi32/enhmfdrv/init.c +++ b/dlls/gdi32/enhmfdrv/init.c @@ -66,7 +66,7 @@ static const struct gdi_dc_funcs emfdrv_driver = EMFDRV_FlattenPath, /* pFlattenPath */ NULL, /* pFontIsLinked */ EMFDRV_FrameRgn, /* pFrameRgn */ - EMFDRV_GdiComment, /* pGdiComment */ + NULL, /* pGdiComment */ NULL, /* pGetBoundsRect */ NULL, /* pGetCharABCWidths */ NULL, /* pGetCharABCWidthsI */ diff --git a/dlls/gdi32/enhmfdrv/objects.c b/dlls/gdi32/enhmfdrv/objects.c index 14632dc7b23..1e2cb52dc6a 100644 --- a/dlls/gdi32/enhmfdrv/objects.c +++ b/dlls/gdi32/enhmfdrv/objects.c @@ -510,15 +510,18 @@ COLORREF CDECL EMFDRV_SetDCPenColor( PHYSDEV dev, COLORREF color ) return EMFDRV_WriteRecord( dev, &emr.emr ) ? color : CLR_INVALID; } -/****************************************************************** - * EMFDRV_GdiComment +/******************************************************************* + * GdiComment (GDI32.@) */ -BOOL CDECL EMFDRV_GdiComment(PHYSDEV dev, UINT bytes, const BYTE *buffer) +BOOL WINAPI GdiComment( HDC hdc, UINT bytes, const BYTE *buffer ) { + DC_ATTR *dc_attr; EMRGDICOMMENT *emr; UINT total, rounded_size; BOOL ret; + if (!(dc_attr = get_dc_attr( hdc )) || !dc_attr->emf) return FALSE; + rounded_size = (bytes+3) & ~3; total = offsetof(EMRGDICOMMENT,Data) + rounded_size; @@ -529,7 +532,7 @@ BOOL CDECL EMFDRV_GdiComment(PHYSDEV dev, UINT bytes, const BYTE *buffer) memset(&emr->Data[bytes], 0, rounded_size - bytes); memcpy(&emr->Data[0], buffer, bytes); - ret = EMFDRV_WriteRecord( dev, &emr->emr ); + ret = EMFDRV_WriteRecord( dc_attr->emf, &emr->emr ); HeapFree(GetProcessHeap(), 0, emr); diff --git a/dlls/gdi32/gdiobj.c b/dlls/gdi32/gdiobj.c index 8435c009716..da428d149ce 100644 --- a/dlls/gdi32/gdiobj.c +++ b/dlls/gdi32/gdiobj.c @@ -1217,25 +1217,6 @@ BOOL WINAPI GetColorAdjustment(HDC hdc, LPCOLORADJUSTMENT lpca) return FALSE; } -/******************************************************************* - * GdiComment [GDI32.@] - * - * - */ -BOOL WINAPI GdiComment(HDC hdc, UINT cbSize, const BYTE *lpData) -{ - DC *dc = get_dc_ptr(hdc); - BOOL ret = FALSE; - - if(dc) - { - PHYSDEV physdev = GET_DC_PHYSDEV( dc, pGdiComment ); - ret = physdev->funcs->pGdiComment( physdev, cbSize, lpData ); - release_dc_ptr( dc ); - } - return ret; -} - /******************************************************************* * SetColorAdjustment [GDI32.@] *