Alexandre Julliard : gdi32: Add a SetLayout driver entry point and implement it for enhanced metafiles .
Alexandre Julliard
julliard at winehq.org
Fri Mar 11 10:23:36 CST 2011
Module: wine
Branch: master
Commit: 30997b563422beb2eaf8b9e9025823efccd17e25
URL: http://source.winehq.org/git/wine.git/?a=commit;h=30997b563422beb2eaf8b9e9025823efccd17e25
Author: Alexandre Julliard <julliard at winehq.org>
Date: Thu Mar 10 22:10:16 2011 +0100
gdi32: Add a SetLayout driver entry point and implement it for enhanced metafiles.
---
dlls/gdi32/dc.c | 15 ++++++++++-----
dlls/gdi32/driver.c | 6 ++++++
dlls/gdi32/enhmfdrv/enhmetafiledrv.h | 1 +
dlls/gdi32/enhmfdrv/init.c | 1 +
dlls/gdi32/enhmfdrv/mapping.c | 10 ++++++++++
dlls/gdi32/gdi_private.h | 1 +
dlls/gdi32/mfdrv/init.c | 1 +
7 files changed, 30 insertions(+), 5 deletions(-)
diff --git a/dlls/gdi32/dc.c b/dlls/gdi32/dc.c
index 1070506..98b6bf1 100644
--- a/dlls/gdi32/dc.c
+++ b/dlls/gdi32/dc.c
@@ -2015,12 +2015,17 @@ DWORD WINAPI SetLayout(HDC hdc, DWORD layout)
DC * dc = get_dc_ptr( hdc );
if (dc)
{
- oldlayout = dc->layout;
- dc->layout = layout;
- if (layout != oldlayout)
+ PHYSDEV physdev = GET_DC_PHYSDEV( dc, pSetLayout );
+ layout = physdev->funcs->pSetLayout( physdev, layout );
+ if (layout != GDI_ERROR)
{
- if (layout & LAYOUT_RTL) dc->MapMode = MM_ANISOTROPIC;
- DC_UpdateXforms( dc );
+ oldlayout = dc->layout;
+ dc->layout = layout;
+ if (layout != oldlayout)
+ {
+ if (layout & LAYOUT_RTL) dc->MapMode = MM_ANISOTROPIC;
+ DC_UpdateXforms( dc );
+ }
}
release_dc_ptr( dc );
}
diff --git a/dlls/gdi32/driver.c b/dlls/gdi32/driver.c
index 9a19cfd..3d5f0e7 100644
--- a/dlls/gdi32/driver.c
+++ b/dlls/gdi32/driver.c
@@ -467,6 +467,11 @@ static void CDECL nulldrv_SetDeviceClipping( PHYSDEV dev, HRGN vis_rgn, HRGN cli
{
}
+static DWORD CDECL nulldrv_SetLayout( PHYSDEV dev, DWORD layout )
+{
+ return layout;
+}
+
static DWORD CDECL nulldrv_SetMapperFlags( PHYSDEV dev, DWORD flags )
{
return flags;
@@ -683,6 +688,7 @@ const DC_FUNCTIONS null_driver =
NULL, /* pSetDIBitsToDevice */
nulldrv_SetDeviceClipping, /* pSetDeviceClipping */
NULL, /* pSetDeviceGammaRamp */
+ nulldrv_SetLayout, /* pSetLayout */
nulldrv_SetMapMode, /* pSetMapMode */
nulldrv_SetMapperFlags, /* pSetMapperFlags */
nulldrv_SetPixel, /* pSetPixel */
diff --git a/dlls/gdi32/enhmfdrv/enhmetafiledrv.h b/dlls/gdi32/enhmfdrv/enhmetafiledrv.h
index eba7536..ee82463 100644
--- a/dlls/gdi32/enhmfdrv/enhmetafiledrv.h
+++ b/dlls/gdi32/enhmfdrv/enhmetafiledrv.h
@@ -137,6 +137,7 @@ extern INT CDECL EMFDRV_SetDIBitsToDevice( PHYSDEV dev, INT xDest, INT yDes
INT ySrc, UINT startscan, UINT lines,
LPCVOID bits, const BITMAPINFO *info,
UINT coloruse ) DECLSPEC_HIDDEN;
+extern DWORD CDECL EMFDRV_SetLayout( PHYSDEV dev, DWORD layout ) DECLSPEC_HIDDEN;
extern INT CDECL EMFDRV_SetMapMode( PHYSDEV dev, INT mode ) DECLSPEC_HIDDEN;
extern DWORD CDECL EMFDRV_SetMapperFlags( PHYSDEV dev, DWORD flags ) DECLSPEC_HIDDEN;
extern COLORREF CDECL EMFDRV_SetPixel( PHYSDEV dev, INT x, INT y, COLORREF color ) DECLSPEC_HIDDEN;
diff --git a/dlls/gdi32/enhmfdrv/init.c b/dlls/gdi32/enhmfdrv/init.c
index ff9f69d..1c04d95 100644
--- a/dlls/gdi32/enhmfdrv/init.c
+++ b/dlls/gdi32/enhmfdrv/init.c
@@ -127,6 +127,7 @@ static const DC_FUNCTIONS EMFDRV_Funcs =
EMFDRV_SetDIBitsToDevice, /* pSetDIBitsToDevice */
NULL, /* pSetDeviceClipping */
NULL, /* pSetDeviceGammaRamp */
+ EMFDRV_SetLayout, /* pSetLayout */
EMFDRV_SetMapMode, /* pSetMapMode */
EMFDRV_SetMapperFlags, /* pSetMapperFlags */
EMFDRV_SetPixel, /* pSetPixel */
diff --git a/dlls/gdi32/enhmfdrv/mapping.c b/dlls/gdi32/enhmfdrv/mapping.c
index b89ed20..e566e01 100644
--- a/dlls/gdi32/enhmfdrv/mapping.c
+++ b/dlls/gdi32/enhmfdrv/mapping.c
@@ -120,6 +120,16 @@ BOOL CDECL EMFDRV_ScaleWindowExtEx( PHYSDEV dev, INT xNum, INT xDenom, INT yNum,
return next->funcs->pScaleWindowExtEx( next, xNum, xDenom, yNum, yDenom, size );
}
+DWORD CDECL EMFDRV_SetLayout( PHYSDEV dev, DWORD layout )
+{
+ EMRSETLAYOUT emr;
+
+ emr.emr.iType = EMR_SETLAYOUT;
+ emr.emr.nSize = sizeof(emr);
+ emr.iMode = layout;
+ return EMFDRV_WriteRecord( dev, &emr.emr ) ? layout : GDI_ERROR;
+}
+
BOOL CDECL EMFDRV_SetWorldTransform( PHYSDEV dev, const XFORM *xform)
{
EMRSETWORLDTRANSFORM emr;
diff --git a/dlls/gdi32/gdi_private.h b/dlls/gdi32/gdi_private.h
index 40eae6c..aa9ba4b 100644
--- a/dlls/gdi32/gdi_private.h
+++ b/dlls/gdi32/gdi_private.h
@@ -175,6 +175,7 @@ typedef struct tagDC_FUNCS
const BITMAPINFO*,UINT);
VOID (CDECL *pSetDeviceClipping)(PHYSDEV,HRGN,HRGN);
BOOL (CDECL *pSetDeviceGammaRamp)(PHYSDEV,LPVOID);
+ DWORD (CDECL *pSetLayout)(PHYSDEV,DWORD);
INT (CDECL *pSetMapMode)(PHYSDEV,INT);
DWORD (CDECL *pSetMapperFlags)(PHYSDEV,DWORD);
COLORREF (CDECL *pSetPixel)(PHYSDEV,INT,INT,COLORREF);
diff --git a/dlls/gdi32/mfdrv/init.c b/dlls/gdi32/mfdrv/init.c
index 932ab92..63f067f 100644
--- a/dlls/gdi32/mfdrv/init.c
+++ b/dlls/gdi32/mfdrv/init.c
@@ -125,6 +125,7 @@ static const DC_FUNCTIONS MFDRV_Funcs =
MFDRV_SetDIBitsToDevice, /* pSetDIBitsToDevice */
NULL, /* pSetDeviceClipping */
NULL, /* pSetDeviceGammaRamp */
+ NULL, /* pSetLayout */
MFDRV_SetMapMode, /* pSetMapMode */
MFDRV_SetMapperFlags, /* pSetMapperFlags */
MFDRV_SetPixel, /* pSetPixel */
More information about the wine-cvs
mailing list