2010-02-26 11:43:19 +00:00
|
|
|
#pragma once
|
2006-11-08 11:47:44 +00:00
|
|
|
|
2011-01-06 22:00:26 +00:00
|
|
|
#define IntLPtoDP(pdc, ppt, count) DC_vXformWorldToDevice(pdc, count, (PPOINTL)(ppt), (PPOINTL)(ppt));
|
|
|
|
#define CoordLPtoDP(pdc, ppt) DC_vXformWorldToDevice(pdc, 1, (PPOINTL)(ppt), (PPOINTL)(ppt));
|
|
|
|
#define IntDPtoLP(pdc, ppt, count) DC_vXformDeviceToWorld(pdc, count, (PPOINTL)(ppt), (PPOINTL)(ppt));
|
|
|
|
#define CoordDPtoLP(pdc, ppt) DC_vXformDeviceToWorld(pdc, 1, (PPOINTL)(ppt), (PPOINTL)(ppt));
|
|
|
|
|
|
|
|
#define XForm2MatrixS(m, x) XFormToMatrix(m, (XFORML*)x)
|
|
|
|
#define MatrixS2XForm(x, m) MatrixToXForm((XFORML*)x, m)
|
|
|
|
|
|
|
|
FORCEINLINE
|
|
|
|
void
|
|
|
|
XFormToMatrix(
|
|
|
|
MATRIX *pmx,
|
|
|
|
const XFORML *pxform)
|
|
|
|
{
|
|
|
|
XFORMOBJ xo;
|
|
|
|
XFORMOBJ_vInit(&xo, pmx);
|
|
|
|
XFORMOBJ_iSetXform(&xo, pxform);
|
|
|
|
}
|
|
|
|
|
|
|
|
FORCEINLINE
|
|
|
|
void
|
|
|
|
MatrixToXForm(
|
|
|
|
XFORML *pxform,
|
|
|
|
const MATRIX *pmx)
|
|
|
|
{
|
|
|
|
XFORMOBJ xo;
|
|
|
|
XFORMOBJ_vInit(&xo, (MATRIX*)pmx);
|
|
|
|
XFORMOBJ_iGetXform(&xo, pxform);
|
|
|
|
}
|
|
|
|
|
|
|
|
FORCEINLINE
|
|
|
|
void
|
|
|
|
InvertXform(
|
|
|
|
XFORML *pxformDest,
|
|
|
|
const XFORML *pxformSource)
|
|
|
|
{
|
|
|
|
XFORMOBJ xo;
|
|
|
|
MATRIX mx;
|
|
|
|
|
|
|
|
XFORMOBJ_vInit(&xo, &mx);
|
|
|
|
XFORMOBJ_iSetXform(&xo, pxformSource);
|
|
|
|
XFORMOBJ_iInverse(&xo, &xo);
|
|
|
|
XFORMOBJ_iGetXform(&xo, pxformDest);
|
|
|
|
}
|
|
|
|
|
2012-03-26 14:35:58 +00:00
|
|
|
VOID
|
|
|
|
FASTCALL
|
|
|
|
DC_vFixIsotropicMapping(PDC pdc);
|
|
|
|
|
|
|
|
VOID
|
|
|
|
FASTCALL
|
|
|
|
DC_vUpdateWorldToDevice(PDC pdc);
|
|
|
|
|
|
|
|
VOID
|
|
|
|
FASTCALL
|
|
|
|
DC_vUpdateDeviceToWorld(PDC pdc);
|
|
|
|
|
|
|
|
PSIZEL
|
|
|
|
FORCEINLINE
|
|
|
|
DC_pszlViewportExt(PDC pdc)
|
|
|
|
{
|
|
|
|
PDC_ATTR pdcattr = pdc->pdcattr;
|
|
|
|
|
|
|
|
/* Check if we need isotropic fixup */
|
|
|
|
if ((pdcattr->flXform & PAGE_EXTENTS_CHANGED) &&
|
|
|
|
(pdcattr->iMapMode == MM_ISOTROPIC))
|
|
|
|
{
|
|
|
|
/* Fixup viewport extension */
|
|
|
|
DC_vFixIsotropicMapping(pdc);
|
|
|
|
}
|
|
|
|
|
|
|
|
return &pdcattr->szlViewportExt;
|
|
|
|
}
|
|
|
|
|
|
|
|
PMATRIX
|
|
|
|
FORCEINLINE
|
|
|
|
DC_pmxWorldToPage(PDC pdc)
|
|
|
|
{
|
|
|
|
return &pdc->pdcattr->mxWorldToPage;
|
|
|
|
}
|
|
|
|
|
|
|
|
PMATRIX
|
|
|
|
FORCEINLINE
|
|
|
|
DC_pmxWorldToDevice(PDC pdc)
|
|
|
|
{
|
|
|
|
/* Check if world or page xform was changed */
|
|
|
|
if (pdc->pdcattr->flXform & (PAGE_XLATE_CHANGED|PAGE_EXTENTS_CHANGED|WORLD_XFORM_CHANGED))
|
|
|
|
{
|
|
|
|
/* Update the world-to-device xform */
|
|
|
|
DC_vUpdateWorldToDevice(pdc);
|
|
|
|
}
|
|
|
|
|
|
|
|
return &pdc->pdcattr->mxWorldToDevice;
|
|
|
|
}
|
|
|
|
|
|
|
|
PMATRIX
|
|
|
|
FORCEINLINE
|
|
|
|
DC_pmxDeviceToWorld(PDC pdc)
|
|
|
|
{
|
|
|
|
/* Check if the device-to-world xform is invalid */
|
|
|
|
if (pdc->pdcattr->flXform & DEVICE_TO_WORLD_INVALID)
|
|
|
|
{
|
|
|
|
/* Update the world-to-device xform */
|
|
|
|
DC_vUpdateDeviceToWorld(pdc);
|
|
|
|
}
|
|
|
|
|
|
|
|
return &pdc->pdcattr->mxDeviceToWorld;
|
|
|
|
}
|
|
|
|
|
|
|
|
VOID
|
2011-01-06 22:00:26 +00:00
|
|
|
FORCEINLINE
|
|
|
|
DC_vXformDeviceToWorld(
|
|
|
|
IN PDC pdc,
|
|
|
|
IN ULONG cNumPoints,
|
|
|
|
IN PPOINTL pptlDest,
|
|
|
|
IN PPOINTL pptlSource)
|
|
|
|
{
|
|
|
|
XFORMOBJ xo;
|
2012-03-26 14:35:58 +00:00
|
|
|
PMATRIX pmx;
|
2011-01-06 22:00:26 +00:00
|
|
|
|
2012-03-26 14:35:58 +00:00
|
|
|
pmx = DC_pmxDeviceToWorld(pdc);
|
|
|
|
XFORMOBJ_vInit(&xo, pmx);
|
2011-01-06 22:00:26 +00:00
|
|
|
XFORMOBJ_bApplyXform(&xo, XF_LTOL, cNumPoints, pptlDest, pptlSource);
|
|
|
|
}
|
|
|
|
|
2012-03-26 14:35:58 +00:00
|
|
|
VOID
|
2011-01-06 22:00:26 +00:00
|
|
|
FORCEINLINE
|
|
|
|
DC_vXformWorldToDevice(
|
|
|
|
IN PDC pdc,
|
|
|
|
IN ULONG cNumPoints,
|
|
|
|
IN PPOINTL pptlDest,
|
|
|
|
IN PPOINTL pptlSource)
|
|
|
|
{
|
|
|
|
XFORMOBJ xo;
|
2012-03-26 14:35:58 +00:00
|
|
|
PMATRIX pmx;
|
2011-01-06 22:00:26 +00:00
|
|
|
|
2012-03-26 14:35:58 +00:00
|
|
|
pmx = DC_pmxWorldToDevice(pdc);
|
|
|
|
XFORMOBJ_vInit(&xo, pmx);
|
2011-01-06 22:00:26 +00:00
|
|
|
XFORMOBJ_bApplyXform(&xo, XF_LTOL, cNumPoints, pptlDest, pptlSource);
|
|
|
|
}
|
2006-11-08 11:47:44 +00:00
|
|
|
|
|
|
|
BOOL
|
2012-03-26 14:35:58 +00:00
|
|
|
NTAPI
|
|
|
|
GreModifyWorldTransform(
|
|
|
|
PDC pdc,
|
|
|
|
const XFORML *pXForm,
|
|
|
|
DWORD dwMode);
|
2006-11-08 11:47:44 +00:00
|
|
|
|
2008-05-13 23:26:02 +00:00
|
|
|
VOID FASTCALL IntMirrorWindowOrg(PDC);
|
2012-07-29 11:20:05 +00:00
|
|
|
int APIENTRY IntGdiSetMapMode(PDC, int);
|
2012-05-03 18:55:38 +00:00
|
|
|
|