Commit 30997b56 authored by Alexandre Julliard's avatar Alexandre Julliard

gdi32: Add a SetLayout driver entry point and implement it for enhanced metafiles.

parent 965d4171
......@@ -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 );
}
......
......@@ -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 */
......
......@@ -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;
......
......@@ -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 */
......
......@@ -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;
......
......@@ -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);
......
......@@ -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 */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment