XFORMOBJ_UpdateAccel(
IN XFORMOBJ *pxo)
{
- PMATRIX pmx = (PMATRIX)pxo;
+ PMATRIX pmx = XFORMOBJ_pmx(pxo);
/* Copy Dx and Dy to FIX format */
pmx->fxDx = FLOATOBJ_GetFix(&pmx->efDx);
INTERNAL_CALL
XFORMOBJ_iSetXform(
OUT XFORMOBJ *pxo,
- IN XFORML * pxform)
+ IN const XFORML *pxform)
{
- PMATRIX pmx = (PMATRIX)pxo;
+ PMATRIX pmx = XFORMOBJ_pmx(pxo);
/* Check parameters */
if (!pxo || !pxform)
MATRIX mx;
PMATRIX pmx, pmx1, pmx2;
- pmx = (PMATRIX)pxo;
- pmx1 = (PMATRIX)pxo1;
- pmx2 = (PMATRIX)pxo2;
+ pmx = XFORMOBJ_pmx(pxo);
+ pmx1 =XFORMOBJ_pmx(pxo1);
+ pmx2 = XFORMOBJ_pmx(pxo2);
/* Do a 3 x 3 matrix multiplication with mx as destinantion */
MulAdd(&mx.efM11, &pmx1->efM11, &pmx2->efM11, &pmx1->efM12, &pmx2->efM21);
IN BOOL bLeftMultiply)
{
MATRIX mx;
- XFORMOBJ *pxo2 = (XFORMOBJ*)&mx;
+ XFORMOBJ xo2;
- XFORMOBJ_iSetXform(pxo2, pxform);
+ XFORMOBJ_vInit(&xo2, &mx);
+ XFORMOBJ_iSetXform(&xo2, pxform);
if (bLeftMultiply)
{
- return XFORMOBJ_iCombine(pxo, pxo2, pxo1);
+ return XFORMOBJ_iCombine(pxo, &xo2, pxo1);
}
else
{
- return XFORMOBJ_iCombine(pxo, pxo1, pxo2);
+ return XFORMOBJ_iCombine(pxo, pxo1, &xo2);
}
}
*/
ULONG
INTERNAL_CALL
-XFORMOBJ_Inverse(
+XFORMOBJ_iInverse(
OUT XFORMOBJ *pxoDst,
IN XFORMOBJ *pxoSrc)
{
PMATRIX pmxDst, pmxSrc;
FLOATOBJ foDet;
- pmxDst = (PMATRIX)pxoDst;
- pmxSrc = (PMATRIX)pxoSrc;
+ pmxDst = XFORMOBJ_pmx(pxoDst);
+ pmxSrc = XFORMOBJ_pmx(pxoSrc);
/* det = M11 * M22 - M12 * M21 */
MulSub(&foDet, &pmxSrc->efM11, &pmxSrc->efM22, &pmxSrc->efM12, &pmxSrc->efM21);
FLOATOBJ fo1, fo2;
FLONG flAccel;
- pmx = (PMATRIX)pxo;
- flAccel = pmx->flAccel & (MX_INTEGER|MX_SCALE|MX_IDENTITYSCALE);
+ pmx = XFORMOBJ_pmx(pxo);
+ flAccel = pmx->flAccel;
- switch (flAccel)
+ if ((flAccel & (MX_SCALE|MX_IDENTITYSCALE)) == (MX_SCALE|MX_IDENTITYSCALE))
{
- case (MX_SCALE | MX_IDENTITYSCALE):
- case (MX_SCALE | MX_IDENTITYSCALE | MX_INTEGER):
/* Identity transformation, nothing todo */
- break;
-
- case (MX_IDENTITYSCALE | MX_INTEGER):
+ }
+ else if (flAccel & MX_INTEGER)
+ {
+ if (flAccel & MX_IDENTITYSCALE)
+ {
/* 1-scale integer transform */
i = cPoints - 1;
do
pptOut[i].x = x;
}
while (--i >= 0);
- break;
-
- case (MX_SCALE | MX_INTEGER):
+ }
+ else if (flAccel & MX_SCALE)
+ {
/* Diagonal integer transform */
i = cPoints - 1;
do
pptOut[i].y = pptIn[i].y * FLOATOBJ_GetLong(&pmx->efM22);
}
while (--i >= 0);
- break;
-
- case (MX_INTEGER):
+ }
+ else
+ {
/* Full integer transform */
i = cPoints - 1;
do
pptOut[i].x = x;
}
while (--i >= 0);
- break;
-
- case (MX_IDENTITYSCALE):
+ }
+ }
+ else if (flAccel & MX_IDENTITYSCALE)
+ {
/* 1-scale transform */
i = cPoints - 1;
do
pptOut[i].y = pptIn[i].y + FLOATOBJ_GetLong(&fo2);
}
while (--i >= 0);
- break;
-
- case (MX_SCALE):
+ }
+ else if (flAccel & MX_SCALE)
+ {
/* Diagonal float transform */
i = cPoints - 1;
do
pptOut[i].y = FLOATOBJ_GetLong(&fo2);
}
while (--i >= 0);
- break;
-
- default:
+ }
+ else
+ {
/* Full float transform */
i = cPoints - 1;
do
pptOut[i].y = FLOATOBJ_GetLong(&fo2);
}
while (--i >= 0);
- break;
}
if (!(pmx->flAccel & MX_NOTRANSLATE))
IN XFORMOBJ *pxo,
OUT XFORML *pxform)
{
- PMATRIX pmx = (PMATRIX)pxo;
+ PMATRIX pmx = XFORMOBJ_pmx(pxo);
/* Check parameters */
if (!pxo || !pxform)
IN XFORMOBJ *pxo,
OUT FLOATOBJ_XFORM *pxfo)
{
- PMATRIX pmx = (PMATRIX)pxo;
+ PMATRIX pmx = XFORMOBJ_pmx(pxo);
/* Check parameters */
if (!pxo || !pxfo)
OUT PVOID pvOut)
{
MATRIX mx;
+ XFORMOBJ xoInv;
POINTL *pptl;
INT i;
/* Use inverse xform? */
if (iMode == XF_INV_FXTOL || iMode == XF_INV_LTOL)
{
- ULONG ret;
- ret = XFORMOBJ_Inverse((XFORMOBJ*)&mx, pxo);
- if (ret == DDI_ERROR)
+ XFORMOBJ_vInit(&xoInv, &mx);
+ if (XFORMOBJ_iInverse(&xoInv, pxo) == DDI_ERROR)
{
return FALSE;
}
- pxo = (XFORMOBJ*)&mx;
+ pxo = &xoInv;
}
/* Convert POINTL to POINTFIX? */