Jacek Caban : gdi32: Use NtGdiModifyWorldTransform for ModifyWorldTransform.
Alexandre Julliard
julliard at winehq.org
Fri Aug 13 14:44:14 CDT 2021
Module: wine
Branch: master
Commit: 36bfd7cd71e1612770a5f7fc6d76ae3e73afe16f
URL: https://source.winehq.org/git/wine.git/?a=commit;h=36bfd7cd71e1612770a5f7fc6d76ae3e73afe16f
Author: Jacek Caban <jacek at codeweavers.com>
Date: Fri Aug 13 12:07:48 2021 +0200
gdi32: Use NtGdiModifyWorldTransform for ModifyWorldTransform.
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 | 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 );
More information about the wine-cvs
mailing list