Jacek Caban : gdi32: Use NtGdiModifyWorldTransform for SetWorldTransform implementation.
Alexandre Julliard
julliard at winehq.org
Fri Aug 13 14:44:14 CDT 2021
Module: wine
Branch: master
Commit: ce94982927ca0650462d00417fe930ab105d3988
URL: https://source.winehq.org/git/wine.git/?a=commit;h=ce94982927ca0650462d00417fe930ab105d3988
Author: Jacek Caban <jacek at codeweavers.com>
Date: Fri Aug 13 12:08:23 2021 +0200
gdi32: Use NtGdiModifyWorldTransform for SetWorldTransform implementation.
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 | 2 --
dlls/gdi32/enhmfdrv/init.c | 3 +--
dlls/gdi32/gdi_private.h | 1 +
dlls/gdi32/gdidc.c | 12 ++++++++++++
dlls/gdi32/mapping.c | 30 ------------------------------
6 files changed, 16 insertions(+), 44 deletions(-)
diff --git a/dlls/gdi32/enhmfdrv/dc.c b/dlls/gdi32/enhmfdrv/dc.c
index 744ef47a97f..cab79d07aaf 100644
--- a/dlls/gdi32/enhmfdrv/dc.c
+++ b/dlls/gdi32/enhmfdrv/dc.c
@@ -300,22 +300,14 @@ BOOL EMFDC_SetLayout( DC_ATTR *dc_attr, DWORD layout )
return EMFDRV_WriteRecord( dc_attr->emf, &emr.emr );
}
-BOOL CDECL EMFDRV_SetWorldTransform( PHYSDEV dev, const XFORM *xform)
+BOOL EMFDC_SetWorldTransform( DC_ATTR *dc_attr, const XFORM *xform )
{
- PHYSDEV next = GET_NEXT_PHYSDEV( dev, pSetWorldTransform );
- EMFDRV_PDEVICE *physDev = get_emf_physdev( dev );
EMRSETWORLDTRANSFORM emr;
- BOOL ret;
emr.emr.iType = EMR_SETWORLDTRANSFORM;
emr.emr.nSize = sizeof(emr);
emr.xform = *xform;
-
- if (!EMFDRV_WriteRecord( dev, &emr.emr )) return FALSE;
- physDev->modifying_transform++;
- ret = next->funcs->pSetWorldTransform( next, xform );
- physDev->modifying_transform--;
- return ret;
+ return EMFDRV_WriteRecord( dc_attr->emf, &emr.emr );
}
BOOL EMFDC_ModifyWorldTransform( DC_ATTR *dc_attr, const XFORM *xform, DWORD mode )
diff --git a/dlls/gdi32/enhmfdrv/enhmetafiledrv.h b/dlls/gdi32/enhmfdrv/enhmetafiledrv.h
index d2db67cd03e..4ee00df6c9a 100644
--- a/dlls/gdi32/enhmfdrv/enhmetafiledrv.h
+++ b/dlls/gdi32/enhmfdrv/enhmetafiledrv.h
@@ -41,7 +41,6 @@ typedef struct
HBRUSH dc_brush;
HPEN dc_pen;
INT restoring; /* RestoreDC counter */
- INT modifying_transform;/* Counter for functions that can change world transform */
BOOL path;
INT dev_caps[COLORMGMTCAPS + 1];
} EMFDRV_PDEVICE;
@@ -107,7 +106,6 @@ extern INT CDECL EMFDRV_SetDIBitsToDevice( PHYSDEV dev, INT xDest, INT yDes
BITMAPINFO *info, UINT coloruse ) DECLSPEC_HIDDEN;
extern COLORREF CDECL EMFDRV_SetPixel( PHYSDEV dev, INT x, INT y, COLORREF color ) DECLSPEC_HIDDEN;
extern COLORREF CDECL EMFDRV_SetTextColor( PHYSDEV dev, COLORREF color ) DECLSPEC_HIDDEN;
-extern BOOL CDECL EMFDRV_SetWorldTransform( PHYSDEV dev, const XFORM *xform ) DECLSPEC_HIDDEN;
extern INT CDECL EMFDRV_StretchDIBits( PHYSDEV dev, INT xDst, INT yDst, INT widthDst, INT heightDst,
INT xSrc, INT ySrc, INT widthSrc, INT heightSrc,
const void *bits, BITMAPINFO *info, UINT wUsage, DWORD dwRop ) DECLSPEC_HIDDEN;
diff --git a/dlls/gdi32/enhmfdrv/init.c b/dlls/gdi32/enhmfdrv/init.c
index e6b501aaf77..267e4c4fe61 100644
--- a/dlls/gdi32/enhmfdrv/init.c
+++ b/dlls/gdi32/enhmfdrv/init.c
@@ -126,7 +126,7 @@ static const struct gdi_dc_funcs emfdrv_driver =
NULL, /* pSetDeviceGammaRamp */
EMFDRV_SetPixel, /* pSetPixel */
EMFDRV_SetTextColor, /* pSetTextColor */
- EMFDRV_SetWorldTransform, /* pSetWorldTransform */
+ NULL, /* pSetWorldTransform */
NULL, /* pStartDoc */
NULL, /* pStartPage */
NULL, /* pStretchBlt */
@@ -338,7 +338,6 @@ HDC WINAPI CreateEnhMetaFileW(
physDev->dc_brush = 0;
physDev->dc_pen = 0;
physDev->restoring = 0;
- physDev->modifying_transform = 0;
physDev->path = FALSE;
if (hdc) /* if no ref, use current display */
diff --git a/dlls/gdi32/gdi_private.h b/dlls/gdi32/gdi_private.h
index f3fb35c3834..2bfe23a42a5 100644
--- a/dlls/gdi32/gdi_private.h
+++ b/dlls/gdi32/gdi_private.h
@@ -186,6 +186,7 @@ extern BOOL EMFDC_SetViewportExtEx( DC_ATTR *dc_attr, INT x, INT y ) DECLSPEC_HI
extern BOOL EMFDC_SetViewportOrgEx( DC_ATTR *dc_attr, INT x, INT y ) DECLSPEC_HIDDEN;
extern BOOL EMFDC_SetWindowExtEx( DC_ATTR *dc_attr, INT x, INT y ) DECLSPEC_HIDDEN;
extern BOOL EMFDC_SetWindowOrgEx( DC_ATTR *dc_attr, INT x, INT y ) DECLSPEC_HIDDEN;
+extern BOOL EMFDC_SetWorldTransform( DC_ATTR *dc_attr, const XFORM *xform ) DECLSPEC_HIDDEN;
extern BOOL EMFDC_StretchBlt( DC_ATTR *dc_attr, INT x_dst, INT y_dst, INT width_dst, INT height_dst,
HDC hdc_src, INT x_src, INT y_src, INT width_src, INT height_src,
DWORD rop );
diff --git a/dlls/gdi32/gdidc.c b/dlls/gdi32/gdidc.c
index e4f26742c9f..44ad3e798bf 100644
--- a/dlls/gdi32/gdidc.c
+++ b/dlls/gdi32/gdidc.c
@@ -613,6 +613,18 @@ BOOL WINAPI ModifyWorldTransform( HDC hdc, const XFORM *xform, DWORD mode )
return NtGdiModifyWorldTransform( hdc, xform, mode );
}
+/***********************************************************************
+ * SetWorldTransform (GDI32.@)
+ */
+BOOL WINAPI SetWorldTransform( HDC hdc, const XFORM *xform )
+{
+ DC_ATTR *dc_attr;
+
+ if (!(dc_attr = get_dc_attr( hdc ))) return FALSE;
+ if (dc_attr->emf && !EMFDC_SetWorldTransform( dc_attr, xform )) return FALSE;
+ return NtGdiModifyWorldTransform( hdc, xform, MWT_SET );
+}
+
/***********************************************************************
* SetStretchBltMode (GDI32.@)
*/
diff --git a/dlls/gdi32/mapping.c b/dlls/gdi32/mapping.c
index 381c29dd26f..d5beef70b1c 100644
--- a/dlls/gdi32/mapping.c
+++ b/dlls/gdi32/mapping.c
@@ -148,10 +148,6 @@ BOOL CDECL nulldrv_ModifyWorldTransform( PHYSDEV dev, const XFORM *xform, DWORD
BOOL CDECL nulldrv_SetWorldTransform( PHYSDEV dev, const XFORM *xform )
{
- DC *dc = get_nulldrv_dc( dev );
-
- dc->xformWorld2Wnd = *xform;
- DC_UpdateXforms( dc );
return TRUE;
}
@@ -379,32 +375,6 @@ BOOL WINAPI NtGdiModifyWorldTransform( HDC hdc, const XFORM *xform, DWORD mode )
}
-/***********************************************************************
- * SetWorldTransform (GDI32.@)
- */
-BOOL WINAPI SetWorldTransform( HDC hdc, const XFORM *xform )
-{
- BOOL ret = FALSE;
- DC *dc;
-
- if (!xform) return FALSE;
- /* The transform must conform to (eM11 * eM22 != eM12 * eM21) requirement */
- if (xform->eM11 * xform->eM22 == xform->eM12 * xform->eM21) return FALSE;
-
- TRACE("eM11 %f eM12 %f eM21 %f eM22 %f eDx %f eDy %f\n",
- xform->eM11, xform->eM12, xform->eM21, xform->eM22, xform->eDx, xform->eDy);
-
- if ((dc = get_dc_ptr( hdc )))
- {
- PHYSDEV physdev = GET_DC_PHYSDEV( dc, pSetWorldTransform );
- if (dc->attr->graphics_mode == GM_ADVANCED)
- ret = physdev->funcs->pSetWorldTransform( physdev, xform );
- release_dc_ptr( dc );
- }
- return ret;
-}
-
-
/***********************************************************************
* NtGdiSetVirtualResolution (win32u.@)
*
More information about the wine-cvs
mailing list