gdi32: Add null driver entry points for the mapping functions.

This commit is contained in:
Alexandre Julliard 2011-03-09 16:21:45 +01:00
parent 6419edfb6d
commit 3a850fc842
10 changed files with 411 additions and 397 deletions

View File

@ -126,8 +126,8 @@ static struct graphics_driver *create_driver( HMODULE module )
GET_FUNC(MoveTo); GET_FUNC(MoveTo);
GET_FUNC(ModifyWorldTransform); GET_FUNC(ModifyWorldTransform);
GET_FUNC(OffsetClipRgn); GET_FUNC(OffsetClipRgn);
GET_FUNC(OffsetViewportOrg); GET_FUNC(OffsetViewportOrgEx);
GET_FUNC(OffsetWindowOrg); GET_FUNC(OffsetWindowOrgEx);
GET_FUNC(PaintRgn); GET_FUNC(PaintRgn);
GET_FUNC(PatBlt); GET_FUNC(PatBlt);
GET_FUNC(Pie); GET_FUNC(Pie);
@ -146,8 +146,8 @@ static struct graphics_driver *create_driver( HMODULE module )
GET_FUNC(RestoreDC); GET_FUNC(RestoreDC);
GET_FUNC(RoundRect); GET_FUNC(RoundRect);
GET_FUNC(SaveDC); GET_FUNC(SaveDC);
GET_FUNC(ScaleViewportExt); GET_FUNC(ScaleViewportExtEx);
GET_FUNC(ScaleWindowExt); GET_FUNC(ScaleWindowExtEx);
GET_FUNC(SelectBitmap); GET_FUNC(SelectBitmap);
GET_FUNC(SelectBrush); GET_FUNC(SelectBrush);
GET_FUNC(SelectClipPath); GET_FUNC(SelectClipPath);
@ -177,10 +177,10 @@ static struct graphics_driver *create_driver( HMODULE module )
GET_FUNC(SetTextCharacterExtra); GET_FUNC(SetTextCharacterExtra);
GET_FUNC(SetTextColor); GET_FUNC(SetTextColor);
GET_FUNC(SetTextJustification); GET_FUNC(SetTextJustification);
GET_FUNC(SetViewportExt); GET_FUNC(SetViewportExtEx);
GET_FUNC(SetViewportOrg); GET_FUNC(SetViewportOrgEx);
GET_FUNC(SetWindowExt); GET_FUNC(SetWindowExtEx);
GET_FUNC(SetWindowOrg); GET_FUNC(SetWindowOrgEx);
GET_FUNC(SetWorldTransform); GET_FUNC(SetWorldTransform);
GET_FUNC(StartDoc); GET_FUNC(StartDoc);
GET_FUNC(StartPage); GET_FUNC(StartPage);
@ -483,8 +483,8 @@ const DC_FUNCTIONS null_driver =
NULL, /* pModifyWorldTransform */ NULL, /* pModifyWorldTransform */
nulldrv_MoveTo, /* pMoveTo */ nulldrv_MoveTo, /* pMoveTo */
nulldrv_OffsetClipRgn, /* pOffsetClipRgn */ nulldrv_OffsetClipRgn, /* pOffsetClipRgn */
NULL, /* pOffsetViewportOrg */ nulldrv_OffsetViewportOrgEx, /* pOffsetViewportOrg */
NULL, /* pOffsetWindowOrg */ nulldrv_OffsetWindowOrgEx, /* pOffsetWindowOrg */
nulldrv_PaintRgn, /* pPaintRgn */ nulldrv_PaintRgn, /* pPaintRgn */
NULL, /* pPatBlt */ NULL, /* pPatBlt */
nulldrv_Pie, /* pPie */ nulldrv_Pie, /* pPie */
@ -503,8 +503,8 @@ const DC_FUNCTIONS null_driver =
NULL, /* pRestoreDC */ NULL, /* pRestoreDC */
nulldrv_RoundRect, /* pRoundRect */ nulldrv_RoundRect, /* pRoundRect */
NULL, /* pSaveDC */ NULL, /* pSaveDC */
NULL, /* pScaleViewportExt */ nulldrv_ScaleViewportExtEx, /* pScaleViewportExt */
NULL, /* pScaleWindowExt */ nulldrv_ScaleWindowExtEx, /* pScaleWindowExt */
NULL, /* pSelectBitmap */ NULL, /* pSelectBitmap */
NULL, /* pSelectBrush */ NULL, /* pSelectBrush */
NULL, /* pSelectClipPath */ NULL, /* pSelectClipPath */
@ -522,7 +522,7 @@ const DC_FUNCTIONS null_driver =
NULL, /* pSetDIBitsToDevice */ NULL, /* pSetDIBitsToDevice */
nulldrv_SetDeviceClipping, /* pSetDeviceClipping */ nulldrv_SetDeviceClipping, /* pSetDeviceClipping */
NULL, /* pSetDeviceGammaRamp */ NULL, /* pSetDeviceGammaRamp */
NULL, /* pSetMapMode */ nulldrv_SetMapMode, /* pSetMapMode */
NULL, /* pSetMapperFlags */ NULL, /* pSetMapperFlags */
nulldrv_SetPixel, /* pSetPixel */ nulldrv_SetPixel, /* pSetPixel */
NULL, /* pSetPixelFormat */ NULL, /* pSetPixelFormat */
@ -534,10 +534,10 @@ const DC_FUNCTIONS null_driver =
NULL, /* pSetTextCharacterExtra */ NULL, /* pSetTextCharacterExtra */
NULL, /* pSetTextColor */ NULL, /* pSetTextColor */
NULL, /* pSetTextJustification */ NULL, /* pSetTextJustification */
NULL, /* pSetViewportExt */ nulldrv_SetViewportExtEx, /* pSetViewportExt */
NULL, /* pSetViewportOrg */ nulldrv_SetViewportOrgEx, /* pSetViewportOrg */
NULL, /* pSetWindowExt */ nulldrv_SetWindowExtEx, /* pSetWindowExt */
NULL, /* pSetWindowOrg */ nulldrv_SetWindowOrgEx, /* pSetWindowOrg */
NULL, /* pSetWorldTransform */ NULL, /* pSetWorldTransform */
nulldrv_StartDoc, /* pStartDoc */ nulldrv_StartDoc, /* pStartDoc */
nulldrv_StartPage, /* pStartPage */ nulldrv_StartPage, /* pStartPage */

View File

