From 36bfd7cd71e1612770a5f7fc6d76ae3e73afe16f Mon Sep 17 00:00:00 2001 From: Jacek Caban Date: Fri, 13 Aug 2021 12:07:48 +0200 Subject: [PATCH] gdi32: Use NtGdiModifyWorldTransform for ModifyWorldTransform. Signed-off-by: Jacek Caban Signed-off-by: Huw Davies Signed-off-by: Alexandre Julliard --- dlls/gdi32/enhmfdrv/dc.c | 12 ++------- dlls/gdi32/enhmfdrv/enhmetafiledrv.h | 1 - dlls/gdi32/enhmfdrv/init.c | 2 +- dlls/gdi32/gdi_private.h | 2 ++ dlls/gdi32/gdidc.c | 12 +++++++++ dlls/gdi32/mapping.c | 48 ++++++++++++++++-------------------- include/ntgdi.h | 1 + 7 files changed, 39 insertions(+), 39 deletions(-) diff --git a/dlls/gdi32/enhmfdrv/dc.c b/dlls/gdi32/enhmfdrv/dc.c index 4e7602f1f38..744ef47a97f 100644 --- a/dlls/gdi32/enhmfdrv/dc.c +++ b/dlls/gdi32/enhmfdrv/dc.c @@ -318,12 +318,9 @@ BOOL CDECL EMFDRV_SetWorldTransform( PHYSDEV dev, const XFORM *xform) return ret; } -BOOL CDECL EMFDRV_ModifyWorldTransform( PHYSDEV dev, const XFORM *xform, DWORD mode) +BOOL EMFDC_ModifyWorldTransform( DC_ATTR *dc_attr, const XFORM *xform, DWORD mode ) { - PHYSDEV next = GET_NEXT_PHYSDEV( dev, pModifyWorldTransform ); - EMFDRV_PDEVICE *physDev = get_emf_physdev( dev ); EMRMODIFYWORLDTRANSFORM emr; - BOOL ret; emr.emr.iType = EMR_MODIFYWORLDTRANSFORM; emr.emr.nSize = sizeof(emr); @@ -341,12 +338,7 @@ BOOL CDECL EMFDRV_ModifyWorldTransform( PHYSDEV dev, const XFORM *xform, DWORD m emr.xform = *xform; } emr.iMode = mode; - - if (!EMFDRV_WriteRecord( dev, &emr.emr )) return FALSE; - physDev->modifying_transform++; - ret = next->funcs->pModifyWorldTransform( next, xform, mode ); - physDev->modifying_transform--; - return ret; + return EMFDRV_WriteRecord( dc_attr->emf, &emr.emr ); } BOOL EMFDC_SetMapperFlags( DC_ATTR *dc_attr, DWORD flags ) diff --git a/dlls/gdi32/enhmfdrv/enhmetafiledrv.h b/dlls/gdi32/enhmfdrv/enhmetafiledrv.h index ae7fa9bdd9a..d2db67cd03e 100644 --- a/dlls/gdi32/enhmfdrv/enhmetafiledrv.h +++ b/dlls/gdi32/enhmfdrv/enhmetafiledrv.h @@ -81,7 +81,6 @@ extern BOOL CDECL EMFDRV_GradientFill( PHYSDEV dev, TRIVERTEX *vert_array, U void *grad_array, ULONG ngrad, ULONG mode ) DECLSPEC_HIDDEN; extern BOOL CDECL EMFDRV_InvertRgn( PHYSDEV dev, HRGN hrgn ) DECLSPEC_HIDDEN; extern BOOL CDECL EMFDRV_LineTo( PHYSDEV dev, INT x, INT y ) DECLSPEC_HIDDEN; -extern BOOL CDECL EMFDRV_ModifyWorldTransform( PHYSDEV dev, const XFORM *xform, DWORD mode ) DECLSPEC_HIDDEN; extern BOOL CDECL EMFDRV_PatBlt( PHYSDEV dev, struct bitblt_coords *dst, DWORD rop ) DECLSPEC_HIDDEN; extern BOOL CDECL EMFDRV_Pie( PHYSDEV dev, INT left, INT top, INT right, INT bottom, INT xstart, INT ystart, INT xend, INT yend ) DECLSPEC_HIDDEN; diff --git a/dlls/gdi32/enhmfdrv/init.c b/dlls/gdi32/enhmfdrv/init.c index e9b0e5a9873..e6b501aaf77 100644 --- a/dlls/gdi32/enhmfdrv/init.c +++ b/dlls/gdi32/enhmfdrv/init.c @@ -94,7 +94,7 @@ static const struct gdi_dc_funcs emfdrv_driver = EMFDRV_GradientFill, /* pGradientFill */ EMFDRV_InvertRgn, /* pInvertRgn */ EMFDRV_LineTo, /* pLineTo */ - EMFDRV_ModifyWorldTransform, /* pModifyWorldTransform */ + NULL, /* pModifyWorldTransform */ NULL, /* pMoveTo */ NULL, /* pPaintRgn */ EMFDRV_PatBlt, /* pPatBlt */ diff --git a/dlls/gdi32/gdi_private.h b/dlls/gdi32/gdi_private.h index 305dec43c7f..f3fb35c3834 100644 --- a/dlls/gdi32/gdi_private.h +++ b/dlls/gdi32/gdi_private.h @@ -143,6 +143,8 @@ extern BOOL EMFDC_IntersectClipRect( DC_ATTR *dc_attr, INT left, INT top, INT ri INT bottom ) DECLSPEC_HIDDEN; extern BOOL EMFDC_InvertRgn( DC_ATTR *dc_attr, HRGN hrgn ) DECLSPEC_HIDDEN; extern BOOL EMFDC_LineTo( DC_ATTR *dc_attr, INT x, INT y ) DECLSPEC_HIDDEN; +extern BOOL EMFDC_ModifyWorldTransform( DC_ATTR *dc_attr, const XFORM *xform, + DWORD mode ) DECLSPEC_HIDDEN; extern BOOL EMFDC_MoveTo( DC_ATTR *dc_attr, INT x, INT y ) DECLSPEC_HIDDEN; extern BOOL EMFDC_OffsetClipRgn( DC_ATTR *dc_attr, INT x, INT y ) DECLSPEC_HIDDEN; extern BOOL EMFDC_PaintRgn( DC_ATTR *dc_attr, HRGN hrgn ) DECLSPEC_HIDDEN; diff --git a/dlls/gdi32/gdidc.c b/dlls/gdi32/gdidc.c index b8faf9fb58c..e4f26742c9f 100644 --- a/dlls/gdi32/gdidc.c +++ b/dlls/gdi32/gdidc.c @@ -601,6 +601,18 @@ BOOL WINAPI GetWorldTransform( HDC hdc, XFORM *xform ) return NtGdiGetTransform( hdc, 0x203, xform ); } +/**************************************************************************** + * ModifyWorldTransform (GDI32.@) + */ +BOOL WINAPI ModifyWorldTransform( HDC hdc, const XFORM *xform, DWORD mode ) +{ + DC_ATTR *dc_attr; + + if (!(dc_attr = get_dc_attr( hdc ))) return FALSE; + if (dc_attr->emf && !EMFDC_ModifyWorldTransform( dc_attr, xform, mode )) return FALSE; + return NtGdiModifyWorldTransform( hdc, xform, mode ); +} + /*********************************************************************** * SetStretchBltMode (GDI32.@) */ diff --git a/dlls/gdi32/mapping.c b/dlls/gdi32/mapping.c index f21b965bc4b..d30d98b8592 100644 --- a/dlls/gdi32/mapping.c +++ b/dlls/gdi32/mapping.c @@ -143,28 +143,6 @@ BOOL set_map_mode( DC *dc, int mode ) BOOL CDECL nulldrv_ModifyWorldTransform( PHYSDEV dev, const XFORM *xform, DWORD mode ) { - DC *dc = get_nulldrv_dc( dev ); - - switch (mode) - { - case MWT_IDENTITY: - dc->xformWorld2Wnd.eM11 = 1.0f; - dc->xformWorld2Wnd.eM12 = 0.0f; - dc->xformWorld2Wnd.eM21 = 0.0f; - dc->xformWorld2Wnd.eM22 = 1.0f; - dc->xformWorld2Wnd.eDx = 0.0f; - dc->xformWorld2Wnd.eDy = 0.0f; - break; - case MWT_LEFTMULTIPLY: - CombineTransform( &dc->xformWorld2Wnd, xform, &dc->xformWorld2Wnd ); - break; - case MWT_RIGHTMULTIPLY: - CombineTransform( &dc->xformWorld2Wnd, &dc->xformWorld2Wnd, xform ); - break; - default: - return FALSE; - } - DC_UpdateXforms( dc ); return TRUE; } @@ -361,9 +339,9 @@ BOOL WINAPI NtGdiScaleWindowExtEx( HDC hdc, INT x_num, INT x_denom, /**************************************************************************** - * ModifyWorldTransform (GDI32.@) + * NtGdiModifyWorldTransform (win32u.@) */ -BOOL WINAPI ModifyWorldTransform( HDC hdc, const XFORM *xform, DWORD mode ) +BOOL WINAPI NtGdiModifyWorldTransform( HDC hdc, const XFORM *xform, DWORD mode ) { BOOL ret = FALSE; DC *dc; @@ -371,9 +349,25 @@ BOOL WINAPI ModifyWorldTransform( HDC hdc, const XFORM *xform, DWORD mode ) if (!xform && mode != MWT_IDENTITY) return FALSE; if ((dc = get_dc_ptr( hdc ))) { - PHYSDEV physdev = GET_DC_PHYSDEV( dc, pModifyWorldTransform ); - if (dc->attr->graphics_mode == GM_ADVANCED) - ret = physdev->funcs->pModifyWorldTransform( physdev, xform, mode ); + switch (mode) + { + case MWT_IDENTITY: + dc->xformWorld2Wnd.eM11 = 1.0f; + dc->xformWorld2Wnd.eM12 = 0.0f; + dc->xformWorld2Wnd.eM21 = 0.0f; + dc->xformWorld2Wnd.eM22 = 1.0f; + dc->xformWorld2Wnd.eDx = 0.0f; + dc->xformWorld2Wnd.eDy = 0.0f; + ret = TRUE; + break; + case MWT_LEFTMULTIPLY: + ret = CombineTransform( &dc->xformWorld2Wnd, xform, &dc->xformWorld2Wnd ); + break; + case MWT_RIGHTMULTIPLY: + ret = CombineTransform( &dc->xformWorld2Wnd, &dc->xformWorld2Wnd, xform ); + break; + } + if (ret) DC_UpdateXforms( dc ); release_dc_ptr( dc ); } return ret; diff --git a/include/ntgdi.h b/include/ntgdi.h index 5d67798052a..9aeaea5d3cb 100644 --- a/include/ntgdi.h +++ b/include/ntgdi.h @@ -229,6 +229,7 @@ BOOL WINAPI NtGdiFontIsLinked( HDC hdc ); INT WINAPI NtGdiIntersectClipRect( HDC hdc, INT left, INT top, INT right, INT bottom ); BOOL WINAPI NtGdiInvertRgn( HDC hdc, HRGN hrgn ); BOOL WINAPI NtGdiLineTo( HDC hdc, INT x, INT y ); +BOOL WINAPI NtGdiModifyWorldTransform( HDC hdc, const XFORM *xform, DWORD mode ); BOOL WINAPI NtGdiMoveTo( HDC hdc, INT x, INT y, POINT *pt ); INT WINAPI NtGdiOffsetClipRgn( HDC hdc, INT x, INT y ); INT WINAPI NtGdiOffsetRgn( HRGN hrgn, INT x, INT y ); -- 2.11.4.GIT