|
|
/******************************Module*Header*******************************\
* Module Name: xform.c * * Created: 01-Dec-1994 09:58:41 * Author: Eric Kutter [erick] * * Copyright (c) 1993-1999 Microsoft Corporation * \**************************************************************************/ #include "precomp.h"
#pragma hdrstop
/******************************Macro***************************************\
* * Transform macros * * * * * * * * History: * * 16-Jan-1996 -by- Mark Enstrom [marke] * \**************************************************************************/
#define DCA_PAGE_EXTENTS_CHANGED(pdcattr) \
{ \ CLEAR_CACHED_TEXT(pdcattr); \ pdcattr->flXform |= (INVALIDATE_ATTRIBUTES | \ PAGE_EXTENTS_CHANGED | \ DEVICE_TO_WORLD_INVALID); \ }
#define DCA_PAGE_XLATE_CHANGED(pdcattr) \
{ \ pdcattr->flXform |= (PAGE_XLATE_CHANGED | \ DEVICE_TO_WORLD_INVALID); \ }
#define GET_LOGICAL_WINDOW_ORG_X(pdcattr, pptl) \
{ \ pptl->x = pdcattr->lWindowOrgx; \ }
#define SET_LOGICAL_WINDOW_ORG_X(pdcattr, x) \
{ \ pdcattr->lWindowOrgx = x; \ }
#define MIRROR_WINDOW_ORG(hdc, pdcAttr) \
{ \ if (pdcAttr->dwLayout & LAYOUT_RTL) { \ NtGdiMirrorWindowOrg(hdc); \ } \ }
#define MIRROR_X(pdcAttr, x) \
{ \ if (pdcAttr->dwLayout & LAYOUT_RTL) \ x = -x; \ }
DWORD APIENTRY SetLayoutWidth(HDC hdc, LONG wox, DWORD dwLayout) {
DWORD dwRet = GDI_ERROR;
FIXUP_HANDLE(hdc); if(!IS_ALTDC_TYPE(hdc)) { PDC_ATTR pdcattr; PSHARED_GET_VALIDATE((PVOID)pdcattr,hdc,DC_TYPE);
if (pdcattr) { dwRet = NtGdiSetLayout(hdc, wox, dwLayout); } else { GdiSetLastError(ERROR_INVALID_PARAMETER); } }
return dwRet; }
DWORD APIENTRY SetLayout(HDC hdc, DWORD dwLayout) { PDC_ATTR pdcattr; DWORD dwRet = GDI_ERROR;
FIXUP_HANDLE(hdc); if(IS_ALTDC_TYPE(hdc)) { PLDC pldc;
if (IS_METADC16_TYPE(hdc)) return(MF16_RecordParmsD(hdc,dwLayout,META_SETLAYOUT));
DC_PLDC(hdc,pldc,dwRet)
if (pldc->iType == LO_METADC) { if (!MF_SetD(hdc,dwLayout,EMR_SETLAYOUT)) { return dwRet; } } }
PSHARED_GET_VALIDATE((PVOID)pdcattr,hdc,DC_TYPE);
if (pdcattr) { dwRet = NtGdiSetLayout(hdc, -1, dwLayout); } else { GdiSetLastError(ERROR_INVALID_PARAMETER); }
return dwRet; }
DWORD APIENTRY GetLayout(HDC hdc) { DWORD dwRet = GDI_ERROR;
FIXUP_HANDLE(hdc);
if(!IS_METADC16_TYPE(hdc)) { PDC_ATTR pdcattr; PSHARED_GET_VALIDATE((PVOID)pdcattr,hdc,DC_TYPE);
if (pdcattr) { dwRet = pdcattr->dwLayout; } else { GdiSetLastError(ERROR_INVALID_PARAMETER); } } return dwRet; } /******************************Public*Routine******************************\
* GetMapMode * * * * Client side stub. * * * * Fri 07-Jun-1991 18:01:50 -by- Charles Whitmer [chuckwh] * * Wrote it. * \**************************************************************************/
int APIENTRY GetMapMode(HDC hdc) { int iRet = 0;
FIXUP_HANDLE(hdc);
if (!IS_METADC16_TYPE(hdc)) { PDC_ATTR pdcattr; PSHARED_GET_VALIDATE((PVOID)pdcattr,hdc,DC_TYPE);
if (pdcattr) { iRet = pdcattr->iMapMode; } else { GdiSetLastError(ERROR_INVALID_PARAMETER); } }
return(iRet); }
/******************************Public*Routine******************************\
* SetMapMode * * * * Client side stub. * * * * History: * * Thu 06-Jun-1991 23:10:01 -by- Charles Whitmer [chuckwh] * * Wrote it. * * * * Mon 22-May-1993 -by- Paul Butzi * * Converted to Size measured in micrometers. * \**************************************************************************/
int META WINAPI SetMapMode(HDC hdc,int iMode) { int iRet = 0;
FIXUP_HANDLE(hdc);
if (IS_METADC16_TYPE(hdc)) { iRet = MF16_RecordParms2(hdc,iMode,META_SETMAPMODE); } else { PDC_ATTR pdcattr; PSHARED_GET_VALIDATE((PVOID)pdcattr,hdc,DC_TYPE);
if (pdcattr) {
iRet = pdcattr->iMapMode;
if ((iMode != pdcattr->iMapMode) || (iMode == MM_ISOTROPIC)) {
CLEAR_CACHED_TEXT(pdcattr);
iRet =(int) GetAndSetDCDWord( hdc, GASDDW_MAPMODE, iMode, EMR_SETMAPMODE, 0, 0); } } else { GdiSetLastError(ERROR_INVALID_PARAMETER); } }
return(iRet); }
/******************************Public*Function*****************************\
* GetWindowExtEx * GetViewportOrgEx * GetWindowOrgEx * * Client side stub. * * History: * * 11-Jan-1996 -by- Mark Enstrom [marke] * User dcattr for ext and org data * 09-Dec-1992 -by- Wendy Wu [wendywu] * Wrote it. \**************************************************************************/
BOOL APIENTRY GetViewportExtEx(HDC hdc,LPSIZE psizl) { BOOL bRet = FALSE; PDC_ATTR pdcattr;
FIXUP_HANDLE(hdc);
PSHARED_GET_VALIDATE((PVOID)pdcattr,hdc,DC_TYPE);
if (pdcattr) { if (psizl != (PSIZEL) NULL) { if ((pdcattr->flXform & PAGE_EXTENTS_CHANGED) && (pdcattr->iMapMode == MM_ISOTROPIC)) { NtGdiGetDCPoint (hdc, DCPT_VPEXT, (PPOINTL)psizl); } else { *psizl = pdcattr->szlViewportExt; }
bRet = TRUE; } }
return(bRet);
}
BOOL APIENTRY GetWindowExtEx(HDC hdc,LPSIZE psizl) { BOOL bRet = FALSE; PDC_ATTR pdcattr;
FIXUP_HANDLE(hdc);
PSHARED_GET_VALIDATE((PVOID)pdcattr,hdc,DC_TYPE);
if (pdcattr) { if (psizl != (PSIZEL) NULL) { *psizl = pdcattr->szlWindowExt; MIRROR_X(pdcattr, psizl->cx); bRet = TRUE; } }
return(bRet);
}
BOOL APIENTRY GetViewportOrgEx(HDC hdc,LPPOINT pptl) { BOOL bRet = FALSE; PDC_ATTR pdcattr;
FIXUP_HANDLE(hdc); //
// get DCATTR
//
PSHARED_GET_VALIDATE((PVOID)pdcattr,hdc,DC_TYPE);
if (pdcattr) {
if (pptl != (LPPOINT) NULL) { *pptl = *((LPPOINT)&pdcattr->ptlViewportOrg); MIRROR_X(pdcattr, pptl->x); bRet = TRUE; } }
return(bRet);
}
BOOL APIENTRY GetWindowOrgEx(HDC hdc,LPPOINT pptl) { BOOL bRet = FALSE; PDC_ATTR pdcattr;
FIXUP_HANDLE(hdc);
//
// get DCATTR
//
PSHARED_GET_VALIDATE((PVOID)pdcattr,hdc,DC_TYPE);
if (pdcattr) {
if (pptl != (LPPOINT) NULL) { *pptl = *((LPPOINT)&pdcattr->ptlWindowOrg); GET_LOGICAL_WINDOW_ORG_X(pdcattr, pptl); bRet = TRUE; } }
return(bRet);
}
/******************************Public*Routine******************************\
* SetViewportExtEx * * * * Client side stub. * * * * History: * * Thu 06-Jun-1991 23:10:01 -by- Charles Whitmer [chuckwh] * * Wrote it. * \**************************************************************************/
BOOL META WINAPI SetViewportExtEx(HDC hdc,int x,int y,LPSIZE psizl) { BOOL bRet = FALSE; PDC_ATTR pdcattr;
FIXUP_HANDLE(hdc);
if (IS_ALTDC_TYPE(hdc)) { PLDC pldc;
if (IS_METADC16_TYPE(hdc)) return(MF16_RecordParms3(hdc,x,y,META_SETVIEWPORTEXT));
DC_PLDC(hdc,pldc,bRet);
if (pldc->iType == LO_METADC) { if (!MF_SetViewportExtEx(hdc,x,y)) return(bRet); } }
PSHARED_GET_VALIDATE((PVOID)pdcattr,hdc,DC_TYPE);
if (pdcattr) { //
// if psizl is supplied, return old viewport ext
//
if (psizl != (PSIZEL) NULL) { *psizl = pdcattr->szlViewportExt; }
//
// if fixed scale and new exts equal old exts then no work needs
// to be done
//
if ( (pdcattr->iMapMode <= MM_MAX_FIXEDSCALE) || ( (pdcattr->szlViewportExt.cx == x) && (pdcattr->szlViewportExt.cy == y) ) ) { return(TRUE); }
//
// Can't set to zero extents.
//
if ((x == 0) || (y == 0)) { return(TRUE); }
//
// update extents and flags
//
CHECK_AND_FLUSH(hdc, pdcattr);
pdcattr->szlViewportExt.cx = x; pdcattr->szlViewportExt.cy = y; MIRROR_WINDOW_ORG(hdc, pdcattr);
DCA_PAGE_EXTENTS_CHANGED(pdcattr);
return(TRUE); } else { GdiSetLastError(ERROR_INVALID_PARAMETER); }
return(bRet); }
/******************************Public*Routine******************************\
* SetViewportOrgEx * * * * Client side stub. * * * * History: * * Thu 06-Jun-1991 23:10:01 -by- Charles Whitmer [chuckwh] * * Wrote it. * \**************************************************************************/
BOOL META WINAPI SetViewportOrgEx(HDC hdc,int x,int y,LPPOINT pptl) { POINT pt; BOOL bRet = FALSE; PDC_ATTR pdcattr;
FIXUP_HANDLE(hdc);
if (IS_ALTDC_TYPE(hdc)) { PLDC pldc;
if (IS_METADC16_TYPE(hdc)) return(MF16_RecordParms3(hdc,x,y,META_SETVIEWPORTORG));
DC_PLDC(hdc,pldc,bRet);
if (pldc->iType == LO_METADC) { if (!MF_SetViewportOrgEx(hdc,x,y)) return(bRet); } }
//
// get DCATTR
//
PSHARED_GET_VALIDATE((PVOID)pdcattr,hdc,DC_TYPE);
if (pdcattr) { bRet = TRUE; MIRROR_X(pdcattr, x);
if (pptl != (LPPOINT) NULL) { *pptl = *((LPPOINT)&pdcattr->ptlViewportOrg); MIRROR_X(pdcattr, pptl->x); }
if (! ((pdcattr->ptlViewportOrg.x == x) && (pdcattr->ptlViewportOrg.y == y)) ) { pdcattr->ptlViewportOrg.x = x; pdcattr->ptlViewportOrg.y = y;
DCA_PAGE_XLATE_CHANGED(pdcattr); } }
return(bRet); }
/******************************Public*Routine******************************\
* SetWindowExtEx * * * * Client side stub. * * * * History: * * Thu 06-Jun-1991 23:10:01 -by- Charles Whitmer [chuckwh] * * Wrote it. * \**************************************************************************/
BOOL META WINAPI SetWindowExtEx(HDC hdc,int x,int y,LPSIZE psizl) { BOOL bRet = FALSE; PDC_ATTR pdcattr;
#if DBG_XFORM
DbgPrint("SetWindowExtEx: hdc = %p, (%lx, %lx)\n", hdc, x, y); #endif
FIXUP_HANDLE(hdc);
if (IS_ALTDC_TYPE(hdc)) { PLDC pldc;
if (IS_METADC16_TYPE(hdc)) return(MF16_RecordParms3(hdc,x,y,META_SETWINDOWEXT));
DC_PLDC(hdc,pldc,bRet);
if (pldc->iType == LO_METADC) { if (!MF_SetWindowExtEx(hdc,x,y)) return(bRet); } }
PSHARED_GET_VALIDATE((PVOID)pdcattr,hdc,DC_TYPE);
if (pdcattr) { bRet = TRUE;
//
// Get old extents and return if either of these is true
// 1) Fixed scale mapping mode. (Can't change extent)
// 2) Set to the same size.
//
MIRROR_X(pdcattr, x);
if (psizl != (PSIZEL) NULL) { *psizl = pdcattr->szlWindowExt; MIRROR_X(pdcattr, psizl->cx); }
if ( (pdcattr->iMapMode <= MM_MAX_FIXEDSCALE) || ((pdcattr->szlWindowExt.cx == x) && (pdcattr->szlWindowExt.cy == y)) ) { return(TRUE); }
//
// Can't set to zero.
//
if (x == 0 || y == 0) { return(FALSE); }
CHECK_AND_FLUSH(hdc,pdcattr);
pdcattr->szlWindowExt.cx = x; pdcattr->szlWindowExt.cy = y; MIRROR_WINDOW_ORG(hdc, pdcattr);
DCA_PAGE_EXTENTS_CHANGED(pdcattr); } else { GdiSetLastError(ERROR_INVALID_PARAMETER); }
return(bRet); }
/******************************Public*Routine******************************\
* SetWindowOrgEx * * * * Client side stub. * * * * History: * * Thu 06-Jun-1991 23:10:01 -by- Charles Whitmer [chuckwh] * * Wrote it. * \**************************************************************************/
BOOL META WINAPI SetWindowOrgEx(HDC hdc,int x,int y,LPPOINT pptl) { BOOL bRet = FALSE; PDC_ATTR pdcattr;
FIXUP_HANDLE(hdc);
if (IS_ALTDC_TYPE(hdc)) { PLDC pldc;
if (IS_METADC16_TYPE(hdc)) return(MF16_RecordParms3(hdc,x,y,META_SETWINDOWORG));
DC_PLDC(hdc,pldc,bRet);
if (pldc->iType == LO_METADC) { if (!MF_SetWindowOrgEx(hdc,x,y)) return(bRet); } }
PSHARED_GET_VALIDATE((PVOID)pdcattr,hdc,DC_TYPE);
if (pdcattr) {
bRet = TRUE;
if (pptl != (LPPOINT) NULL) { *pptl = *((LPPOINT)&pdcattr->ptlWindowOrg); GET_LOGICAL_WINDOW_ORG_X(pdcattr, pptl); }
if ( !((pdcattr->ptlWindowOrg.x == x) && (pdcattr->ptlWindowOrg.y == y)) ) { CHECK_AND_FLUSH(hdc,pdcattr);
pdcattr->ptlWindowOrg.x = x; pdcattr->ptlWindowOrg.y = y; SET_LOGICAL_WINDOW_ORG_X(pdcattr, x); MIRROR_WINDOW_ORG(hdc, pdcattr);
DCA_PAGE_XLATE_CHANGED(pdcattr); } }
return(bRet); }
/******************************Public*Routine******************************\
* OffsetViewportOrgEx * * * * Client side stub. * * * * History: * * Thu 06-Jun-1991 23:10:01 -by- Charles Whitmer [chuckwh] * * Wrote it. * \**************************************************************************/
BOOL META WINAPI OffsetViewportOrgEx(HDC hdc,int x,int y,LPPOINT pptl) { POINT pt; BOOL bRet = FALSE; PDC_ATTR pdcattr;
FIXUP_HANDLE(hdc);
if (IS_ALTDC_TYPE(hdc)) { PLDC pldc;
if (IS_METADC16_TYPE(hdc)) return(MF16_RecordParms3(hdc,x,y,META_OFFSETVIEWPORTORG));
DC_PLDC(hdc,pldc,bRet);
if (pldc->iType == LO_METADC) { if (!MF_OffsetViewportOrgEx(hdc,x,y)) return(bRet); } }
//
// get DCATTR
//
PSHARED_GET_VALIDATE((PVOID)pdcattr,hdc,DC_TYPE);
if (pdcattr) { bRet = TRUE; MIRROR_X(pdcattr, x);
if (pptl != (LPPOINT) NULL) { *pptl = *((LPPOINT)&pdcattr->ptlViewportOrg); MIRROR_X(pdcattr, pptl->x); }
if ((x != 0) || (y != 0)) { CHECK_AND_FLUSH(hdc, pdcattr);
pdcattr->ptlViewportOrg.x+=x; pdcattr->ptlViewportOrg.y+=y;
DCA_PAGE_XLATE_CHANGED(pdcattr); }
}
return(bRet); }
/******************************Public*Routine******************************\
* OffsetWindowOrgEx * * * * Client side stub. * * * * History: * * Thu 06-Jun-1991 23:10:01 -by- Charles Whitmer [chuckwh] * * Wrote it. * \**************************************************************************/
BOOL META WINAPI OffsetWindowOrgEx(HDC hdc,int x,int y,LPPOINT pptl) { BOOL bRet = FALSE; PDC_ATTR pdcattr;
FIXUP_HANDLE(hdc);
if (IS_ALTDC_TYPE(hdc)) { PLDC pldc;
if (IS_METADC16_TYPE(hdc)) return(MF16_RecordParms3(hdc,x,y,META_OFFSETWINDOWORG));
DC_PLDC(hdc,pldc,bRet);
if (pldc->iType == LO_METADC) { if (!MF_OffsetWindowOrgEx(hdc,x,y)) return(bRet); } }
PSHARED_GET_VALIDATE((PVOID)pdcattr,hdc,DC_TYPE);
if (pdcattr) {
bRet = TRUE;
if (pptl != (LPPOINT) NULL) { *pptl = *((LPPOINT)&pdcattr->ptlWindowOrg); GET_LOGICAL_WINDOW_ORG_X(pdcattr, pptl); }
if ((x != 0) || (y != 0)) { CHECK_AND_FLUSH(hdc,pdcattr);
pdcattr->ptlWindowOrg.x+=x; pdcattr->ptlWindowOrg.y+=y; pdcattr->lWindowOrgx +=x; DCA_PAGE_XLATE_CHANGED(pdcattr); } }
return(bRet); }
/******************************Public*Routine******************************\
* * int SetGraphicsMode(HDC hdc,int iMode) * * the same as SetGraphicsMode, except it does not do any checks * * History: * 3-Nov-1994 -by- Lingyun Wang [lingyunw] * moved client side attr to server side * 02-Dec-1992 -by- Bodin Dresevic [BodinD] * Wrote it. \**************************************************************************/
int META APIENTRY SetGraphicsMode(HDC hdc,int iMode) { int iRet = 0; PDC_ATTR pDcAttr;
FIXUP_HANDLE(hdc);
PSHARED_GET_VALIDATE((PVOID)pDcAttr,hdc,DC_TYPE);
if (pDcAttr && ((iMode == GM_COMPATIBLE) || (iMode == GM_ADVANCED)))
{ if (iMode == pDcAttr->iGraphicsMode) return iMode;
CLEAR_CACHED_TEXT(pDcAttr);
iRet = pDcAttr->iGraphicsMode;
CHECK_AND_FLUSH(hdc,pDcAttr);
pDcAttr->iGraphicsMode = iMode;
} else { GdiSetLastError(ERROR_INVALID_PARAMETER); }
return(iRet); }
/******************************Public*Routine******************************\
* ScaleViewportExtEx * * * * Client side stub. * * * * History: * * Thu 06-Jun-1991 23:10:01 -by- Charles Whitmer [chuckwh] * * Wrote it. * \**************************************************************************/
BOOL META WINAPI ScaleViewportExtEx ( HDC hdc, int xNum, int xDenom, int yNum, int yDenom, LPSIZE psizl ) { BOOL bRet = FALSE; PDC_ATTR pDcAttr;
FIXUP_HANDLE(hdc);
if (IS_ALTDC_TYPE(hdc)) { PLDC pldc;
if (IS_METADC16_TYPE(hdc)) return (MF16_RecordParms5(hdc,xNum,xDenom,yNum, yDenom,META_SCALEVIEWPORTEXT));
DC_PLDC(hdc,pldc,bRet);
if (pldc->iType == LO_METADC) { if (!MF_SetDDDD(hdc,(DWORD)xNum,(DWORD)xDenom, (DWORD)yNum,(DWORD)yDenom,EMR_SCALEVIEWPORTEXTEX)) return(bRet); } }
PSHARED_GET_VALIDATE((PVOID)pDcAttr,hdc,DC_TYPE);
if (pDcAttr) { CLEAR_CACHED_TEXT(pDcAttr); bRet = NtGdiScaleViewportExtEx(hdc,xNum,xDenom,yNum,yDenom,psizl); } else { GdiSetLastError(ERROR_INVALID_PARAMETER); }
return(bRet); }
/******************************Public*Routine******************************\
* ScaleWindowExtEx * * * * Client side stub. * * * * History: * * Thu 06-Jun-1991 23:10:01 -by- Charles Whitmer [chuckwh] * * Wrote it. * \**************************************************************************/
BOOL META WINAPI ScaleWindowExtEx ( HDC hdc, int xNum, int xDenom, int yNum, int yDenom, LPSIZE psizl ) { BOOL bRet = FALSE;
PDC_ATTR pDcAttr;
FIXUP_HANDLE(hdc);
if (IS_ALTDC_TYPE(hdc)) { PLDC pldc;
if (IS_METADC16_TYPE(hdc)) return (MF16_RecordParms5(hdc,xNum,xDenom,yNum,yDenom,META_SCALEWINDOWEXT));
DC_PLDC(hdc,pldc,bRet);
if (pldc->iType == LO_METADC) { if (!MF_SetDDDD(hdc,(DWORD)xNum,(DWORD)xDenom,(DWORD)yNum,(DWORD)yDenom,EMR_SCALEWINDOWEXTEX)) return(bRet); } }
PSHARED_GET_VALIDATE((PVOID)pDcAttr,hdc,DC_TYPE);
if (pDcAttr) { CLEAR_CACHED_TEXT(pDcAttr); bRet = NtGdiScaleWindowExtEx(hdc,xNum,xDenom,yNum,yDenom,psizl); } else { GdiSetLastError(ERROR_INVALID_PARAMETER); }
return(bRet); }
/******************************Public*Routine******************************\
* SetVirtualResolution * * * * Client side stub. This is a private api for metafile component. * * * * Set the virtual resolution of the specified dc. * * The virtual resolution is used to compute transform matrix in metafiles. * * Otherwise, we will need to duplicate server transform code here. * * * * If the virtual units are all zeros, the default physical units are used. * * Otherwise, non of the units can be zero. * * * * Currently used by metafile component only. * * * * History: * * Tue Aug 27 16:55:36 1991 -by- Hock San Lee [hockl] * * Wrote it. * \**************************************************************************/
BOOL WINAPI SetVirtualResolution ( HDC hdc, int cxVirtualDevicePixel, // Width of the device in pels
int cyVirtualDevicePixel, // Height of the device in pels
int cxVirtualDeviceMm, // Width of the device in millimeters
int cyVirtualDeviceMm // Height of the device in millimeters
) { FIXUP_HANDLE(hdc);
return(NtGdiSetVirtualResolution( hdc, cxVirtualDevicePixel, cyVirtualDevicePixel, cxVirtualDeviceMm, cyVirtualDeviceMm )); }
/******************************Public*Routine******************************\
* SetSizeDevice * * * * Client side stub. This is a private api for metafile component. * * * * This is to fix rounding error in vMakeIso in xformgdi.cxx * * The cx/yVirtualDeviceMm set in SetVirtualResoltion could result in slight* * rounding error which will cause problem when accumulated * * * * Currently used by metafile component only. * * * * History: * * 5/17/99 -by- Lingyun Wang [lingyunw] * * Wrote it. * \**************************************************************************/ BOOL SetSizeDevice ( HDC hdc, int cxVirtualDevice, // Width of the device in micrometers
int cyVirtualDevice // Height of the device in micrometers
) { FIXUP_HANDLE(hdc);
return(NtGdiSetSizeDevice( hdc, cxVirtualDevice, cyVirtualDevice )); }
/******************************Public*Routine******************************\
* GetTransform() * * History: * 30-Nov-1994 -by- Eric Kutter [erick] * Wrote it. \**************************************************************************/
BOOL APIENTRY GetTransform( HDC hdc, ULONG iXform, PXFORM pxf) { FIXUP_HANDLE(hdc); return(NtGdiGetTransform(hdc,iXform,pxf)); }
/******************************Public*Routine******************************\
* GetWorldTransform * * * * Client side stub. * * * * Fri 07-Jun-1991 18:01:50 -by- Charles Whitmer [chuckwh] * * Wrote it. * \**************************************************************************/
BOOL APIENTRY GetWorldTransform(HDC hdc,LPXFORM pxform) { FIXUP_HANDLE(hdc); return(GetTransform(hdc,XFORM_WORLD_TO_PAGE,pxform)); }
/******************************Public*Routine******************************\
* ModifyTransform() * * History: * 30-Nov-1994 -by- Eric Kutter [erick] * Wrote it. \**************************************************************************/
BOOL META WINAPI ModifyWorldTransform( HDC hdc, CONST XFORM *pxf, DWORD iMode) { BOOL bRet = FALSE; PDC_ATTR pDcAttr;
FIXUP_HANDLE(hdc);
if (IS_ALTDC_TYPE(hdc)) { PLDC pldc;
if (IS_METADC16_TYPE(hdc)) return(FALSE);
DC_PLDC(hdc,pldc,bRet);
if (pldc->iType == LO_METADC) { if (((iMode == MWT_SET) && !MF_SetWorldTransform(hdc,pxf)) || !MF_ModifyWorldTransform(hdc,pxf,iMode)) { return(FALSE); } } }
PSHARED_GET_VALIDATE((PVOID)pDcAttr,hdc,DC_TYPE); if (pDcAttr) { if (pDcAttr->iGraphicsMode == GM_ADVANCED) { CLEAR_CACHED_TEXT(pDcAttr); bRet = NtGdiModifyWorldTransform(hdc,(PXFORM)pxf,iMode); } } else { GdiSetLastError(ERROR_INVALID_PARAMETER); } return(bRet); }
/******************************Public*Routine******************************\
* SetWorldTransform * * * * Client side stub. * * * * History: * * Thu 06-Jun-1991 23:10:01 -by- Charles Whitmer [chuckwh] * * Wrote it. * \**************************************************************************/
BOOL META WINAPI SetWorldTransform(HDC hdc, CONST XFORM * pxform) { return(ModifyWorldTransform(hdc,pxform,MWT_SET)); }
/******************************Public*Routine******************************\
* CombineTransform * * * * Client side stub. * * * * History: * * Thu 30-Jan-1992 16:10:09 -by- Wendy Wu [wendywu] * * Wrote it. * \**************************************************************************/
BOOL WINAPI CombineTransform ( LPXFORM pxformDst, CONST XFORM * pxformSrc1, CONST XFORM * pxformSrc2 ) { return(NtGdiCombineTransform(pxformDst,(PXFORM)pxformSrc1,(PXFORM)pxformSrc2)); }
|