@ -94,8 +94,8 @@ 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_ModifyWorldTransform( PHYSDEV dev, const XFORM *xform, DWORD mode ) DECLSPEC_HIDDEN;
extern BOOL CDECL EMFDRV_MoveTo( PHYSDEV dev, INT x, INT y ) DECLSPEC_HIDDEN; extern BOOL CDECL EMFDRV_MoveTo( PHYSDEV dev, INT x, INT y ) DECLSPEC_HIDDEN;
extern INT CDECL EMFDRV_OffsetClipRgn( PHYSDEV dev, INT x, INT y ) DECLSPEC_HIDDEN; extern INT CDECL EMFDRV_OffsetClipRgn( PHYSDEV dev, INT x, INT y ) DECLSPEC_HIDDEN;
extern INT CDECL EMFDRV_OffsetViewportOrg( PHYSDEV dev, INT x, INT y ) DECLSPEC_HIDDEN; extern BOOL CDECL EMFDRV_OffsetViewportOrgEx( PHYSDEV dev, INT x, INT y, POINT *pt ) DECLSPEC_HIDDEN;
extern INT CDECL EMFDRV_OffsetWindowOrg( PHYSDEV dev, INT x, INT y ) DECLSPEC_HIDDEN; extern BOOL CDECL EMFDRV_OffsetWindowOrgEx( PHYSDEV dev, INT x, INT y, POINT *pt ) DECLSPEC_HIDDEN;
extern BOOL CDECL EMFDRV_PaintRgn( PHYSDEV dev, HRGN hrgn ) DECLSPEC_HIDDEN; extern BOOL CDECL EMFDRV_PaintRgn( PHYSDEV dev, HRGN hrgn ) DECLSPEC_HIDDEN;
extern BOOL CDECL EMFDRV_PatBlt( PHYSDEV dev, INT left, INT top, extern BOOL CDECL EMFDRV_PatBlt( PHYSDEV dev, INT left, INT top,
INT width, INT height, DWORD rop ) DECLSPEC_HIDDEN; INT width, INT height, DWORD rop ) DECLSPEC_HIDDEN;
@ -115,10 +115,10 @@ extern BOOL CDECL EMFDRV_RoundRect( PHYSDEV dev, INT left, INT top,
INT right, INT bottom, INT ell_width, INT right, INT bottom, INT ell_width,
INT ell_height ) DECLSPEC_HIDDEN; INT ell_height ) DECLSPEC_HIDDEN;
extern INT CDECL EMFDRV_SaveDC( PHYSDEV dev ) DECLSPEC_HIDDEN; extern INT CDECL EMFDRV_SaveDC( PHYSDEV dev ) DECLSPEC_HIDDEN;
extern INT CDECL EMFDRV_ScaleViewportExt( PHYSDEV dev, INT xNum, extern BOOL CDECL EMFDRV_ScaleViewportExtEx( PHYSDEV dev, INT xNum, INT xDenom,
INT xDenom, INT yNum, INT yDenom ) DECLSPEC_HIDDEN; INT yNum, INT yDenom, SIZE *size ) DECLSPEC_HIDDEN;
extern INT CDECL EMFDRV_ScaleWindowExt( PHYSDEV dev, INT xNum, INT xDenom, extern BOOL CDECL EMFDRV_ScaleWindowExtEx( PHYSDEV dev, INT xNum, INT xDenom,
INT yNum, INT yDenom ) DECLSPEC_HIDDEN; INT yNum, INT yDenom, SIZE *size ) DECLSPEC_HIDDEN;
extern HBITMAP CDECL EMFDRV_SelectBitmap( PHYSDEV dev, HBITMAP handle ) DECLSPEC_HIDDEN; extern HBITMAP CDECL EMFDRV_SelectBitmap( PHYSDEV dev, HBITMAP handle ) DECLSPEC_HIDDEN;
extern HBRUSH CDECL EMFDRV_SelectBrush( PHYSDEV dev, HBRUSH handle ) DECLSPEC_HIDDEN; extern HBRUSH CDECL EMFDRV_SelectBrush( PHYSDEV dev, HBRUSH handle ) DECLSPEC_HIDDEN;
extern BOOL CDECL EMFDRV_SelectClipPath( PHYSDEV dev, INT iMode ) DECLSPEC_HIDDEN; extern BOOL CDECL EMFDRV_SelectClipPath( PHYSDEV dev, INT iMode ) DECLSPEC_HIDDEN;
@ -143,10 +143,10 @@ extern UINT CDECL EMFDRV_SetTextAlign( PHYSDEV dev, UINT align ) DECLSPEC_HI
extern COLORREF CDECL EMFDRV_SetTextColor( PHYSDEV dev, COLORREF color ) DECLSPEC_HIDDEN; extern COLORREF CDECL EMFDRV_SetTextColor( PHYSDEV dev, COLORREF color ) DECLSPEC_HIDDEN;
extern BOOL CDECL EMFDRV_SetTextJustification( PHYSDEV dev, INT nBreakExtra, extern BOOL CDECL EMFDRV_SetTextJustification( PHYSDEV dev, INT nBreakExtra,
INT nBreakCount ) DECLSPEC_HIDDEN; INT nBreakCount ) DECLSPEC_HIDDEN;
extern INT CDECL EMFDRV_SetViewportExt( PHYSDEV dev, INT x, INT y ) DECLSPEC_HIDDEN; extern BOOL CDECL EMFDRV_SetViewportExtEx( PHYSDEV dev, INT x, INT y, SIZE *size ) DECLSPEC_HIDDEN;
extern INT CDECL EMFDRV_SetViewportOrg( PHYSDEV dev, INT x, INT y ) DECLSPEC_HIDDEN; extern BOOL CDECL EMFDRV_SetViewportOrgEx( PHYSDEV dev, INT x, INT y, POINT *pt ) DECLSPEC_HIDDEN;
extern INT CDECL EMFDRV_SetWindowExt( PHYSDEV dev, INT x, INT y ) DECLSPEC_HIDDEN; extern BOOL CDECL EMFDRV_SetWindowExtEx( PHYSDEV dev, INT x, INT y, SIZE *size ) DECLSPEC_HIDDEN;
extern INT CDECL EMFDRV_SetWindowOrg( PHYSDEV dev, INT x, INT y ) DECLSPEC_HIDDEN; extern BOOL CDECL EMFDRV_SetWindowOrgEx( PHYSDEV dev, INT x, INT y, POINT *pt ) DECLSPEC_HIDDEN;
extern BOOL CDECL EMFDRV_SetWorldTransform( PHYSDEV dev, const XFORM *xform ) DECLSPEC_HIDDEN; extern BOOL CDECL EMFDRV_SetWorldTransform( PHYSDEV dev, const XFORM *xform ) DECLSPEC_HIDDEN;
extern BOOL CDECL EMFDRV_StretchBlt( PHYSDEV devDst, INT xDst, INT yDst, extern BOOL CDECL EMFDRV_StretchBlt( PHYSDEV devDst, INT xDst, INT yDst,
INT widthDst, INT heightDst, INT widthDst, INT heightDst,

View File

@ -88,8 +88,8 @@ static const DC_FUNCTIONS EMFDRV_Funcs =
EMFDRV_ModifyWorldTransform, /* pModifyWorldTransform */ EMFDRV_ModifyWorldTransform, /* pModifyWorldTransform */
EMFDRV_MoveTo, /* pMoveTo */ EMFDRV_MoveTo, /* pMoveTo */
EMFDRV_OffsetClipRgn, /* pOffsetClipRgn */ EMFDRV_OffsetClipRgn, /* pOffsetClipRgn */
EMFDRV_OffsetViewportOrg, /* pOffsetViewportOrg */ EMFDRV_OffsetViewportOrgEx, /* pOffsetViewportOrgEx */
EMFDRV_OffsetWindowOrg, /* pOffsetWindowOrg */ EMFDRV_OffsetWindowOrgEx, /* pOffsetWindowOrgEx */
EMFDRV_PaintRgn, /* pPaintRgn */ EMFDRV_PaintRgn, /* pPaintRgn */
EMFDRV_PatBlt, /* pPatBlt */ EMFDRV_PatBlt, /* pPatBlt */
EMFDRV_Pie, /* pPie */ EMFDRV_Pie, /* pPie */
@ -108,8 +108,8 @@ static const DC_FUNCTIONS EMFDRV_Funcs =
EMFDRV_RestoreDC, /* pRestoreDC */ EMFDRV_RestoreDC, /* pRestoreDC */
EMFDRV_RoundRect, /* pRoundRect */ EMFDRV_RoundRect, /* pRoundRect */
EMFDRV_SaveDC, /* pSaveDC */ EMFDRV_SaveDC, /* pSaveDC */
EMFDRV_ScaleViewportExt, /* pScaleViewportExt */ EMFDRV_ScaleViewportExtEx, /* pScaleViewportExtEx */
EMFDRV_ScaleWindowExt, /* pScaleWindowExt */ EMFDRV_ScaleWindowExtEx, /* pScaleWindowExtEx */
EMFDRV_SelectBitmap, /* pSelectBitmap */ EMFDRV_SelectBitmap, /* pSelectBitmap */
EMFDRV_SelectBrush, /* pSelectBrush */ EMFDRV_SelectBrush, /* pSelectBrush */
EMFDRV_SelectClipPath, /* pSelectClipPath */ EMFDRV_SelectClipPath, /* pSelectClipPath */
@ -139,10 +139,10 @@ static const DC_FUNCTIONS EMFDRV_Funcs =
NULL, /* pSetTextCharacterExtra */ NULL, /* pSetTextCharacterExtra */
EMFDRV_SetTextColor, /* pSetTextColor */ EMFDRV_SetTextColor, /* pSetTextColor */
EMFDRV_SetTextJustification, /* pSetTextJustification */ EMFDRV_SetTextJustification, /* pSetTextJustification */
EMFDRV_SetViewportExt, /* pSetViewportExt */ EMFDRV_SetViewportExtEx, /* pSetViewportExtEx */
EMFDRV_SetViewportOrg, /* pSetViewportOrg */ EMFDRV_SetViewportOrgEx, /* pSetViewportOrgEx */
EMFDRV_SetWindowExt, /* pSetWindowExt */ EMFDRV_SetWindowExtEx, /* pSetWindowExtEx */
EMFDRV_SetWindowOrg, /* pSetWindowOrg */ EMFDRV_SetWindowOrgEx, /* pSetWindowOrgEx */
EMFDRV_SetWorldTransform, /* pSetWorldTransform */ EMFDRV_SetWorldTransform, /* pSetWorldTransform */
NULL, /* pStartDoc */ NULL, /* pStartDoc */
NULL, /* pStartPage */ NULL, /* pStartPage */

View File

@ -22,16 +22,19 @@
INT CDECL EMFDRV_SetMapMode( PHYSDEV dev, INT mode ) INT CDECL EMFDRV_SetMapMode( PHYSDEV dev, INT mode )
{ {
PHYSDEV next = GET_NEXT_PHYSDEV( dev, pSetMapMode );
EMRSETMAPMODE emr; EMRSETMAPMODE emr;
emr.emr.iType = EMR_SETMAPMODE; emr.emr.iType = EMR_SETMAPMODE;
emr.emr.nSize = sizeof(emr); emr.emr.nSize = sizeof(emr);
emr.iMode = mode; emr.iMode = mode;
return EMFDRV_WriteRecord( dev, &emr.emr ); if (!EMFDRV_WriteRecord( dev, &emr.emr )) return 0;
return next->funcs->pSetMapMode( next, mode );
} }
INT CDECL EMFDRV_SetViewportExt( PHYSDEV dev, INT cx, INT cy ) BOOL CDECL EMFDRV_SetViewportExtEx( PHYSDEV dev, INT cx, INT cy, SIZE *size )
{ {
PHYSDEV next = GET_NEXT_PHYSDEV( dev, pSetViewportExtEx );
EMRSETVIEWPORTEXTEX emr; EMRSETVIEWPORTEXTEX emr;
emr.emr.iType = EMR_SETVIEWPORTEXTEX; emr.emr.iType = EMR_SETVIEWPORTEXTEX;
@ -39,11 +42,13 @@ INT CDECL EMFDRV_SetViewportExt( PHYSDEV dev, INT cx, INT cy )
emr.szlExtent.cx = cx; emr.szlExtent.cx = cx;
emr.szlExtent.cy = cy; emr.szlExtent.cy = cy;
return EMFDRV_WriteRecord( dev, &emr.emr ); if (!EMFDRV_WriteRecord( dev, &emr.emr )) return FALSE;
return next->funcs->pSetViewportExtEx( next, cx, cy, size );
} }
INT CDECL EMFDRV_SetWindowExt( PHYSDEV dev, INT cx, INT cy ) BOOL CDECL EMFDRV_SetWindowExtEx( PHYSDEV dev, INT cx, INT cy, SIZE *size )
{ {
PHYSDEV next = GET_NEXT_PHYSDEV( dev, pSetWindowExtEx );
EMRSETWINDOWEXTEX emr; EMRSETWINDOWEXTEX emr;
emr.emr.iType = EMR_SETWINDOWEXTEX; emr.emr.iType = EMR_SETWINDOWEXTEX;
@ -51,11 +56,13 @@ INT CDECL EMFDRV_SetWindowExt( PHYSDEV dev, INT cx, INT cy )
emr.szlExtent.cx = cx; emr.szlExtent.cx = cx;
emr.szlExtent.cy = cy; emr.szlExtent.cy = cy;
return EMFDRV_WriteRecord( dev, &emr.emr ); if (!EMFDRV_WriteRecord( dev, &emr.emr )) return 0;
return next->funcs->pSetWindowExtEx( next, cx, cy, size );
} }
INT CDECL EMFDRV_SetViewportOrg( PHYSDEV dev, INT x, INT y ) BOOL CDECL EMFDRV_SetViewportOrgEx( PHYSDEV dev, INT x, INT y, POINT *pt )
{ {
PHYSDEV next = GET_NEXT_PHYSDEV( dev, pSetViewportOrgEx );
EMRSETVIEWPORTORGEX emr; EMRSETVIEWPORTORGEX emr;
emr.emr.iType = EMR_SETVIEWPORTORGEX; emr.emr.iType = EMR_SETVIEWPORTORGEX;
@ -63,11 +70,13 @@ INT CDECL EMFDRV_SetViewportOrg( PHYSDEV dev, INT x, INT y )
emr.ptlOrigin.x = x; emr.ptlOrigin.x = x;
emr.ptlOrigin.y = y; emr.ptlOrigin.y = y;
return EMFDRV_WriteRecord( dev, &emr.emr ); if (!EMFDRV_WriteRecord( dev, &emr.emr )) return 0;
return next->funcs->pSetViewportOrgEx( next, x, y, pt );
} }
INT CDECL EMFDRV_SetWindowOrg( PHYSDEV dev, INT x, INT y ) BOOL CDECL EMFDRV_SetWindowOrgEx( PHYSDEV dev, INT x, INT y, POINT *pt )
{ {
PHYSDEV next = GET_NEXT_PHYSDEV( dev, pSetWindowOrgEx );
EMRSETWINDOWORGEX emr; EMRSETWINDOWORGEX emr;
emr.emr.iType = EMR_SETWINDOWORGEX; emr.emr.iType = EMR_SETWINDOWORGEX;
@ -75,12 +84,13 @@ INT CDECL EMFDRV_SetWindowOrg( PHYSDEV dev, INT x, INT y )
emr.ptlOrigin.x = x; emr.ptlOrigin.x = x;
emr.ptlOrigin.y = y; emr.ptlOrigin.y = y;
return EMFDRV_WriteRecord( dev, &emr.emr ); if (!EMFDRV_WriteRecord( dev, &emr.emr )) return 0;
return next->funcs->pSetWindowOrgEx( next, x, y, pt );
} }
INT CDECL EMFDRV_ScaleViewportExt( PHYSDEV dev, INT xNum, INT xDenom, INT yNum, BOOL CDECL EMFDRV_ScaleViewportExtEx( PHYSDEV dev, INT xNum, INT xDenom, INT yNum, INT yDenom, SIZE *size )
INT yDenom )
{ {
PHYSDEV next = GET_NEXT_PHYSDEV( dev, pScaleViewportExtEx );
EMRSCALEVIEWPORTEXTEX emr; EMRSCALEVIEWPORTEXTEX emr;
emr.emr.iType = EMR_SCALEVIEWPORTEXTEX; emr.emr.iType = EMR_SCALEVIEWPORTEXTEX;
@ -90,12 +100,13 @@ INT CDECL EMFDRV_ScaleViewportExt( PHYSDEV dev, INT xNum, INT xDenom, INT yNum,
emr.yNum = yNum; emr.yNum = yNum;
emr.yDenom = yDenom; emr.yDenom = yDenom;
return EMFDRV_WriteRecord( dev, &emr.emr ); if (!EMFDRV_WriteRecord( dev, &emr.emr )) return 0;
return next->funcs->pScaleViewportExtEx( next, xNum, xDenom, yNum, yDenom, size );
} }
INT CDECL EMFDRV_ScaleWindowExt( PHYSDEV dev, INT xNum, INT xDenom, INT yNum, BOOL CDECL EMFDRV_ScaleWindowExtEx( PHYSDEV dev, INT xNum, INT xDenom, INT yNum, INT yDenom, SIZE *size )
INT yDenom )
{ {
PHYSDEV next = GET_NEXT_PHYSDEV( dev, pScaleWindowExtEx );
EMRSCALEWINDOWEXTEX emr; EMRSCALEWINDOWEXTEX emr;
emr.emr.iType = EMR_SCALEWINDOWEXTEX; emr.emr.iType = EMR_SCALEWINDOWEXTEX;
@ -105,7 +116,8 @@ INT CDECL EMFDRV_ScaleWindowExt( PHYSDEV dev, INT xNum, INT xDenom, INT yNum,
emr.yNum = yNum; emr.yNum = yNum;
emr.yDenom = yDenom; emr.yDenom = yDenom;
return EMFDRV_WriteRecord( dev, &emr.emr ); if (!EMFDRV_WriteRecord( dev, &emr.emr )) return 0;
return next->funcs->pScaleWindowExtEx( next, xNum, xDenom, yNum, yDenom, size );
} }
BOOL CDECL EMFDRV_SetWorldTransform( PHYSDEV dev, const XFORM *xform) BOOL CDECL EMFDRV_SetWorldTransform( PHYSDEV dev, const XFORM *xform)
@ -131,34 +143,36 @@ BOOL CDECL EMFDRV_ModifyWorldTransform( PHYSDEV dev, const XFORM *xform, DWORD m
return EMFDRV_WriteRecord( dev, &emr.emr ); return EMFDRV_WriteRecord( dev, &emr.emr );
} }
INT CDECL EMFDRV_OffsetViewportOrg( PHYSDEV dev, INT x, INT y ) BOOL CDECL EMFDRV_OffsetViewportOrgEx( PHYSDEV dev, INT x, INT y, POINT *pt )
{ {
POINT pt; PHYSDEV next = GET_NEXT_PHYSDEV( dev, pOffsetViewportOrgEx );
EMRSETVIEWPORTORGEX emr; EMRSETVIEWPORTORGEX emr;
EMFDRV_PDEVICE* physDev = (EMFDRV_PDEVICE*)dev; EMFDRV_PDEVICE* physDev = (EMFDRV_PDEVICE*)dev;
GetViewportOrgEx(physDev->hdc, &pt); GetViewportOrgEx(physDev->hdc, pt);
emr.emr.iType = EMR_SETVIEWPORTORGEX; emr.emr.iType = EMR_SETVIEWPORTORGEX;
emr.emr.nSize = sizeof(emr); emr.emr.nSize = sizeof(emr);
emr.ptlOrigin.x = pt.x + x; emr.ptlOrigin.x = pt->x + x;
emr.ptlOrigin.y = pt.y + y; emr.ptlOrigin.y = pt->y + y;
return EMFDRV_WriteRecord( dev, &emr.emr ); if (!EMFDRV_WriteRecord( dev, &emr.emr )) return 0;
return next->funcs->pOffsetViewportOrgEx( next, x, y, pt );
} }
INT CDECL EMFDRV_OffsetWindowOrg( PHYSDEV dev, INT x, INT y ) BOOL CDECL EMFDRV_OffsetWindowOrgEx( PHYSDEV dev, INT x, INT y, POINT *pt )
{ {
POINT pt; PHYSDEV next = GET_NEXT_PHYSDEV( dev, pOffsetWindowOrgEx );
EMRSETWINDOWORGEX emr; EMRSETWINDOWORGEX emr;
EMFDRV_PDEVICE* physDev = (EMFDRV_PDEVICE*)dev; EMFDRV_PDEVICE* physDev = (EMFDRV_PDEVICE*)dev;
GetWindowOrgEx(physDev->hdc, &pt); GetWindowOrgEx(physDev->hdc, pt);
emr.emr.iType = EMR_SETWINDOWORGEX; emr.emr.iType = EMR_SETWINDOWORGEX;
emr.emr.nSize = sizeof(emr); emr.emr.nSize = sizeof(emr);
emr.ptlOrigin.x = pt.x + x; emr.ptlOrigin.x = pt->x + x;
emr.ptlOrigin.y = pt.y + y; emr.ptlOrigin.y = pt->y + y;
return EMFDRV_WriteRecord( dev, &emr.emr ); if (!EMFDRV_WriteRecord( dev, &emr.emr )) return 0;
return next->funcs->pOffsetWindowOrgEx( next, x, y, pt );
} }

View File

@ -135,8 +135,8 @@ typedef struct tagDC_FUNCS
BOOL (CDECL *pModifyWorldTransform)(PHYSDEV,const XFORM*,DWORD); BOOL (CDECL *pModifyWorldTransform)(PHYSDEV,const XFORM*,DWORD);
BOOL (CDECL *pMoveTo)(PHYSDEV,INT,INT); BOOL (CDECL *pMoveTo)(PHYSDEV,INT,INT);
INT (CDECL *pOffsetClipRgn)(PHYSDEV,INT,INT); INT (CDECL *pOffsetClipRgn)(PHYSDEV,INT,INT);
INT (CDECL *pOffsetViewportOrg)(PHYSDEV,INT,INT); BOOL (CDECL *pOffsetViewportOrgEx)(PHYSDEV,INT,INT,POINT*);
INT (CDECL *pOffsetWindowOrg)(PHYSDEV,INT,INT); BOOL (CDECL *pOffsetWindowOrgEx)(PHYSDEV,INT,INT,POINT*);
BOOL (CDECL *pPaintRgn)(PHYSDEV,HRGN); BOOL (CDECL *pPaintRgn)(PHYSDEV,HRGN);
BOOL (CDECL *pPatBlt)(PHYSDEV,INT,INT,INT,INT,DWORD); BOOL (CDECL *pPatBlt)(PHYSDEV,INT,INT,INT,INT,DWORD);
BOOL (CDECL *pPie)(PHYSDEV,INT,INT,INT,INT,INT,INT,INT,INT); BOOL (CDECL *pPie)(PHYSDEV,INT,INT,INT,INT,INT,INT,INT,INT);
@ -155,8 +155,8 @@ typedef struct tagDC_FUNCS
BOOL (CDECL *pRestoreDC)(PHYSDEV,INT); BOOL (CDECL *pRestoreDC)(PHYSDEV,INT);
BOOL (CDECL *pRoundRect)(PHYSDEV,INT,INT,INT,INT,INT,INT); BOOL (CDECL *pRoundRect)(PHYSDEV,INT,INT,INT,INT,INT,INT);
INT (CDECL *pSaveDC)(PHYSDEV); INT (CDECL *pSaveDC)(PHYSDEV);
INT (CDECL *pScaleViewportExt)(PHYSDEV,INT,INT,INT,INT); BOOL (CDECL *pScaleViewportExtEx)(PHYSDEV,INT,INT,INT,INT,SIZE*);
INT (CDECL *pScaleWindowExt)(PHYSDEV,INT,INT,INT,INT); BOOL (CDECL *pScaleWindowExtEx)(PHYSDEV,INT,INT,INT,INT,SIZE*);
HBITMAP (CDECL *pSelectBitmap)(PHYSDEV,HBITMAP); HBITMAP (CDECL *pSelectBitmap)(PHYSDEV,HBITMAP);
HBRUSH (CDECL *pSelectBrush)(PHYSDEV,HBRUSH); HBRUSH (CDECL *pSelectBrush)(PHYSDEV,HBRUSH);
BOOL (CDECL *pSelectClipPath)(PHYSDEV,INT); BOOL (CDECL *pSelectClipPath)(PHYSDEV,INT);
@ -187,10 +187,10 @@ typedef struct tagDC_FUNCS
INT (CDECL *pSetTextCharacterExtra)(PHYSDEV,INT); INT (CDECL *pSetTextCharacterExtra)(PHYSDEV,INT);
DWORD (CDECL *pSetTextColor)(PHYSDEV,DWORD); DWORD (CDECL *pSetTextColor)(PHYSDEV,DWORD);
INT (CDECL *pSetTextJustification)(PHYSDEV,INT,INT); INT (CDECL *pSetTextJustification)(PHYSDEV,INT,INT);
INT (CDECL *pSetViewportExt)(PHYSDEV,INT,INT); BOOL (CDECL *pSetViewportExtEx)(PHYSDEV,INT,INT,SIZE*);
INT (CDECL *pSetViewportOrg)(PHYSDEV,INT,INT); BOOL (CDECL *pSetViewportOrgEx)(PHYSDEV,INT,INT,POINT*);
INT (CDECL *pSetWindowExt)(PHYSDEV,INT,INT); BOOL (CDECL *pSetWindowExtEx)(PHYSDEV,INT,INT,SIZE*);
INT (CDECL *pSetWindowOrg)(PHYSDEV,INT,INT); BOOL (CDECL *pSetWindowOrgEx)(PHYSDEV,INT,INT,POINT*);
BOOL (CDECL *pSetWorldTransform)(PHYSDEV,const XFORM*); BOOL (CDECL *pSetWorldTransform)(PHYSDEV,const XFORM*);
INT (CDECL *pStartDoc)(PHYSDEV,const DOCINFOW*); INT (CDECL *pStartDoc)(PHYSDEV,const DOCINFOW*);
INT (CDECL *pStartPage)(PHYSDEV); INT (CDECL *pStartPage)(PHYSDEV);
@ -521,10 +521,19 @@ extern BOOL CDECL nulldrv_FrameRgn( PHYSDEV dev, HRGN rgn, HBRUSH brush, INT wid
extern INT CDECL nulldrv_IntersectClipRect( PHYSDEV dev, INT left, INT top, INT right, INT bottom ) DECLSPEC_HIDDEN; extern INT CDECL nulldrv_IntersectClipRect( PHYSDEV dev, INT left, INT top, INT right, INT bottom ) DECLSPEC_HIDDEN;
extern BOOL CDECL nulldrv_InvertRgn( PHYSDEV dev, HRGN rgn ) DECLSPEC_HIDDEN; extern BOOL CDECL nulldrv_InvertRgn( PHYSDEV dev, HRGN rgn ) DECLSPEC_HIDDEN;
extern INT CDECL nulldrv_OffsetClipRgn( PHYSDEV dev, INT x, INT y ) DECLSPEC_HIDDEN; extern INT CDECL nulldrv_OffsetClipRgn( PHYSDEV dev, INT x, INT y ) DECLSPEC_HIDDEN;
extern BOOL CDECL nulldrv_OffsetViewportOrgEx( PHYSDEV dev, INT x, INT y, POINT *pt ) DECLSPEC_HIDDEN;
extern BOOL CDECL nulldrv_OffsetWindowOrgEx( PHYSDEV dev, INT x, INT y, POINT *pt ) DECLSPEC_HIDDEN;
extern BOOL CDECL nulldrv_PolyBezier( PHYSDEV dev, const POINT *points, DWORD count ) DECLSPEC_HIDDEN; extern BOOL CDECL nulldrv_PolyBezier( PHYSDEV dev, const POINT *points, DWORD count ) DECLSPEC_HIDDEN;
extern BOOL CDECL nulldrv_PolyBezierTo( PHYSDEV dev, const POINT *points, DWORD count ) DECLSPEC_HIDDEN; extern BOOL CDECL nulldrv_PolyBezierTo( PHYSDEV dev, const POINT *points, DWORD count ) DECLSPEC_HIDDEN;
extern BOOL CDECL nulldrv_PolyDraw( PHYSDEV dev, const POINT *points, const BYTE *types, DWORD count ) DECLSPEC_HIDDEN; extern BOOL CDECL nulldrv_PolyDraw( PHYSDEV dev, const POINT *points, const BYTE *types, DWORD count ) DECLSPEC_HIDDEN;
extern BOOL CDECL nulldrv_PolylineTo( PHYSDEV dev, const POINT *points, INT count ) DECLSPEC_HIDDEN; extern BOOL CDECL nulldrv_PolylineTo( PHYSDEV dev, const POINT *points, INT count ) DECLSPEC_HIDDEN;
extern BOOL CDECL nulldrv_ScaleViewportExtEx( PHYSDEV dev, INT x_num, INT x_denom, INT y_num, INT y_denom, SIZE *size ) DECLSPEC_HIDDEN;
extern BOOL CDECL nulldrv_ScaleWindowExtEx( PHYSDEV dev, INT x_num, INT x_denom, INT y_num, INT y_denom, SIZE *size ) DECLSPEC_HIDDEN;
extern INT CDECL nulldrv_SetMapMode( PHYSDEV dev, INT mode ) DECLSPEC_HIDDEN;
extern BOOL CDECL nulldrv_SetViewportExtEx( PHYSDEV dev, INT cx, INT cy, SIZE *size ) DECLSPEC_HIDDEN;
extern BOOL CDECL nulldrv_SetViewportOrgEx( PHYSDEV dev, INT x, INT y, POINT *pt ) DECLSPEC_HIDDEN;
extern BOOL CDECL nulldrv_SetWindowExtEx( PHYSDEV dev, INT cx, INT cy, SIZE *size ) DECLSPEC_HIDDEN;
extern BOOL CDECL nulldrv_SetWindowOrgEx( PHYSDEV dev, INT x, INT y, POINT *pt ) DECLSPEC_HIDDEN;
static inline DC *get_nulldrv_dc( PHYSDEV dev ) static inline DC *get_nulldrv_dc( PHYSDEV dev )
{ {

View File

@ -56,6 +56,215 @@ static void MAPPING_FixIsotropic( DC * dc )
} }
/***********************************************************************
* null driver fallback implementations
*/
BOOL CDECL nulldrv_OffsetViewportOrgEx( PHYSDEV dev, INT x, INT y, POINT *pt )
{
DC *dc = get_nulldrv_dc( dev );
if (pt)
{
pt->x = dc->vportOrgX;
pt->y = dc->vportOrgY;
}
dc->vportOrgX += x;
dc->vportOrgY += y;
DC_UpdateXforms( dc );
return TRUE;
}
BOOL CDECL nulldrv_OffsetWindowOrgEx( PHYSDEV dev, INT x, INT y, POINT *pt )
{
DC *dc = get_nulldrv_dc( dev );
if (pt)
{
pt->x = dc->wndOrgX;
pt->y = dc->wndOrgY;
}
dc->wndOrgX += x;
dc->wndOrgY += y;
DC_UpdateXforms( dc );
return TRUE;
}
BOOL CDECL nulldrv_ScaleViewportExtEx( PHYSDEV dev, INT x_num, INT x_denom, INT y_num, INT y_denom,
SIZE *size )
{
DC *dc = get_nulldrv_dc( dev );
if (size)
{
size->cx = dc->vportExtX;
size->cy = dc->vportExtY;
}
if (dc->MapMode != MM_ISOTROPIC && dc->MapMode != MM_ANISOTROPIC) return TRUE;
if (!x_num || !x_denom || !y_num || !y_denom) return FALSE;
dc->vportExtX = (dc->vportExtX * x_num) / x_denom;
dc->vportExtY = (dc->vportExtY * y_num) / y_denom;
if (dc->vportExtX == 0) dc->vportExtX = 1;
if (dc->vportExtY == 0) dc->vportExtY = 1;
if (dc->MapMode == MM_ISOTROPIC) MAPPING_FixIsotropic( dc );
DC_UpdateXforms( dc );
return TRUE;
}
BOOL CDECL nulldrv_ScaleWindowExtEx( PHYSDEV dev, INT x_num, INT x_denom, INT y_num, INT y_denom,
SIZE *size )
{
DC *dc = get_nulldrv_dc( dev );
if (size)
{
size->cx = dc->wndExtX;
size->cy = dc->wndExtY;
}
if (dc->MapMode != MM_ISOTROPIC && dc->MapMode != MM_ANISOTROPIC) return TRUE;
if (!x_num || !x_denom || !y_num || !y_denom) return FALSE;
dc->wndExtX = (dc->wndExtX * x_num) / x_denom;
dc->wndExtY = (dc->wndExtY * y_num) / y_denom;
if (dc->wndExtX == 0) dc->wndExtX = 1;
if (dc->wndExtY == 0) dc->wndExtY = 1;
if (dc->MapMode == MM_ISOTROPIC) MAPPING_FixIsotropic( dc );
DC_UpdateXforms( dc );
return TRUE;
}
INT CDECL nulldrv_SetMapMode( PHYSDEV dev, INT mode )
{
DC *dc = get_nulldrv_dc( dev );
INT ret = dc->MapMode;
INT horzSize, vertSize, horzRes, vertRes;
if (mode == dc->MapMode && (mode == MM_ISOTROPIC || mode == MM_ANISOTROPIC)) return ret;
horzSize = dc->virtual_size.cx;
vertSize = dc->virtual_size.cy;
horzRes = dc->virtual_res.cx;
vertRes = dc->virtual_res.cy;
switch (mode)
{
case MM_TEXT:
dc->wndExtX = 1;
dc->wndExtY = 1;
dc->vportExtX = 1;
dc->vportExtY = 1;
break;
case MM_LOMETRIC:
case MM_ISOTROPIC:
dc->wndExtX = horzSize * 10;
dc->wndExtY = vertSize * 10;
dc->vportExtX = horzRes;
dc->vportExtY = -vertRes;
break;
case MM_HIMETRIC:
dc->wndExtX = horzSize * 100;
dc->wndExtY = vertSize * 100;
dc->vportExtX = horzRes;
dc->vportExtY = -vertRes;
break;
case MM_LOENGLISH:
dc->wndExtX = MulDiv(1000, horzSize, 254);
dc->wndExtY = MulDiv(1000, vertSize, 254);
dc->vportExtX = horzRes;
dc->vportExtY = -vertRes;
break;
case MM_HIENGLISH:
dc->wndExtX = MulDiv(10000, horzSize, 254);
dc->wndExtY = MulDiv(10000, vertSize, 254);
dc->vportExtX = horzRes;
dc->vportExtY = -vertRes;
break;
case MM_TWIPS:
dc->wndExtX = MulDiv(14400, horzSize, 254);
dc->wndExtY = MulDiv(14400, vertSize, 254);
dc->vportExtX = horzRes;
dc->vportExtY = -vertRes;
break;
case MM_ANISOTROPIC:
break;
default:
return 0;
}
/* RTL layout is always MM_ANISOTROPIC */
if (!(dc->layout & LAYOUT_RTL)) dc->MapMode = mode;
DC_UpdateXforms( dc );
return ret;
}
BOOL CDECL nulldrv_SetViewportExtEx( PHYSDEV dev, INT cx, INT cy, SIZE *size )
{
DC *dc = get_nulldrv_dc( dev );
if (size)
{
size->cx = dc->vportExtX;
size->cy = dc->vportExtY;
}
if (dc->MapMode != MM_ISOTROPIC && dc->MapMode != MM_ANISOTROPIC) return TRUE;
if (!cx || !cy) return FALSE;
dc->vportExtX = cx;
dc->vportExtY = cy;
if (dc->MapMode == MM_ISOTROPIC) MAPPING_FixIsotropic( dc );
DC_UpdateXforms( dc );
return TRUE;
}
BOOL CDECL nulldrv_SetViewportOrgEx( PHYSDEV dev, INT x, INT y, POINT *pt )
{
DC *dc = get_nulldrv_dc( dev );
if (pt)
{
pt->x = dc->vportOrgX;
pt->y = dc->vportOrgY;
}
dc->vportOrgX = x;
dc->vportOrgY = y;
DC_UpdateXforms( dc );
return TRUE;
}
BOOL CDECL nulldrv_SetWindowExtEx( PHYSDEV dev, INT cx, INT cy, SIZE *size )
{
DC *dc = get_nulldrv_dc( dev );
if (size)
{
size->cx = dc->wndExtX;
size->cy = dc->wndExtY;
}
if (dc->MapMode != MM_ISOTROPIC && dc->MapMode != MM_ANISOTROPIC) return TRUE;
if (!cx || !cy) return FALSE;
dc->wndExtX = cx;
dc->wndExtY = cy;
/* The API docs say that you should call SetWindowExtEx before
SetViewportExtEx. This advice does not imply that Windows
doesn't ensure the isotropic mapping after SetWindowExtEx! */
if (dc->MapMode == MM_ISOTROPIC) MAPPING_FixIsotropic( dc );
DC_UpdateXforms( dc );
return TRUE;
}
BOOL CDECL nulldrv_SetWindowOrgEx( PHYSDEV dev, INT x, INT y, POINT *pt )
{
DC *dc = get_nulldrv_dc( dev );
if (pt)
{
pt->x = dc->wndOrgX;
pt->y = dc->wndOrgY;
}
dc->wndOrgX = x;
dc->wndOrgY = y;
DC_UpdateXforms( dc );
return TRUE;
}
/*********************************************************************** /***********************************************************************
* DPtoLP (GDI32.@) * DPtoLP (GDI32.@)
*/ */
@ -114,81 +323,17 @@ BOOL WINAPI LPtoDP( HDC hdc, LPPOINT points, INT count )
*/ */
INT WINAPI SetMapMode( HDC hdc, INT mode ) INT WINAPI SetMapMode( HDC hdc, INT mode )
{ {
INT ret; INT ret = 0;
INT horzSize, vertSize, horzRes, vertRes;
DC * dc = get_dc_ptr( hdc ); DC * dc = get_dc_ptr( hdc );
if (!dc) return 0;
if (dc->funcs->pSetMapMode)
{
if((ret = dc->funcs->pSetMapMode( dc->physDev, mode )) != TRUE)
{
if(ret == GDI_NO_MORE_WORK)
ret = TRUE;
goto done;
}
}
TRACE("%p %d\n", hdc, mode ); TRACE("%p %d\n", hdc, mode );
ret = dc->MapMode; if (dc)
if (mode == dc->MapMode && (mode == MM_ISOTROPIC || mode == MM_ANISOTROPIC))
goto done;
horzSize = dc->virtual_size.cx;
vertSize = dc->virtual_size.cy;
horzRes = dc->virtual_res.cx;
vertRes = dc->virtual_res.cy;
switch(mode)
{ {
case MM_TEXT: PHYSDEV physdev = GET_DC_PHYSDEV( dc, pSetMapMode );
dc->wndExtX = 1; ret = physdev->funcs->pSetMapMode( physdev, mode );
dc->wndExtY = 1; release_dc_ptr( dc );
dc->vportExtX = 1;
dc->vportExtY = 1;
break;
case MM_LOMETRIC:
case MM_ISOTROPIC:
dc->wndExtX = horzSize * 10;
dc->wndExtY = vertSize * 10;
dc->vportExtX = horzRes;
dc->vportExtY = -vertRes;
break;
case MM_HIMETRIC:
dc->wndExtX = horzSize * 100;
dc->wndExtY = vertSize * 100;
dc->vportExtX = horzRes;
dc->vportExtY = -vertRes;
break;
case MM_LOENGLISH:
dc->wndExtX = MulDiv(1000, horzSize, 254);
dc->wndExtY = MulDiv(1000, vertSize, 254);
dc->vportExtX = horzRes;
dc->vportExtY = -vertRes;
break;
case MM_HIENGLISH:
dc->wndExtX = MulDiv(10000, horzSize, 254);
dc->wndExtY = MulDiv(10000, vertSize, 254);
dc->vportExtX = horzRes;
dc->vportExtY = -vertRes;
break;
case MM_TWIPS:
dc->wndExtX = MulDiv(14400, horzSize, 254);
dc->wndExtY = MulDiv(14400, vertSize, 254);
dc->vportExtX = horzRes;
dc->vportExtY = -vertRes;
break;
case MM_ANISOTROPIC:
break;
default:
goto done;
} }
/* RTL layout is always MM_ANISOTROPIC */
if (!(dc->layout & LAYOUT_RTL)) dc->MapMode = mode;
DC_UpdateXforms( dc );
done:
release_dc_ptr( dc );
return ret; return ret;
} }
@ -198,36 +343,15 @@ INT WINAPI SetMapMode( HDC hdc, INT mode )
*/ */
BOOL WINAPI SetViewportExtEx( HDC hdc, INT x, INT y, LPSIZE size ) BOOL WINAPI SetViewportExtEx( HDC hdc, INT x, INT y, LPSIZE size )
{ {
INT ret = TRUE; INT ret = FALSE;
DC * dc = get_dc_ptr( hdc ); DC * dc = get_dc_ptr( hdc );
if (!dc) return FALSE;
if (dc->funcs->pSetViewportExt) if (dc)
{ {
if((ret = dc->funcs->pSetViewportExt( dc->physDev, x, y )) != TRUE) PHYSDEV physdev = GET_DC_PHYSDEV( dc, pSetViewportExtEx );
{ ret = physdev->funcs->pSetViewportExtEx( physdev, x, y, size );
if(ret == GDI_NO_MORE_WORK) release_dc_ptr( dc );
ret = TRUE;
goto done;
}
} }
if (size)
{
size->cx = dc->vportExtX;
size->cy = dc->vportExtY;
}
if ((dc->MapMode != MM_ISOTROPIC) && (dc->MapMode != MM_ANISOTROPIC))
goto done;
if (!x || !y)
{
ret = FALSE;
goto done;
}
dc->vportExtX = x;
dc->vportExtY = y;
if (dc->MapMode == MM_ISOTROPIC) MAPPING_FixIsotropic( dc );
DC_UpdateXforms( dc );
done:
release_dc_ptr( dc );
return ret; return ret;
} }
@ -237,29 +361,15 @@ BOOL WINAPI SetViewportExtEx( HDC hdc, INT x, INT y, LPSIZE size )
*/ */
BOOL WINAPI SetViewportOrgEx( HDC hdc, INT x, INT y, LPPOINT pt ) BOOL WINAPI SetViewportOrgEx( HDC hdc, INT x, INT y, LPPOINT pt )
{ {
INT ret = TRUE; INT ret = FALSE;
DC * dc = get_dc_ptr( hdc ); DC * dc = get_dc_ptr( hdc );
if (!dc) return FALSE;
if (dc->funcs->pSetViewportOrg)
{
if((ret = dc->funcs->pSetViewportOrg( dc->physDev, x, y )) != TRUE)
{
if(ret == GDI_NO_MORE_WORK)
ret = TRUE;
goto done;
}
}
if (pt)
{
pt->x = dc->vportOrgX;
pt->y = dc->vportOrgY;
}
dc->vportOrgX = x;
dc->vportOrgY = y;
DC_UpdateXforms( dc );
done: if (dc)
release_dc_ptr( dc ); {
PHYSDEV physdev = GET_DC_PHYSDEV( dc, pSetViewportOrgEx );
ret = physdev->funcs->pSetViewportOrgEx( physdev, x, y, pt );
release_dc_ptr( dc );
}
return ret; return ret;
} }
@ -269,39 +379,15 @@ BOOL WINAPI SetViewportOrgEx( HDC hdc, INT x, INT y, LPPOINT pt )
*/ */
BOOL WINAPI SetWindowExtEx( HDC hdc, INT x, INT y, LPSIZE size ) BOOL WINAPI SetWindowExtEx( HDC hdc, INT x, INT y, LPSIZE size )
{ {
INT ret = TRUE; INT ret = FALSE;
DC * dc = get_dc_ptr( hdc ); DC * dc = get_dc_ptr( hdc );
if (!dc) return FALSE;
if (dc->funcs->pSetWindowExt) if (dc)
{ {
if((ret = dc->funcs->pSetWindowExt( dc->physDev, x, y )) != TRUE) PHYSDEV physdev = GET_DC_PHYSDEV( dc, pSetWindowExtEx );
{ ret = physdev->funcs->pSetWindowExtEx( physdev, x, y, size );
if(ret == GDI_NO_MORE_WORK) release_dc_ptr( dc );
ret = TRUE;
goto done;
}
} }
if (size)
{
size->cx = dc->wndExtX;
size->cy = dc->wndExtY;
}
if ((dc->MapMode != MM_ISOTROPIC) && (dc->MapMode != MM_ANISOTROPIC))
goto done;
if (!x || !y)
{
ret = FALSE;
goto done;
}
dc->wndExtX = x;
dc->wndExtY = y;
/* The API docs say that you should call SetWindowExtEx before
SetViewportExtEx. This advice does not imply that Windows
doesn't ensure the isotropic mapping after SetWindowExtEx! */
if (dc->MapMode == MM_ISOTROPIC) MAPPING_FixIsotropic( dc );
DC_UpdateXforms( dc );
done:
release_dc_ptr( dc );
return ret; return ret;
} }
@ -311,28 +397,15 @@ BOOL WINAPI SetWindowExtEx( HDC hdc, INT x, INT y, LPSIZE size )
*/ */
BOOL WINAPI SetWindowOrgEx( HDC hdc, INT x, INT y, LPPOINT pt ) BOOL WINAPI SetWindowOrgEx( HDC hdc, INT x, INT y, LPPOINT pt )
{ {
INT ret = TRUE; INT ret = FALSE;
DC * dc = get_dc_ptr( hdc ); DC * dc = get_dc_ptr( hdc );
if (!dc) return FALSE;
if (dc->funcs->pSetWindowOrg) if (dc)
{ {
if((ret = dc->funcs->pSetWindowOrg( dc->physDev, x, y )) != TRUE) PHYSDEV physdev = GET_DC_PHYSDEV( dc, pSetWindowOrgEx );
{ ret = physdev->funcs->pSetWindowOrgEx( physdev, x, y, pt );
if(ret == GDI_NO_MORE_WORK) release_dc_ptr( dc );
ret = TRUE;
goto done;
}
} }
if (pt)
{
pt->x = dc->wndOrgX;
pt->y = dc->wndOrgY;
}
dc->wndOrgX = x;
dc->wndOrgY = y;
DC_UpdateXforms( dc );
done:
release_dc_ptr( dc );
return ret; return ret;
} }
@ -342,28 +415,15 @@ BOOL WINAPI SetWindowOrgEx( HDC hdc, INT x, INT y, LPPOINT pt )
*/ */
BOOL WINAPI OffsetViewportOrgEx( HDC hdc, INT x, INT y, LPPOINT pt) BOOL WINAPI OffsetViewportOrgEx( HDC hdc, INT x, INT y, LPPOINT pt)
{ {
INT ret = TRUE; INT ret = FALSE;
DC * dc = get_dc_ptr( hdc ); DC * dc = get_dc_ptr( hdc );
if (!dc) return FALSE;
if (dc->funcs->pOffsetViewportOrg) if (dc)
{ {
if((ret = dc->funcs->pOffsetViewportOrg( dc->physDev, x, y )) != TRUE) PHYSDEV physdev = GET_DC_PHYSDEV( dc, pOffsetViewportOrgEx );
{ ret = physdev->funcs->pOffsetViewportOrgEx( physdev, x, y, pt );
if(ret == GDI_NO_MORE_WORK) release_dc_ptr( dc );
ret = TRUE;
goto done;
}
} }
if (pt)
{
pt->x = dc->vportOrgX;
pt->y = dc->vportOrgY;
}
dc->vportOrgX += x;
dc->vportOrgY += y;
DC_UpdateXforms( dc );
done:
release_dc_ptr( dc );
return ret; return ret;
} }
@ -373,28 +433,15 @@ BOOL WINAPI OffsetViewportOrgEx( HDC hdc, INT x, INT y, LPPOINT pt)
*/ */
BOOL WINAPI OffsetWindowOrgEx( HDC hdc, INT x, INT y, LPPOINT pt ) BOOL WINAPI OffsetWindowOrgEx( HDC hdc, INT x, INT y, LPPOINT pt )
{ {
INT ret = TRUE; INT ret = FALSE;
DC * dc = get_dc_ptr( hdc ); DC * dc = get_dc_ptr( hdc );
if (!dc) return FALSE;
if (dc->funcs->pOffsetWindowOrg) if (dc)
{ {
if((ret = dc->funcs->pOffsetWindowOrg( dc->physDev, x, y )) != TRUE) PHYSDEV physdev = GET_DC_PHYSDEV( dc, pOffsetWindowOrgEx );
{ ret = physdev->funcs->pOffsetWindowOrgEx( physdev, x, y, pt );
if(ret == GDI_NO_MORE_WORK) release_dc_ptr( dc );
ret = TRUE;
goto done;
}
} }
if (pt)
{
pt->x = dc->wndOrgX;
pt->y = dc->wndOrgY;
}
dc->wndOrgX += x;
dc->wndOrgY += y;
DC_UpdateXforms( dc );
done:
release_dc_ptr( dc );
return ret; return ret;
} }
@ -405,38 +452,15 @@ BOOL WINAPI OffsetWindowOrgEx( HDC hdc, INT x, INT y, LPPOINT pt )
BOOL WINAPI ScaleViewportExtEx( HDC hdc, INT xNum, INT xDenom, BOOL WINAPI ScaleViewportExtEx( HDC hdc, INT xNum, INT xDenom,
INT yNum, INT yDenom, LPSIZE size ) INT yNum, INT yDenom, LPSIZE size )
{ {
INT ret = TRUE; INT ret = FALSE;
DC * dc = get_dc_ptr( hdc ); DC * dc = get_dc_ptr( hdc );
if (!dc) return FALSE;
if (dc->funcs->pScaleViewportExt) if (dc)
{ {
if((ret = dc->funcs->pScaleViewportExt( dc->physDev, xNum, xDenom, yNum, yDenom )) != TRUE) PHYSDEV physdev = GET_DC_PHYSDEV( dc, pScaleViewportExtEx );
{ ret = physdev->funcs->pScaleViewportExtEx( physdev, xNum, xDenom, yNum, yDenom, size );
if(ret == GDI_NO_MORE_WORK) release_dc_ptr( dc );
ret = TRUE;
goto done;
}
} }
if (size)
{
size->cx = dc->vportExtX;
size->cy = dc->vportExtY;
}
if ((dc->MapMode != MM_ISOTROPIC) && (dc->MapMode != MM_ANISOTROPIC))
goto done;
if (!xNum || !xDenom || !yNum || !yDenom)
{
ret = FALSE;
goto done;
}
dc->vportExtX = (dc->vportExtX * xNum) / xDenom;
dc->vportExtY = (dc->vportExtY * yNum) / yDenom;
if (dc->vportExtX == 0) dc->vportExtX = 1;
if (dc->vportExtY == 0) dc->vportExtY = 1;
if (dc->MapMode == MM_ISOTROPIC) MAPPING_FixIsotropic( dc );
DC_UpdateXforms( dc );
done:
release_dc_ptr( dc );
return ret; return ret;
} }
@ -447,38 +471,15 @@ BOOL WINAPI ScaleViewportExtEx( HDC hdc, INT xNum, INT xDenom,
BOOL WINAPI ScaleWindowExtEx( HDC hdc, INT xNum, INT xDenom, BOOL WINAPI ScaleWindowExtEx( HDC hdc, INT xNum, INT xDenom,
INT yNum, INT yDenom, LPSIZE size ) INT yNum, INT yDenom, LPSIZE size )
{ {
INT ret = TRUE; INT ret = FALSE;
DC * dc = get_dc_ptr( hdc ); DC * dc = get_dc_ptr( hdc );
if (!dc) return FALSE;
if (dc->funcs->pScaleWindowExt) if (dc)
{ {
if((ret = dc->funcs->pScaleWindowExt( dc->physDev, xNum, xDenom, yNum, yDenom )) != TRUE) PHYSDEV physdev = GET_DC_PHYSDEV( dc, pScaleWindowExtEx );
{ ret = physdev->funcs->pScaleWindowExtEx( physdev, xNum, xDenom, yNum, yDenom, size );
if(ret == GDI_NO_MORE_WORK) release_dc_ptr( dc );
ret = TRUE;
goto done;
}
} }
if (size)
{
size->cx = dc->wndExtX;
size->cy = dc->wndExtY;
}
if ((dc->MapMode != MM_ISOTROPIC) && (dc->MapMode != MM_ANISOTROPIC))
goto done;
if (!xNum || !xDenom || !xNum || !yDenom)
{
ret = FALSE;
goto done;
}
dc->wndExtX = (dc->wndExtX * xNum) / xDenom;
dc->wndExtY = (dc->wndExtY * yNum) / yDenom;
if (dc->wndExtX == 0) dc->wndExtX = 1;
if (dc->wndExtY == 0) dc->wndExtY = 1;
if (dc->MapMode == MM_ISOTROPIC) MAPPING_FixIsotropic( dc );
DC_UpdateXforms( dc );
done:
release_dc_ptr( dc );
return ret; return ret;
} }

View File

@ -86,8 +86,8 @@ static const DC_FUNCTIONS MFDRV_Funcs =
NULL, /* pModifyWorldTransform */ NULL, /* pModifyWorldTransform */
MFDRV_MoveTo, /* pMoveTo */ MFDRV_MoveTo, /* pMoveTo */
MFDRV_OffsetClipRgn, /* pOffsetClipRgn */ MFDRV_OffsetClipRgn, /* pOffsetClipRgn */
MFDRV_OffsetViewportOrg, /* pOffsetViewportOrg */ MFDRV_OffsetViewportOrgEx, /* pOffsetViewportOrgEx */
MFDRV_OffsetWindowOrg, /* pOffsetWindowOrg */ MFDRV_OffsetWindowOrgEx, /* pOffsetWindowOrgEx */
MFDRV_PaintRgn, /* pPaintRgn */ MFDRV_PaintRgn, /* pPaintRgn */
MFDRV_PatBlt, /* pPatBlt */ MFDRV_PatBlt, /* pPatBlt */
MFDRV_Pie, /* pPie */ MFDRV_Pie, /* pPie */
@ -106,8 +106,8 @@ static const DC_FUNCTIONS MFDRV_Funcs =
MFDRV_RestoreDC, /* pRestoreDC */ MFDRV_RestoreDC, /* pRestoreDC */
MFDRV_RoundRect, /* pRoundRect */ MFDRV_RoundRect, /* pRoundRect */
MFDRV_SaveDC, /* pSaveDC */ MFDRV_SaveDC, /* pSaveDC */
MFDRV_ScaleViewportExt, /* pScaleViewportExt */ MFDRV_ScaleViewportExtEx, /* pScaleViewportExtEx */
MFDRV_ScaleWindowExt, /* pScaleWindowExt */ MFDRV_ScaleWindowExtEx, /* pScaleWindowExtEx */
MFDRV_SelectBitmap, /* pSelectBitmap */ MFDRV_SelectBitmap, /* pSelectBitmap */
MFDRV_SelectBrush, /* pSelectBrush */ MFDRV_SelectBrush, /* pSelectBrush */
MFDRV_SelectClipPath, /* pSelectClipPath */ MFDRV_SelectClipPath, /* pSelectClipPath */
@ -137,10 +137,10 @@ static const DC_FUNCTIONS MFDRV_Funcs =
MFDRV_SetTextCharacterExtra, /* pSetTextCharacterExtra */ MFDRV_SetTextCharacterExtra, /* pSetTextCharacterExtra */
MFDRV_SetTextColor, /* pSetTextColor */ MFDRV_SetTextColor, /* pSetTextColor */
MFDRV_SetTextJustification, /* pSetTextJustification */ MFDRV_SetTextJustification, /* pSetTextJustification */
MFDRV_SetViewportExt, /* pSetViewportExt */ MFDRV_SetViewportExtEx, /* pSetViewportExtEx */
MFDRV_SetViewportOrg, /* pSetViewportOrg */ MFDRV_SetViewportOrgEx, /* pSetViewportOrgEx */
MFDRV_SetWindowExt, /* pSetWindowExt */ MFDRV_SetWindowExtEx, /* pSetWindowExtEx */
MFDRV_SetWindowOrg, /* pSetWindowOrg */ MFDRV_SetWindowOrgEx, /* pSetWindowOrgEx */
NULL, /* pSetWorldTransform */ NULL, /* pSetWorldTransform */
NULL, /* pStartDoc */ NULL, /* pStartDoc */
NULL, /* pStartPage */ NULL, /* pStartPage */

View File

@ -31,95 +31,77 @@
*/ */
INT CDECL MFDRV_SetMapMode( PHYSDEV dev, INT mode ) INT CDECL MFDRV_SetMapMode( PHYSDEV dev, INT mode )
{ {
if(!MFDRV_MetaParam1( dev, META_SETMAPMODE, mode )) return MFDRV_MetaParam1( dev, META_SETMAPMODE, mode );
return FALSE;
return GDI_NO_MORE_WORK;
} }
/*********************************************************************** /***********************************************************************
* MFDRV_SetViewportExt * MFDRV_SetViewportExtEx
*/ */
INT CDECL MFDRV_SetViewportExt( PHYSDEV dev, INT x, INT y ) BOOL CDECL MFDRV_SetViewportExtEx( PHYSDEV dev, INT x, INT y, SIZE *size )
{ {
if(!MFDRV_MetaParam2( dev, META_SETVIEWPORTEXT, x, y )) return MFDRV_MetaParam2( dev, META_SETVIEWPORTEXT, x, y );
return FALSE;
return GDI_NO_MORE_WORK;
} }
/*********************************************************************** /***********************************************************************
* MFDRV_SetViewportOrg * MFDRV_SetViewportOrgEx
*/ */
INT CDECL MFDRV_SetViewportOrg( PHYSDEV dev, INT x, INT y ) BOOL CDECL MFDRV_SetViewportOrgEx( PHYSDEV dev, INT x, INT y, POINT *pt )
{ {
if(!MFDRV_MetaParam2( dev, META_SETVIEWPORTORG, x, y )) return MFDRV_MetaParam2( dev, META_SETVIEWPORTORG, x, y );
return FALSE;
return GDI_NO_MORE_WORK;
} }
/*********************************************************************** /***********************************************************************
* MFDRV_SetWindowExt * MFDRV_SetWindowExtEx
*/ */
INT CDECL MFDRV_SetWindowExt( PHYSDEV dev, INT x, INT y ) BOOL CDECL MFDRV_SetWindowExtEx( PHYSDEV dev, INT x, INT y, SIZE *size )
{ {
if(!MFDRV_MetaParam2( dev, META_SETWINDOWEXT, x, y )) return MFDRV_MetaParam2( dev, META_SETWINDOWEXT, x, y );
return FALSE;
return GDI_NO_MORE_WORK;
} }
/*********************************************************************** /***********************************************************************
* MFDRV_SetWindowOrg * MFDRV_SetWindowOrgEx
*/ */
INT CDECL MFDRV_SetWindowOrg( PHYSDEV dev, INT x, INT y ) BOOL CDECL MFDRV_SetWindowOrgEx( PHYSDEV dev, INT x, INT y, POINT *pt )
{ {
if(!MFDRV_MetaParam2( dev, META_SETWINDOWORG, x, y )) return MFDRV_MetaParam2( dev, META_SETWINDOWORG, x, y );
return FALSE;
return GDI_NO_MORE_WORK;
} }
/*********************************************************************** /***********************************************************************
* MFDRV_OffsetViewportOrg * MFDRV_OffsetViewportOrgEx
*/ */
INT CDECL MFDRV_OffsetViewportOrg( PHYSDEV dev, INT x, INT y ) BOOL CDECL MFDRV_OffsetViewportOrgEx( PHYSDEV dev, INT x, INT y, POINT *pt )
{ {
if(!MFDRV_MetaParam2( dev, META_OFFSETVIEWPORTORG, x, y )) return MFDRV_MetaParam2( dev, META_OFFSETVIEWPORTORG, x, y );
return FALSE;
return GDI_NO_MORE_WORK;
} }
/*********************************************************************** /***********************************************************************
* MFDRV_OffsetWindowOrg * MFDRV_OffsetWindowOrgEx
*/ */
INT CDECL MFDRV_OffsetWindowOrg( PHYSDEV dev, INT x, INT y ) BOOL CDECL MFDRV_OffsetWindowOrgEx( PHYSDEV dev, INT x, INT y, POINT *pt )
{ {
if(!MFDRV_MetaParam2( dev, META_OFFSETWINDOWORG, x, y )) return MFDRV_MetaParam2( dev, META_OFFSETWINDOWORG, x, y );
return FALSE;
return GDI_NO_MORE_WORK;
} }
/*********************************************************************** /***********************************************************************
* MFDRV_ScaleViewportExt * MFDRV_ScaleViewportExtEx
*/ */
INT CDECL MFDRV_ScaleViewportExt( PHYSDEV dev, INT xNum, INT xDenom, INT yNum, INT yDenom ) BOOL CDECL MFDRV_ScaleViewportExtEx( PHYSDEV dev, INT xNum, INT xDenom, INT yNum, INT yDenom, SIZE *size )
{ {
if(!MFDRV_MetaParam4( dev, META_SCALEVIEWPORTEXT, xNum, xDenom, yNum, yDenom )) return MFDRV_MetaParam4( dev, META_SCALEVIEWPORTEXT, xNum, xDenom, yNum, yDenom );
return FALSE;
return GDI_NO_MORE_WORK;
} }
/*********************************************************************** /***********************************************************************
* MFDRV_ScaleWindowExt * MFDRV_ScaleWindowExtEx
*/ */
INT CDECL MFDRV_ScaleWindowExt( PHYSDEV dev, INT xNum, INT xDenom, INT yNum, INT yDenom ) BOOL CDECL MFDRV_ScaleWindowExtEx( PHYSDEV dev, INT xNum, INT xDenom, INT yNum, INT yDenom, SIZE *size )
{ {
if(!MFDRV_MetaParam4( dev, META_SCALEWINDOWEXT, xNum, xDenom, yNum, yDenom )) return MFDRV_MetaParam4( dev, META_SCALEWINDOWEXT, xNum, xDenom, yNum, yDenom );
return FALSE;
return GDI_NO_MORE_WORK;
} }

View File

@ -92,8 +92,8 @@ extern BOOL CDECL MFDRV_InvertRgn( PHYSDEV dev, HRGN hrgn ) DECLSPEC_HIDDEN;
extern BOOL CDECL MFDRV_LineTo( PHYSDEV dev, INT x, INT y ) DECLSPEC_HIDDEN; extern BOOL CDECL MFDRV_LineTo( PHYSDEV dev, INT x, INT y ) DECLSPEC_HIDDEN;
extern BOOL CDECL MFDRV_MoveTo( PHYSDEV dev, INT x, INT y ) DECLSPEC_HIDDEN; extern BOOL CDECL MFDRV_MoveTo( PHYSDEV dev, INT x, INT y ) DECLSPEC_HIDDEN;
extern INT CDECL MFDRV_OffsetClipRgn( PHYSDEV dev, INT x, INT y ) DECLSPEC_HIDDEN; extern INT CDECL MFDRV_OffsetClipRgn( PHYSDEV dev, INT x, INT y ) DECLSPEC_HIDDEN;
extern INT CDECL MFDRV_OffsetViewportOrg( PHYSDEV dev, INT x, INT y ) DECLSPEC_HIDDEN; extern BOOL CDECL MFDRV_OffsetViewportOrgEx( PHYSDEV dev, INT x, INT y, POINT *pt ) DECLSPEC_HIDDEN;
extern INT CDECL MFDRV_OffsetWindowOrg( PHYSDEV dev, INT x, INT y ) DECLSPEC_HIDDEN; extern BOOL CDECL MFDRV_OffsetWindowOrgEx( PHYSDEV dev, INT x, INT y, POINT *pt ) DECLSPEC_HIDDEN;
extern BOOL CDECL MFDRV_PaintRgn( PHYSDEV dev, HRGN hrgn ) DECLSPEC_HIDDEN; extern BOOL CDECL MFDRV_PaintRgn( PHYSDEV dev, HRGN hrgn ) DECLSPEC_HIDDEN;
extern BOOL CDECL MFDRV_PatBlt( PHYSDEV dev, INT left, INT top, INT width, INT height, extern BOOL CDECL MFDRV_PatBlt( PHYSDEV dev, INT left, INT top, INT width, INT height,
DWORD rop ) DECLSPEC_HIDDEN; DWORD rop ) DECLSPEC_HIDDEN;
@ -113,10 +113,10 @@ extern BOOL CDECL MFDRV_RoundRect( PHYSDEV dev, INT left, INT top,
INT right, INT bottom, INT ell_width, INT right, INT bottom, INT ell_width,
INT ell_height ) DECLSPEC_HIDDEN; INT ell_height ) DECLSPEC_HIDDEN;
extern INT CDECL MFDRV_SaveDC( PHYSDEV dev ) DECLSPEC_HIDDEN; extern INT CDECL MFDRV_SaveDC( PHYSDEV dev ) DECLSPEC_HIDDEN;
extern INT CDECL MFDRV_ScaleViewportExt( PHYSDEV dev, INT xNum, INT xDenom, INT yNum, extern BOOL CDECL MFDRV_ScaleViewportExtEx( PHYSDEV dev, INT xNum, INT xDenom, INT yNum,
INT yDenom ) DECLSPEC_HIDDEN; INT yDenom, SIZE *size ) DECLSPEC_HIDDEN;
extern INT CDECL MFDRV_ScaleWindowExt( PHYSDEV dev, INT xNum, INT xDenom, INT yNum, extern BOOL CDECL MFDRV_ScaleWindowExtEx( PHYSDEV dev, INT xNum, INT xDenom, INT yNum,
INT yDenom ) DECLSPEC_HIDDEN; INT yDenom, SIZE *size ) DECLSPEC_HIDDEN;
extern HBITMAP CDECL MFDRV_SelectBitmap( PHYSDEV dev, HBITMAP handle ) DECLSPEC_HIDDEN; extern HBITMAP CDECL MFDRV_SelectBitmap( PHYSDEV dev, HBITMAP handle ) DECLSPEC_HIDDEN;
extern HBRUSH CDECL MFDRV_SelectBrush( PHYSDEV dev, HBRUSH handle ) DECLSPEC_HIDDEN; extern HBRUSH CDECL MFDRV_SelectBrush( PHYSDEV dev, HBRUSH handle ) DECLSPEC_HIDDEN;
extern BOOL CDECL MFDRV_SelectClipPath( PHYSDEV dev, INT iMode ) DECLSPEC_HIDDEN; extern BOOL CDECL MFDRV_SelectClipPath( PHYSDEV dev, INT iMode ) DECLSPEC_HIDDEN;
@ -137,10 +137,10 @@ extern UINT CDECL MFDRV_SetTextAlign( PHYSDEV dev, UINT align ) DECLSPEC_HIDDEN
extern INT CDECL MFDRV_SetTextCharacterExtra( PHYSDEV dev, INT extra ) DECLSPEC_HIDDEN; extern INT CDECL MFDRV_SetTextCharacterExtra( PHYSDEV dev, INT extra ) DECLSPEC_HIDDEN;
extern COLORREF CDECL MFDRV_SetTextColor( PHYSDEV dev, COLORREF color ) DECLSPEC_HIDDEN; extern COLORREF CDECL MFDRV_SetTextColor( PHYSDEV dev, COLORREF color ) DECLSPEC_HIDDEN;
extern INT CDECL MFDRV_SetTextJustification( PHYSDEV dev, INT extra, INT breaks ) DECLSPEC_HIDDEN; extern INT CDECL MFDRV_SetTextJustification( PHYSDEV dev, INT extra, INT breaks ) DECLSPEC_HIDDEN;
extern INT CDECL MFDRV_SetViewportExt( PHYSDEV dev, INT x, INT y ) DECLSPEC_HIDDEN; extern BOOL CDECL MFDRV_SetViewportExtEx( PHYSDEV dev, INT x, INT y, SIZE *size ) DECLSPEC_HIDDEN;
extern INT CDECL MFDRV_SetViewportOrg( PHYSDEV dev, INT x, INT y ) DECLSPEC_HIDDEN; extern BOOL CDECL MFDRV_SetViewportOrgEx( PHYSDEV dev, INT x, INT y, POINT *pt ) DECLSPEC_HIDDEN;
extern INT CDECL MFDRV_SetWindowExt( PHYSDEV dev, INT x, INT y ) DECLSPEC_HIDDEN; extern BOOL CDECL MFDRV_SetWindowExtEx( PHYSDEV dev, INT x, INT y, SIZE *size ) DECLSPEC_HIDDEN;
extern INT CDECL MFDRV_SetWindowOrg( PHYSDEV dev, INT x, INT y ) DECLSPEC_HIDDEN; extern BOOL CDECL MFDRV_SetWindowOrgEx( PHYSDEV dev, INT x, INT y, POINT *pt ) DECLSPEC_HIDDEN;
extern BOOL CDECL MFDRV_StretchBlt( PHYSDEV devDst, INT xDst, INT yDst, INT widthDst, extern BOOL CDECL MFDRV_StretchBlt( PHYSDEV devDst, INT xDst, INT yDst, INT widthDst,
INT heightDst, PHYSDEV devSrc, INT xSrc, INT ySrc, INT heightDst, PHYSDEV devSrc, INT xSrc, INT ySrc,
INT widthSrc, INT heightSrc, DWORD rop ) DECLSPEC_HIDDEN; INT widthSrc, INT heightSrc, DWORD rop ) DECLSPEC_HIDDEN;

View File

@ -846,10 +846,18 @@ static void test_mf_SaveDC(void)
/* Need to write something to the emf, otherwise Windows won't play it back */ /* Need to write something to the emf, otherwise Windows won't play it back */
LineTo(hdcMetafile, 150, 150); LineTo(hdcMetafile, 150, 150);
SetWindowOrgEx(hdcMetafile, 0, 0, NULL); pt.x = pt.y = 5555;
SetViewportOrgEx(hdcMetafile, 0, 0, NULL); SetWindowOrgEx(hdcMetafile, 0, 0, &pt);
SetWindowExtEx(hdcMetafile, 110, 110, NULL ); ok( pt.x == 5555 && pt.y == 5555, "wrong origin %d,%d\n", pt.x, pt.y);
SetViewportExtEx(hdcMetafile, 120, 120, NULL ); pt.x = pt.y = 5555;
SetViewportOrgEx(hdcMetafile, 0, 0, &pt);
ok( pt.x == 5555 && pt.y == 5555, "wrong origin %d,%d\n", pt.x, pt.y);
size.cx = size.cy = 5555;
SetWindowExtEx(hdcMetafile, 110, 110, &size );
ok( size.cx == 5555 && size.cy == 5555, "wrong size %d,%d\n", size.cx, size.cy );
size.cx = size.cy = 5555;
SetViewportExtEx(hdcMetafile, 120, 120, &size );
ok( size.cx == 5555 && size.cy == 5555, "wrong size %d,%d\n", size.cx, size.cy );
/* Force Win9x to update DC state */ /* Force Win9x to update DC state */
SetPixelV(hdcMetafile, 50, 50, 0); SetPixelV(hdcMetafile, 50, 50, 0);