Home | Info | Community | Development | myReactOS | Contact Us
Definition at line 299 of file xformobj.c.
Referenced by XFORMOBJ_bApplyXform().
{ PMATRIX pmx; INT i; FLOATOBJ fo1, fo2; FLONG flAccel; pmx = XFORMOBJ_pmx(pxo); flAccel = pmx->flAccel; if ((flAccel & (XFORM_SCALE|XFORM_UNITY)) == (XFORM_SCALE|XFORM_UNITY)) { /* Identity transformation, nothing todo */ } else if (flAccel & XFORM_INTEGER) { if (flAccel & XFORM_UNITY) { /* 1-scale integer transform */ i = cPoints - 1; do { LONG x = pptIn[i].x + pptIn[i].y * FLOATOBJ_GetLong(&pmx->efM21); LONG y = pptIn[i].y + pptIn[i].x * FLOATOBJ_GetLong(&pmx->efM12); pptOut[i].y = y; pptOut[i].x = x; } while (--i >= 0); } else if (flAccel & XFORM_SCALE) { /* Diagonal integer transform */ i = cPoints - 1; do { pptOut[i].x = pptIn[i].x * FLOATOBJ_GetLong(&pmx->efM11); pptOut[i].y = pptIn[i].y * FLOATOBJ_GetLong(&pmx->efM22); } while (--i >= 0); } else { /* Full integer transform */ i = cPoints - 1; do { LONG x; x = pptIn[i].x * FLOATOBJ_GetLong(&pmx->efM11); x += pptIn[i].y * FLOATOBJ_GetLong(&pmx->efM21); pptOut[i].y = pptIn[i].y * FLOATOBJ_GetLong(&pmx->efM22); pptOut[i].y += pptIn[i].x * FLOATOBJ_GetLong(&pmx->efM12); pptOut[i].x = x; } while (--i >= 0); } } else if (flAccel & XFORM_UNITY) { /* 1-scale transform */ i = cPoints - 1; do { fo1 = pmx->efM21; FLOATOBJ_MulLong(&fo1, pptIn[i].y); fo2 = pmx->efM12; FLOATOBJ_MulLong(&fo2, pptIn[i].x); pptOut[i].x = pptIn[i].x + FLOATOBJ_GetLong(&fo1); pptOut[i].y = pptIn[i].y + FLOATOBJ_GetLong(&fo2); } while (--i >= 0); } else if (flAccel & XFORM_SCALE) { /* Diagonal float transform */ i = cPoints - 1; do { fo1 = pmx->efM11; FLOATOBJ_MulLong(&fo1, pptIn[i].x); pptOut[i].x = FLOATOBJ_GetLong(&fo1); fo2 = pmx->efM22; FLOATOBJ_MulLong(&fo2, pptIn[i].y); pptOut[i].y = FLOATOBJ_GetLong(&fo2); } while (--i >= 0); } else { /* Full float transform */ i = cPoints - 1; do { MulAddLong(&fo1, &pmx->efM11, pptIn[i].x, &pmx->efM21, pptIn[i].y); MulAddLong(&fo2, &pmx->efM12, pptIn[i].x, &pmx->efM22, pptIn[i].y); pptOut[i].x = FLOATOBJ_GetLong(&fo1); pptOut[i].y = FLOATOBJ_GetLong(&fo2); } while (--i >= 0); } if (!(pmx->flAccel & XFORM_NO_TRANSLATION)) { /* Translate points */ i = cPoints - 1; do { pptOut[i].x += pmx->fxDx; pptOut[i].y += pmx->fxDy; } while (--i >= 0); } return TRUE; }