mirror of
https://github.com/reactos/reactos.git
synced 2025-05-18 00:31:27 +00:00
[WIN32K]
- Use if, instead of switch to handle flags in XFORMOBJ_bXformFixPoints - Define XFORMOBJ to EXFORMOBJ, a stack object that links to the matrix - There is no spoon. svn path=/trunk/; revision=50307
This commit is contained in:
parent
38bbc45b31
commit
ca4ebe1b55
7 changed files with 225 additions and 106 deletions
|
@ -1,13 +1,80 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <include/dc.h>
|
#include <include/dc.h>
|
||||||
|
#include <include/xformobj.h>
|
||||||
|
|
||||||
#define IntDPtoLP(dc, pp, c) XFORMOBJ_bApplyXform((XFORMOBJ*)&(dc)->dclevel.mxDeviceToWorld, XF_LTOL, c, pp, pp);
|
#define IntLPtoDP(pdc, ppt, count) DC_vXformWorldToDevice(pdc, count, (PPOINTL)(ppt), (PPOINTL)(ppt));
|
||||||
#define IntLPtoDP(dc, pp, c) XFORMOBJ_bApplyXform((XFORMOBJ*)&(dc)->dclevel.mxWorldToDevice, XF_LTOL, c, pp, pp);
|
#define CoordLPtoDP(pdc, ppt) DC_vXformWorldToDevice(pdc, 1, (PPOINTL)(ppt), (PPOINTL)(ppt));
|
||||||
#define CoordDPtoLP(dc, pp) XFORMOBJ_bApplyXform((XFORMOBJ*)&(dc)->dclevel.mxDeviceToWorld, XF_LTOL, 1, pp, pp);
|
#define IntDPtoLP(pdc, ppt, count) DC_vXformDeviceToWorld(pdc, count, (PPOINTL)(ppt), (PPOINTL)(ppt));
|
||||||
#define CoordLPtoDP(dc, pp) XFORMOBJ_bApplyXform((XFORMOBJ*)&(dc)->dclevel.mxWorldToDevice, XF_LTOL, 1, pp, pp);
|
#define CoordDPtoLP(pdc, ppt) DC_vXformDeviceToWorld(pdc, 1, (PPOINTL)(ppt), (PPOINTL)(ppt));
|
||||||
#define XForm2MatrixS(m, x) XFORMOBJ_iSetXform((XFORMOBJ*)m, (XFORML*)x)
|
|
||||||
#define MatrixS2XForm(x, m) XFORMOBJ_iGetXform((XFORMOBJ*)m, (XFORML*)x)
|
#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);
|
||||||
|
}
|
||||||
|
|
||||||
|
FORCEINLINE
|
||||||
|
void
|
||||||
|
DC_vXformDeviceToWorld(
|
||||||
|
IN PDC pdc,
|
||||||
|
IN ULONG cNumPoints,
|
||||||
|
IN PPOINTL pptlDest,
|
||||||
|
IN PPOINTL pptlSource)
|
||||||
|
{
|
||||||
|
XFORMOBJ xo;
|
||||||
|
|
||||||
|
XFORMOBJ_vInit(&xo, &pdc->dclevel.mxDeviceToWorld);
|
||||||
|
XFORMOBJ_bApplyXform(&xo, XF_LTOL, cNumPoints, pptlDest, pptlSource);
|
||||||
|
}
|
||||||
|
|
||||||
|
FORCEINLINE
|
||||||
|
void
|
||||||
|
DC_vXformWorldToDevice(
|
||||||
|
IN PDC pdc,
|
||||||
|
IN ULONG cNumPoints,
|
||||||
|
IN PPOINTL pptlDest,
|
||||||
|
IN PPOINTL pptlSource)
|
||||||
|
{
|
||||||
|
XFORMOBJ xo;
|
||||||
|
|
||||||
|
XFORMOBJ_vInit(&xo, &pdc->dclevel.mxWorldToDevice);
|
||||||
|
XFORMOBJ_bApplyXform(&xo, XF_LTOL, cNumPoints, pptlDest, pptlSource);
|
||||||
|
}
|
||||||
|
|
||||||
int APIENTRY IntGdiSetMapMode(PDC, int);
|
int APIENTRY IntGdiSetMapMode(PDC, int);
|
||||||
|
|
||||||
|
@ -20,4 +87,4 @@ IntGdiModifyWorldTransform(PDC pDc,
|
||||||
VOID FASTCALL IntMirrorWindowOrg(PDC);
|
VOID FASTCALL IntMirrorWindowOrg(PDC);
|
||||||
void FASTCALL IntFixIsotropicMapping(PDC);
|
void FASTCALL IntFixIsotropicMapping(PDC);
|
||||||
LONG FASTCALL IntCalcFillOrigin(PDC);
|
LONG FASTCALL IntCalcFillOrigin(PDC);
|
||||||
PPOINTL FASTCALL IntptlBrushOrigin(PDC pdc,LONG,LONG);
|
PPOINTL FASTCALL IntptlBrushOrigin(PDC pdc,LONG,LONG);
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
#include <reactos/win32k/ntgdihdl.h>
|
#include <reactos/win32k/ntgdihdl.h>
|
||||||
#include "dc.h"
|
#include "dc.h"
|
||||||
#include "math.h"
|
#include "math.h"
|
||||||
|
#include "xformobj.h"
|
||||||
#include <ft2build.h>
|
#include <ft2build.h>
|
||||||
#include FT_FREETYPE_H
|
#include FT_FREETYPE_H
|
||||||
|
|
||||||
|
|
|
@ -1,28 +1,76 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
typedef struct _EXFORMOBJ
|
||||||
|
{
|
||||||
|
MATRIX *pmx;
|
||||||
|
} EXFORMOBJ;
|
||||||
|
|
||||||
|
#define XFORMOBJ EXFORMOBJ
|
||||||
|
#define XFORMOBJ_iGetXform EXFORMOBJ_iGetXform
|
||||||
|
#define XFORMOBJ_iGetFloatObjXform EXFORMOBJ_iGetFloatObjXform
|
||||||
|
#define XFORMOBJ_bApplyXform EXFORMOBJ_bApplyXform
|
||||||
|
#define XFORMOBJ_vInit EXFORMOBJ_vInit
|
||||||
|
#define XFORMOBJ_pmx EXFORMOBJ_pmx
|
||||||
|
#define XFORMOBJ_iSetXform EXFORMOBJ_iSetXform
|
||||||
|
#define XFORMOBJ_iCombine EXFORMOBJ_iCombine
|
||||||
|
#define XFORMOBJ_iCombineXform EXFORMOBJ_iCombineXform
|
||||||
|
#define XFORMOBJ_iInverse EXFORMOBJ_iInverse
|
||||||
|
|
||||||
|
FORCEINLINE
|
||||||
|
VOID
|
||||||
|
XFORMOBJ_vInit(
|
||||||
|
OUT XFORMOBJ *pxo,
|
||||||
|
IN MATRIX *pmx)
|
||||||
|
{
|
||||||
|
pxo->pmx = pmx;
|
||||||
|
}
|
||||||
|
|
||||||
|
FORCEINLINE
|
||||||
|
MATRIX*
|
||||||
|
XFORMOBJ_pmx(
|
||||||
|
IN XFORMOBJ *pxo)
|
||||||
|
{
|
||||||
|
return pxo->pmx;
|
||||||
|
}
|
||||||
|
|
||||||
ULONG
|
ULONG
|
||||||
INTERNAL_CALL
|
INTERNAL_CALL
|
||||||
XFORMOBJ_iSetXform(
|
XFORMOBJ_iSetXform(
|
||||||
OUT XFORMOBJ *pxo,
|
OUT XFORMOBJ *pxo,
|
||||||
IN XFORML * pxform);
|
IN const XFORML *pxform);
|
||||||
|
|
||||||
ULONG
|
ULONG
|
||||||
INTERNAL_CALL
|
INTERNAL_CALL
|
||||||
XFORMOBJ_iCombine(
|
XFORMOBJ_iCombine(
|
||||||
IN XFORMOBJ *pxo,
|
IN XFORMOBJ *pxo,
|
||||||
IN XFORMOBJ *pxo1,
|
IN XFORMOBJ *pxo1,
|
||||||
IN XFORMOBJ *pxo2);
|
IN XFORMOBJ *pxo2);
|
||||||
|
|
||||||
ULONG
|
ULONG
|
||||||
INTERNAL_CALL
|
INTERNAL_CALL
|
||||||
XFORMOBJ_iCombineXform(
|
XFORMOBJ_iCombineXform(
|
||||||
IN XFORMOBJ *pxo,
|
IN XFORMOBJ *pxo,
|
||||||
IN XFORMOBJ *pxo1,
|
IN XFORMOBJ *pxo1,
|
||||||
IN XFORML *pxform,
|
IN XFORML *pxform,
|
||||||
IN BOOL bLeftMultiply);
|
IN BOOL bLeftMultiply);
|
||||||
|
|
||||||
ULONG
|
ULONG
|
||||||
INTERNAL_CALL
|
INTERNAL_CALL
|
||||||
XFORMOBJ_Inverse(
|
XFORMOBJ_iInverse(
|
||||||
OUT XFORMOBJ *pxoDst,
|
OUT XFORMOBJ *pxoDst,
|
||||||
IN XFORMOBJ *pxoSrc);
|
IN XFORMOBJ *pxoSrc);
|
||||||
|
|
||||||
|
ULONG
|
||||||
|
APIENTRY
|
||||||
|
XFORMOBJ_iGetXform(
|
||||||
|
IN XFORMOBJ *pxo,
|
||||||
|
OUT XFORML *pxform);
|
||||||
|
|
||||||
|
BOOL
|
||||||
|
APIENTRY
|
||||||
|
XFORMOBJ_bApplyXform(
|
||||||
|
IN XFORMOBJ *pxo,
|
||||||
|
IN ULONG iMode,
|
||||||
|
IN ULONG cPoints,
|
||||||
|
IN PVOID pvIn,
|
||||||
|
OUT PVOID pvOut);
|
||||||
|
|
|
@ -97,14 +97,14 @@ HintFromAccel(ULONG flAccel)
|
||||||
{
|
{
|
||||||
switch (flAccel & (MX_NOTRANSLATE | MX_IDENTITYSCALE | MX_SCALE))
|
switch (flAccel & (MX_NOTRANSLATE | MX_IDENTITYSCALE | MX_SCALE))
|
||||||
{
|
{
|
||||||
case (MX_SCALE | MX_IDENTITYSCALE | MX_NOTRANSLATE):
|
case (MX_SCALE | MX_IDENTITYSCALE | MX_NOTRANSLATE):
|
||||||
return GX_IDENTITY;
|
return GX_IDENTITY;
|
||||||
case (MX_SCALE | MX_IDENTITYSCALE):
|
case (MX_SCALE | MX_IDENTITYSCALE):
|
||||||
return GX_OFFSET;
|
return GX_OFFSET;
|
||||||
case MX_SCALE:
|
case MX_SCALE:
|
||||||
return GX_SCALE;
|
return GX_SCALE;
|
||||||
default:
|
default:
|
||||||
return GX_GENERAL;
|
return GX_GENERAL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -115,7 +115,7 @@ INTERNAL_CALL
|
||||||
XFORMOBJ_UpdateAccel(
|
XFORMOBJ_UpdateAccel(
|
||||||
IN XFORMOBJ *pxo)
|
IN XFORMOBJ *pxo)
|
||||||
{
|
{
|
||||||
PMATRIX pmx = (PMATRIX)pxo;
|
PMATRIX pmx = XFORMOBJ_pmx(pxo);
|
||||||
|
|
||||||
/* Copy Dx and Dy to FIX format */
|
/* Copy Dx and Dy to FIX format */
|
||||||
pmx->fxDx = FLOATOBJ_GetFix(&pmx->efDx);
|
pmx->fxDx = FLOATOBJ_GetFix(&pmx->efDx);
|
||||||
|
@ -124,25 +124,25 @@ XFORMOBJ_UpdateAccel(
|
||||||
pmx->flAccel = 0;
|
pmx->flAccel = 0;
|
||||||
|
|
||||||
if (FLOATOBJ_Equal0(&pmx->efDx) &&
|
if (FLOATOBJ_Equal0(&pmx->efDx) &&
|
||||||
FLOATOBJ_Equal0(&pmx->efDy))
|
FLOATOBJ_Equal0(&pmx->efDy))
|
||||||
{
|
{
|
||||||
pmx->flAccel |= MX_NOTRANSLATE;
|
pmx->flAccel |= MX_NOTRANSLATE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (FLOATOBJ_Equal0(&pmx->efM12) &&
|
if (FLOATOBJ_Equal0(&pmx->efM12) &&
|
||||||
FLOATOBJ_Equal0(&pmx->efM21))
|
FLOATOBJ_Equal0(&pmx->efM21))
|
||||||
{
|
{
|
||||||
pmx->flAccel |= MX_SCALE;
|
pmx->flAccel |= MX_SCALE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (FLOATOBJ_Equal1(&pmx->efM11) &&
|
if (FLOATOBJ_Equal1(&pmx->efM11) &&
|
||||||
FLOATOBJ_Equal1(&pmx->efM22))
|
FLOATOBJ_Equal1(&pmx->efM22))
|
||||||
{
|
{
|
||||||
pmx->flAccel |= MX_IDENTITYSCALE;
|
pmx->flAccel |= MX_IDENTITYSCALE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (FLOATOBJ_IsLong(&pmx->efM11) && FLOATOBJ_IsLong(&pmx->efM12) &&
|
if (FLOATOBJ_IsLong(&pmx->efM11) && FLOATOBJ_IsLong(&pmx->efM12) &&
|
||||||
FLOATOBJ_IsLong(&pmx->efM21) && FLOATOBJ_IsLong(&pmx->efM22))
|
FLOATOBJ_IsLong(&pmx->efM21) && FLOATOBJ_IsLong(&pmx->efM22))
|
||||||
{
|
{
|
||||||
pmx->flAccel |= MX_INTEGER;
|
pmx->flAccel |= MX_INTEGER;
|
||||||
}
|
}
|
||||||
|
@ -155,9 +155,9 @@ ULONG
|
||||||
INTERNAL_CALL
|
INTERNAL_CALL
|
||||||
XFORMOBJ_iSetXform(
|
XFORMOBJ_iSetXform(
|
||||||
OUT XFORMOBJ *pxo,
|
OUT XFORMOBJ *pxo,
|
||||||
IN XFORML * pxform)
|
IN const XFORML *pxform)
|
||||||
{
|
{
|
||||||
PMATRIX pmx = (PMATRIX)pxo;
|
PMATRIX pmx = XFORMOBJ_pmx(pxo);
|
||||||
|
|
||||||
/* Check parameters */
|
/* Check parameters */
|
||||||
if (!pxo || !pxform)
|
if (!pxo || !pxform)
|
||||||
|
@ -195,9 +195,9 @@ XFORMOBJ_iCombine(
|
||||||
MATRIX mx;
|
MATRIX mx;
|
||||||
PMATRIX pmx, pmx1, pmx2;
|
PMATRIX pmx, pmx1, pmx2;
|
||||||
|
|
||||||
pmx = (PMATRIX)pxo;
|
pmx = XFORMOBJ_pmx(pxo);
|
||||||
pmx1 = (PMATRIX)pxo1;
|
pmx1 =XFORMOBJ_pmx(pxo1);
|
||||||
pmx2 = (PMATRIX)pxo2;
|
pmx2 = XFORMOBJ_pmx(pxo2);
|
||||||
|
|
||||||
/* Do a 3 x 3 matrix multiplication with mx as destinantion */
|
/* Do a 3 x 3 matrix multiplication with mx as destinantion */
|
||||||
MulAdd(&mx.efM11, &pmx1->efM11, &pmx2->efM11, &pmx1->efM12, &pmx2->efM21);
|
MulAdd(&mx.efM11, &pmx1->efM11, &pmx2->efM11, &pmx1->efM12, &pmx2->efM21);
|
||||||
|
@ -226,17 +226,18 @@ XFORMOBJ_iCombineXform(
|
||||||
IN BOOL bLeftMultiply)
|
IN BOOL bLeftMultiply)
|
||||||
{
|
{
|
||||||
MATRIX mx;
|
MATRIX mx;
|
||||||
XFORMOBJ *pxo2 = (XFORMOBJ*)&mx;
|
XFORMOBJ xo2;
|
||||||
|
|
||||||
XFORMOBJ_iSetXform(pxo2, pxform);
|
XFORMOBJ_vInit(&xo2, &mx);
|
||||||
|
XFORMOBJ_iSetXform(&xo2, pxform);
|
||||||
|
|
||||||
if (bLeftMultiply)
|
if (bLeftMultiply)
|
||||||
{
|
{
|
||||||
return XFORMOBJ_iCombine(pxo, pxo2, pxo1);
|
return XFORMOBJ_iCombine(pxo, &xo2, pxo1);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return XFORMOBJ_iCombine(pxo, pxo1, pxo2);
|
return XFORMOBJ_iCombine(pxo, pxo1, &xo2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -246,15 +247,15 @@ XFORMOBJ_iCombineXform(
|
||||||
*/
|
*/
|
||||||
ULONG
|
ULONG
|
||||||
INTERNAL_CALL
|
INTERNAL_CALL
|
||||||
XFORMOBJ_Inverse(
|
XFORMOBJ_iInverse(
|
||||||
OUT XFORMOBJ *pxoDst,
|
OUT XFORMOBJ *pxoDst,
|
||||||
IN XFORMOBJ *pxoSrc)
|
IN XFORMOBJ *pxoSrc)
|
||||||
{
|
{
|
||||||
PMATRIX pmxDst, pmxSrc;
|
PMATRIX pmxDst, pmxSrc;
|
||||||
FLOATOBJ foDet;
|
FLOATOBJ foDet;
|
||||||
|
|
||||||
pmxDst = (PMATRIX)pxoDst;
|
pmxDst = XFORMOBJ_pmx(pxoDst);
|
||||||
pmxSrc = (PMATRIX)pxoSrc;
|
pmxSrc = XFORMOBJ_pmx(pxoSrc);
|
||||||
|
|
||||||
/* det = M11 * M22 - M12 * M21 */
|
/* det = M11 * M22 - M12 * M21 */
|
||||||
MulSub(&foDet, &pmxSrc->efM11, &pmxSrc->efM22, &pmxSrc->efM12, &pmxSrc->efM21);
|
MulSub(&foDet, &pmxSrc->efM11, &pmxSrc->efM22, &pmxSrc->efM12, &pmxSrc->efM21);
|
||||||
|
@ -296,56 +297,57 @@ XFORMOBJ_bXformFixPoints(
|
||||||
FLOATOBJ fo1, fo2;
|
FLOATOBJ fo1, fo2;
|
||||||
FLONG flAccel;
|
FLONG flAccel;
|
||||||
|
|
||||||
pmx = (PMATRIX)pxo;
|
pmx = XFORMOBJ_pmx(pxo);
|
||||||
flAccel = pmx->flAccel & (MX_INTEGER|MX_SCALE|MX_IDENTITYSCALE);
|
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 */
|
/* Identity transformation, nothing todo */
|
||||||
break;
|
}
|
||||||
|
else if (flAccel & MX_INTEGER)
|
||||||
case (MX_IDENTITYSCALE | MX_INTEGER):
|
{
|
||||||
/* 1-scale integer transform */
|
if (flAccel & MX_IDENTITYSCALE)
|
||||||
i = cPoints - 1;
|
|
||||||
do
|
|
||||||
{
|
{
|
||||||
LONG x = pptIn[i].x + pptIn[i].y * FLOATOBJ_GetLong(&pmx->efM21);
|
/* 1-scale integer transform */
|
||||||
LONG y = pptIn[i].y + pptIn[i].x * FLOATOBJ_GetLong(&pmx->efM12);
|
i = cPoints - 1;
|
||||||
pptOut[i].y = y;
|
do
|
||||||
pptOut[i].x = x;
|
{
|
||||||
|
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);
|
||||||
}
|
}
|
||||||
while (--i >= 0);
|
else if (flAccel & MX_SCALE)
|
||||||
break;
|
|
||||||
|
|
||||||
case (MX_SCALE | MX_INTEGER):
|
|
||||||
/* Diagonal integer transform */
|
|
||||||
i = cPoints - 1;
|
|
||||||
do
|
|
||||||
{
|
{
|
||||||
pptOut[i].x = pptIn[i].x * FLOATOBJ_GetLong(&pmx->efM11);
|
/* Diagonal integer transform */
|
||||||
pptOut[i].y = pptIn[i].y * FLOATOBJ_GetLong(&pmx->efM22);
|
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);
|
||||||
}
|
}
|
||||||
while (--i >= 0);
|
else
|
||||||
break;
|
|
||||||
|
|
||||||
case (MX_INTEGER):
|
|
||||||
/* Full integer transform */
|
|
||||||
i = cPoints - 1;
|
|
||||||
do
|
|
||||||
{
|
{
|
||||||
LONG x;
|
/* Full integer transform */
|
||||||
x = pptIn[i].x * FLOATOBJ_GetLong(&pmx->efM11);
|
i = cPoints - 1;
|
||||||
x += pptIn[i].y * FLOATOBJ_GetLong(&pmx->efM21);
|
do
|
||||||
pptOut[i].y = pptIn[i].y * FLOATOBJ_GetLong(&pmx->efM22);
|
{
|
||||||
pptOut[i].y += pptIn[i].x * FLOATOBJ_GetLong(&pmx->efM12);
|
LONG x;
|
||||||
pptOut[i].x = 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);
|
||||||
}
|
}
|
||||||
while (--i >= 0);
|
}
|
||||||
break;
|
else if (flAccel & MX_IDENTITYSCALE)
|
||||||
|
{
|
||||||
case (MX_IDENTITYSCALE):
|
|
||||||
/* 1-scale transform */
|
/* 1-scale transform */
|
||||||
i = cPoints - 1;
|
i = cPoints - 1;
|
||||||
do
|
do
|
||||||
|
@ -358,9 +360,9 @@ XFORMOBJ_bXformFixPoints(
|
||||||
pptOut[i].y = pptIn[i].y + FLOATOBJ_GetLong(&fo2);
|
pptOut[i].y = pptIn[i].y + FLOATOBJ_GetLong(&fo2);
|
||||||
}
|
}
|
||||||
while (--i >= 0);
|
while (--i >= 0);
|
||||||
break;
|
}
|
||||||
|
else if (flAccel & MX_SCALE)
|
||||||
case (MX_SCALE):
|
{
|
||||||
/* Diagonal float transform */
|
/* Diagonal float transform */
|
||||||
i = cPoints - 1;
|
i = cPoints - 1;
|
||||||
do
|
do
|
||||||
|
@ -373,9 +375,9 @@ XFORMOBJ_bXformFixPoints(
|
||||||
pptOut[i].y = FLOATOBJ_GetLong(&fo2);
|
pptOut[i].y = FLOATOBJ_GetLong(&fo2);
|
||||||
}
|
}
|
||||||
while (--i >= 0);
|
while (--i >= 0);
|
||||||
break;
|
}
|
||||||
|
else
|
||||||
default:
|
{
|
||||||
/* Full float transform */
|
/* Full float transform */
|
||||||
i = cPoints - 1;
|
i = cPoints - 1;
|
||||||
do
|
do
|
||||||
|
@ -386,7 +388,6 @@ XFORMOBJ_bXformFixPoints(
|
||||||
pptOut[i].y = FLOATOBJ_GetLong(&fo2);
|
pptOut[i].y = FLOATOBJ_GetLong(&fo2);
|
||||||
}
|
}
|
||||||
while (--i >= 0);
|
while (--i >= 0);
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(pmx->flAccel & MX_NOTRANSLATE))
|
if (!(pmx->flAccel & MX_NOTRANSLATE))
|
||||||
|
@ -414,7 +415,7 @@ XFORMOBJ_iGetXform(
|
||||||
IN XFORMOBJ *pxo,
|
IN XFORMOBJ *pxo,
|
||||||
OUT XFORML *pxform)
|
OUT XFORML *pxform)
|
||||||
{
|
{
|
||||||
PMATRIX pmx = (PMATRIX)pxo;
|
PMATRIX pmx = XFORMOBJ_pmx(pxo);
|
||||||
|
|
||||||
/* Check parameters */
|
/* Check parameters */
|
||||||
if (!pxo || !pxform)
|
if (!pxo || !pxform)
|
||||||
|
@ -442,7 +443,7 @@ XFORMOBJ_iGetFloatObjXform(
|
||||||
IN XFORMOBJ *pxo,
|
IN XFORMOBJ *pxo,
|
||||||
OUT FLOATOBJ_XFORM *pxfo)
|
OUT FLOATOBJ_XFORM *pxfo)
|
||||||
{
|
{
|
||||||
PMATRIX pmx = (PMATRIX)pxo;
|
PMATRIX pmx = XFORMOBJ_pmx(pxo);
|
||||||
|
|
||||||
/* Check parameters */
|
/* Check parameters */
|
||||||
if (!pxo || !pxfo)
|
if (!pxo || !pxfo)
|
||||||
|
@ -467,13 +468,14 @@ XFORMOBJ_iGetFloatObjXform(
|
||||||
BOOL
|
BOOL
|
||||||
APIENTRY
|
APIENTRY
|
||||||
XFORMOBJ_bApplyXform(
|
XFORMOBJ_bApplyXform(
|
||||||
IN XFORMOBJ *pxo,
|
IN XFORMOBJ *pxo,
|
||||||
IN ULONG iMode,
|
IN ULONG iMode,
|
||||||
IN ULONG cPoints,
|
IN ULONG cPoints,
|
||||||
IN PVOID pvIn,
|
IN PVOID pvIn,
|
||||||
OUT PVOID pvOut)
|
OUT PVOID pvOut)
|
||||||
{
|
{
|
||||||
MATRIX mx;
|
MATRIX mx;
|
||||||
|
XFORMOBJ xoInv;
|
||||||
POINTL *pptl;
|
POINTL *pptl;
|
||||||
INT i;
|
INT i;
|
||||||
|
|
||||||
|
@ -486,13 +488,12 @@ XFORMOBJ_bApplyXform(
|
||||||
/* Use inverse xform? */
|
/* Use inverse xform? */
|
||||||
if (iMode == XF_INV_FXTOL || iMode == XF_INV_LTOL)
|
if (iMode == XF_INV_FXTOL || iMode == XF_INV_LTOL)
|
||||||
{
|
{
|
||||||
ULONG ret;
|
XFORMOBJ_vInit(&xoInv, &mx);
|
||||||
ret = XFORMOBJ_Inverse((XFORMOBJ*)&mx, pxo);
|
if (XFORMOBJ_iInverse(&xoInv, pxo) == DDI_ERROR)
|
||||||
if (ret == DDI_ERROR)
|
|
||||||
{
|
{
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
pxo = (XFORMOBJ*)&mx;
|
pxo = &xoInv;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Convert POINTL to POINTFIX? */
|
/* Convert POINTL to POINTFIX? */
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <win32k.h>
|
#include <win32k.h>
|
||||||
|
#undef XFORMOBJ
|
||||||
|
|
||||||
#define UNIMPLEMENTED DbgPrint("(%s:%i) WIN32K: %s UNIMPLEMENTED\n", __FILE__, __LINE__, __FUNCTION__ )
|
#define UNIMPLEMENTED DbgPrint("(%s:%i) WIN32K: %s UNIMPLEMENTED\n", __FILE__, __LINE__, __FUNCTION__ )
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#include <win32k.h>
|
#include <win32k.h>
|
||||||
|
#undef XFORMOBJ
|
||||||
|
|
||||||
#define UNIMPLEMENTED DbgPrint("(%s:%i) WIN32K: %s UNIMPLEMENTED\n", __FILE__, __LINE__, __FUNCTION__ )
|
#define UNIMPLEMENTED DbgPrint("(%s:%i) WIN32K: %s UNIMPLEMENTED\n", __FILE__, __LINE__, __FUNCTION__ )
|
||||||
|
|
||||||
|
|
|
@ -214,9 +214,9 @@
|
||||||
@ stdcall WNDOBJ_bEnum(ptr long ptr)
|
@ stdcall WNDOBJ_bEnum(ptr long ptr)
|
||||||
@ stdcall WNDOBJ_cEnumStart(ptr long long long)
|
@ stdcall WNDOBJ_cEnumStart(ptr long long long)
|
||||||
@ stdcall WNDOBJ_vSetConsumer(ptr ptr)
|
@ stdcall WNDOBJ_vSetConsumer(ptr ptr)
|
||||||
@ stdcall XFORMOBJ_bApplyXform(ptr long long ptr ptr)
|
@ stdcall XFORMOBJ_bApplyXform(ptr long long ptr ptr) EXFORMOBJ_bApplyXform
|
||||||
@ stdcall XFORMOBJ_iGetFloatObjXform(ptr ptr)
|
@ stdcall XFORMOBJ_iGetFloatObjXform(ptr ptr) EXFORMOBJ_iGetFloatObjXform
|
||||||
@ stdcall XFORMOBJ_iGetXform(ptr ptr)
|
@ stdcall XFORMOBJ_iGetXform(ptr ptr) EXFORMOBJ_iGetXform
|
||||||
@ stdcall XLATEOBJ_cGetPalette(ptr long long ptr)
|
@ stdcall XLATEOBJ_cGetPalette(ptr long long ptr)
|
||||||
@ stdcall XLATEOBJ_hGetColorTransform(ptr)
|
@ stdcall XLATEOBJ_hGetColorTransform(ptr)
|
||||||
@ stdcall XLATEOBJ_iXlate(ptr long)
|
@ stdcall XLATEOBJ_iXlate(ptr long)
|
||||||
|
|
Loading…
Reference in a new issue