ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

BOOL NTAPI XFORMOBJ_bXformFixPoints ( IN XFORMOBJ pxo,
IN ULONG  cPoints,
IN PPOINTL  pptIn,
OUT PPOINTL  pptOut 
)

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;
}

Generated on Sun May 27 2012 06:10:45 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.