3 /* Maximum extend of coordinate space */
4 #define MIN_COORD (INT_MIN / 16)
5 #define MAX_COORD (INT_MAX / 16)
7 #define IntLPtoDP(pdc, ppt, count) \
8 DC_vUpdateWorldToDevice(pdc); \
9 DC_vXformWorldToDevice(pdc, count, (PPOINTL)(ppt), (PPOINTL)(ppt));
10 #define CoordLPtoDP(pdc, ppt) \
11 DC_vXformWorldToDevice(pdc, 1, (PPOINTL)(ppt), (PPOINTL)(ppt));
12 #define IntDPtoLP(pdc, ppt, count) \
13 DC_vUpdateDeviceToWorld(pdc); \
14 DC_vXformDeviceToWorld(pdc, count, (PPOINTL)(ppt), (PPOINTL)(ppt));
15 #define CoordDPtoLP(pdc, ppt) \
16 DC_vXformDeviceToWorld(pdc, 1, (PPOINTL)(ppt), (PPOINTL)(ppt));
18 #define XForm2MatrixS(m, x) XFormToMatrix(m, (XFORML*)x)
19 #define MatrixS2XForm(x, m) MatrixToXForm((XFORML*)x, m)
28 XFORMOBJ_vInit(&xo
, pmx
);
29 XFORMOBJ_iSetXform(&xo
, pxform
);
39 XFORMOBJ_vInit(&xo
, (MATRIX
*)pmx
);
40 XFORMOBJ_iGetXform(&xo
, pxform
);
47 const XFORML
*pxformSource
)
52 XFORMOBJ_vInit(&xo
, &mx
);
53 XFORMOBJ_iSetXform(&xo
, pxformSource
);
54 XFORMOBJ_iInverse(&xo
, &xo
);
55 XFORMOBJ_iGetXform(&xo
, pxformDest
);
60 DC_vFixIsotropicMapping(PDC pdc
);
64 DC_vUpdateWorldToDevice(PDC pdc
);
68 DC_vUpdateDeviceToWorld(PDC pdc
);
72 DC_pszlViewportExt(PDC pdc
)
74 PDC_ATTR pdcattr
= pdc
->pdcattr
;
76 /* Check if we need isotropic fixup */
77 if ((pdcattr
->flXform
& PAGE_EXTENTS_CHANGED
) &&
78 (pdcattr
->iMapMode
== MM_ISOTROPIC
))
80 /* Fixup viewport extension */
81 DC_vFixIsotropicMapping(pdc
);
84 return &pdcattr
->szlViewportExt
;
89 DC_pmxWorldToPage(PDC pdc
)
91 return &pdc
->pdcattr
->mxWorldToPage
;
96 DC_pmxWorldToDevice(PDC pdc
)
98 /* Check if world or page xform was changed */
99 if (pdc
->pdcattr
->flXform
& (PAGE_XLATE_CHANGED
|PAGE_EXTENTS_CHANGED
|WORLD_XFORM_CHANGED
))
101 /* Update the world-to-device xform */
102 DC_vUpdateWorldToDevice(pdc
);
105 return &pdc
->pdcattr
->mxWorldToDevice
;
110 DC_pmxDeviceToWorld(PDC pdc
)
112 /* Check if the device-to-world xform is invalid */
113 if (pdc
->pdcattr
->flXform
& DEVICE_TO_WORLD_INVALID
)
115 /* Update the world-to-device xform */
116 DC_vUpdateDeviceToWorld(pdc
);
119 return &pdc
->pdcattr
->mxDeviceToWorld
;
124 DC_vXformDeviceToWorld(
127 OUT PPOINTL pptlDest
,
128 IN PPOINTL pptlSource
)
133 pmx
= DC_pmxDeviceToWorld(pdc
);
134 if (!MX_IsInvertible(pmx
))
137 XFORMOBJ_vInit(&xo
, pmx
);
138 XFORMOBJ_bApplyXform(&xo
, XF_LTOL
, cNumPoints
, pptlDest
, pptlSource
);
143 DC_vXformWorldToDevice(
146 OUT PPOINTL pptlDest
,
147 IN PPOINTL pptlSource
)
152 pmx
= DC_pmxWorldToDevice(pdc
);
153 XFORMOBJ_vInit(&xo
, pmx
);
154 XFORMOBJ_bApplyXform(&xo
, XF_LTOL
, cNumPoints
, pptlDest
, pptlSource
);
159 GreModifyWorldTransform(
161 const XFORML
*pXForm
,
164 VOID FASTCALL
IntMirrorWindowOrg(PDC
);
165 int APIENTRY
IntGdiSetMapMode(PDC
, int);
166 BOOL FASTCALL
GreLPtoDP(HDC
, LPPOINT
, INT
);
167 BOOL FASTCALL
GreDPtoLP(HDC
, LPPOINT
, INT
);
168 BOOL APIENTRY
GreGetDCPoint(HDC
,UINT
,PPOINTL
);
169 BOOL WINAPI
GreGetWindowExtEx( _In_ HDC hdc
, _Out_ LPSIZE lpSize
);
170 BOOL WINAPI
GreGetViewportExtEx( _In_ HDC hdc
, _Out_ LPSIZE lpSize
);
171 BOOL FASTCALL
GreSetViewportOrgEx(HDC
,int,int,LPPOINT
);
172 BOOL WINAPI
GreGetDCOrgEx(_In_ HDC
, _Out_ PPOINTL
, _Out_ PRECTL
);
173 BOOL WINAPI
GreSetDCOrg(_In_ HDC
, _In_ LONG
, _In_ LONG
, _In_opt_ PRECTL
);