mirror of
https://github.com/reactos/reactos.git
synced 2025-02-20 15:35:04 +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
|
||||
|
||||
#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(dc, pp, c) XFORMOBJ_bApplyXform((XFORMOBJ*)&(dc)->dclevel.mxWorldToDevice, XF_LTOL, c, pp, pp);
|
||||
#define CoordDPtoLP(dc, pp) XFORMOBJ_bApplyXform((XFORMOBJ*)&(dc)->dclevel.mxDeviceToWorld, XF_LTOL, 1, pp, pp);
|
||||
#define CoordLPtoDP(dc, pp) XFORMOBJ_bApplyXform((XFORMOBJ*)&(dc)->dclevel.mxWorldToDevice, XF_LTOL, 1, pp, pp);
|
||||
#define XForm2MatrixS(m, x) XFORMOBJ_iSetXform((XFORMOBJ*)m, (XFORML*)x)
|
||||
#define MatrixS2XForm(x, m) XFORMOBJ_iGetXform((XFORMOBJ*)m, (XFORML*)x)
|
||||
#define IntLPtoDP(pdc, ppt, count) DC_vXformWorldToDevice(pdc, count, (PPOINTL)(ppt), (PPOINTL)(ppt));
|
||||
#define CoordLPtoDP(pdc, ppt) DC_vXformWorldToDevice(pdc, 1, (PPOINTL)(ppt), (PPOINTL)(ppt));
|
||||
#define IntDPtoLP(pdc, ppt, count) DC_vXformDeviceToWorld(pdc, count, (PPOINTL)(ppt), (PPOINTL)(ppt));
|
||||
#define CoordDPtoLP(pdc, ppt) DC_vXformDeviceToWorld(pdc, 1, (PPOINTL)(ppt), (PPOINTL)(ppt));
|
||||
|
||||
#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);
|
||||
|
||||
|
@ -20,4 +87,4 @@ IntGdiModifyWorldTransform(PDC pDc,
|
|||
VOID FASTCALL IntMirrorWindowOrg(PDC);
|
||||
void FASTCALL IntFixIsotropicMapping(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 "dc.h"
|
||||
#include "math.h"
|
||||
#include "xformobj.h"
|
||||
#include <ft2build.h>
|
||||
#include FT_FREETYPE_H
|
||||
|
||||
|
|
|
@ -1,28 +1,76 @@
|
|||
#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
|
||||
INTERNAL_CALL
|
||||
XFORMOBJ_iSetXform(
|
||||
OUT XFORMOBJ *pxo,
|
||||
IN XFORML * pxform);
|
||||
OUT XFORMOBJ *pxo,
|
||||
IN const XFORML *pxform);
|
||||
|
||||
ULONG
|
||||
INTERNAL_CALL
|
||||
XFORMOBJ_iCombine(
|
||||
IN XFORMOBJ *pxo,
|
||||
IN XFORMOBJ *pxo1,
|
||||
IN XFORMOBJ *pxo2);
|
||||
IN XFORMOBJ *pxo,
|
||||
IN XFORMOBJ *pxo1,
|
||||
IN XFORMOBJ *pxo2);
|
||||
|
||||
ULONG
|
||||
INTERNAL_CALL
|
||||
XFORMOBJ_iCombineXform(
|
||||
IN XFORMOBJ *pxo,
|
||||
IN XFORMOBJ *pxo1,
|
||||
IN XFORML *pxform,
|
||||
IN BOOL bLeftMultiply);
|
||||
IN XFORMOBJ *pxo,
|
||||
IN XFORMOBJ *pxo1,
|
||||
IN XFORML *pxform,
|
||||
IN BOOL bLeftMultiply);
|
||||
|
||||
ULONG
|
||||
INTERNAL_CALL
|
||||
XFORMOBJ_Inverse(
|
||||
OUT XFORMOBJ *pxoDst,
|
||||
IN XFORMOBJ *pxoSrc);
|
||||
XFORMOBJ_iInverse(
|
||||
OUT XFORMOBJ *pxoDst,
|
||||
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))
|
||||
{
|
||||
case (MX_SCALE | MX_IDENTITYSCALE | MX_NOTRANSLATE):
|
||||
return GX_IDENTITY;
|
||||
case (MX_SCALE | MX_IDENTITYSCALE):
|
||||
return GX_OFFSET;
|
||||
case MX_SCALE:
|
||||
return GX_SCALE;
|
||||
default:
|
||||
return GX_GENERAL;
|
||||
case (MX_SCALE | MX_IDENTITYSCALE | MX_NOTRANSLATE):
|
||||
return GX_IDENTITY;
|
||||
case (MX_SCALE | MX_IDENTITYSCALE):
|
||||
return GX_OFFSET;
|
||||
case MX_SCALE:
|
||||
return GX_SCALE;
|
||||
default:
|
||||
return GX_GENERAL;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -115,7 +115,7 @@ INTERNAL_CALL
|
|||
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);
|
||||
|
@ -124,25 +124,25 @@ XFORMOBJ_UpdateAccel(
|
|||
pmx->flAccel = 0;
|
||||
|
||||
if (FLOATOBJ_Equal0(&pmx->efDx) &&
|
||||
FLOATOBJ_Equal0(&pmx->efDy))
|
||||
FLOATOBJ_Equal0(&pmx->efDy))
|
||||
{
|
||||
pmx->flAccel |= MX_NOTRANSLATE;
|
||||
}
|
||||
|
||||
if (FLOATOBJ_Equal0(&pmx->efM12) &&
|
||||
FLOATOBJ_Equal0(&pmx->efM21))
|
||||
FLOATOBJ_Equal0(&pmx->efM21))
|
||||
{
|
||||
pmx->flAccel |= MX_SCALE;
|
||||
}
|
||||
|
||||
if (FLOATOBJ_Equal1(&pmx->efM11) &&
|
||||
FLOATOBJ_Equal1(&pmx->efM22))
|
||||
FLOATOBJ_Equal1(&pmx->efM22))
|
||||
{
|
||||
pmx->flAccel |= MX_IDENTITYSCALE;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
@ -155,9 +155,9 @@ ULONG
|
|||
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)
|
||||
|
@ -195,9 +195,9 @@ XFORMOBJ_iCombine(
|
|||
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);
|
||||
|
@ -226,17 +226,18 @@ XFORMOBJ_iCombineXform(
|
|||
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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -246,15 +247,15 @@ XFORMOBJ_iCombineXform(
|
|||
*/
|
||||
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);
|
||||
|
@ -296,56 +297,57 @@ XFORMOBJ_bXformFixPoints(
|
|||
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):
|
||||
/* 1-scale integer transform */
|
||||
i = cPoints - 1;
|
||||
do
|
||||
}
|
||||
else if (flAccel & MX_INTEGER)
|
||||
{
|
||||
if (flAccel & MX_IDENTITYSCALE)
|
||||
{
|
||||
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;
|
||||
/* 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);
|
||||
}
|
||||
while (--i >= 0);
|
||||
break;
|
||||
|
||||
case (MX_SCALE | MX_INTEGER):
|
||||
/* Diagonal integer transform */
|
||||
i = cPoints - 1;
|
||||
do
|
||||
else if (flAccel & MX_SCALE)
|
||||
{
|
||||
pptOut[i].x = pptIn[i].x * FLOATOBJ_GetLong(&pmx->efM11);
|
||||
pptOut[i].y = pptIn[i].y * FLOATOBJ_GetLong(&pmx->efM22);
|
||||
/* 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);
|
||||
}
|
||||
while (--i >= 0);
|
||||
break;
|
||||
|
||||
case (MX_INTEGER):
|
||||
/* Full integer transform */
|
||||
i = cPoints - 1;
|
||||
do
|
||||
else
|
||||
{
|
||||
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;
|
||||
/* 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);
|
||||
}
|
||||
while (--i >= 0);
|
||||
break;
|
||||
|
||||
case (MX_IDENTITYSCALE):
|
||||
}
|
||||
else if (flAccel & MX_IDENTITYSCALE)
|
||||
{
|
||||
/* 1-scale transform */
|
||||
i = cPoints - 1;
|
||||
do
|
||||
|
@ -358,9 +360,9 @@ XFORMOBJ_bXformFixPoints(
|
|||
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
|
||||
|
@ -373,9 +375,9 @@ XFORMOBJ_bXformFixPoints(
|
|||
pptOut[i].y = FLOATOBJ_GetLong(&fo2);
|
||||
}
|
||||
while (--i >= 0);
|
||||
break;
|
||||
|
||||
default:
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Full float transform */
|
||||
i = cPoints - 1;
|
||||
do
|
||||
|
@ -386,7 +388,6 @@ XFORMOBJ_bXformFixPoints(
|
|||
pptOut[i].y = FLOATOBJ_GetLong(&fo2);
|
||||
}
|
||||
while (--i >= 0);
|
||||
break;
|
||||
}
|
||||
|
||||
if (!(pmx->flAccel & MX_NOTRANSLATE))
|
||||
|
@ -414,7 +415,7 @@ XFORMOBJ_iGetXform(
|
|||
IN XFORMOBJ *pxo,
|
||||
OUT XFORML *pxform)
|
||||
{
|
||||
PMATRIX pmx = (PMATRIX)pxo;
|
||||
PMATRIX pmx = XFORMOBJ_pmx(pxo);
|
||||
|
||||
/* Check parameters */
|
||||
if (!pxo || !pxform)
|
||||
|
@ -442,7 +443,7 @@ XFORMOBJ_iGetFloatObjXform(
|
|||
IN XFORMOBJ *pxo,
|
||||
OUT FLOATOBJ_XFORM *pxfo)
|
||||
{
|
||||
PMATRIX pmx = (PMATRIX)pxo;
|
||||
PMATRIX pmx = XFORMOBJ_pmx(pxo);
|
||||
|
||||
/* Check parameters */
|
||||
if (!pxo || !pxfo)
|
||||
|
@ -467,13 +468,14 @@ XFORMOBJ_iGetFloatObjXform(
|
|||
BOOL
|
||||
APIENTRY
|
||||
XFORMOBJ_bApplyXform(
|
||||
IN XFORMOBJ *pxo,
|
||||
IN ULONG iMode,
|
||||
IN ULONG cPoints,
|
||||
IN PVOID pvIn,
|
||||
OUT PVOID pvOut)
|
||||
IN XFORMOBJ *pxo,
|
||||
IN ULONG iMode,
|
||||
IN ULONG cPoints,
|
||||
IN PVOID pvIn,
|
||||
OUT PVOID pvOut)
|
||||
{
|
||||
MATRIX mx;
|
||||
XFORMOBJ xoInv;
|
||||
POINTL *pptl;
|
||||
INT i;
|
||||
|
||||
|
@ -486,13 +488,12 @@ XFORMOBJ_bApplyXform(
|
|||
/* 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? */
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
*/
|
||||
|
||||
#include <win32k.h>
|
||||
#undef XFORMOBJ
|
||||
|
||||
#define UNIMPLEMENTED DbgPrint("(%s:%i) WIN32K: %s UNIMPLEMENTED\n", __FILE__, __LINE__, __FUNCTION__ )
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
#include <win32k.h>
|
||||
#undef XFORMOBJ
|
||||
|
||||
#define UNIMPLEMENTED DbgPrint("(%s:%i) WIN32K: %s UNIMPLEMENTED\n", __FILE__, __LINE__, __FUNCTION__ )
|
||||
|
||||
|
|
|
@ -214,9 +214,9 @@
|
|||
@ stdcall WNDOBJ_bEnum(ptr long ptr)
|
||||
@ stdcall WNDOBJ_cEnumStart(ptr long long long)
|
||||
@ stdcall WNDOBJ_vSetConsumer(ptr ptr)
|
||||
@ stdcall XFORMOBJ_bApplyXform(ptr long long ptr ptr)
|
||||
@ stdcall XFORMOBJ_iGetFloatObjXform(ptr ptr)
|
||||
@ stdcall XFORMOBJ_iGetXform(ptr ptr)
|
||||
@ stdcall XFORMOBJ_bApplyXform(ptr long long ptr ptr) EXFORMOBJ_bApplyXform
|
||||
@ stdcall XFORMOBJ_iGetFloatObjXform(ptr ptr) EXFORMOBJ_iGetFloatObjXform
|
||||
@ stdcall XFORMOBJ_iGetXform(ptr ptr) EXFORMOBJ_iGetXform
|
||||
@ stdcall XLATEOBJ_cGetPalette(ptr long long ptr)
|
||||
@ stdcall XLATEOBJ_hGetColorTransform(ptr)
|
||||
@ stdcall XLATEOBJ_iXlate(ptr long)
|
||||
|
|
Loading…
Reference in a new issue