From fcd3ddadc42a7225070ccaf484eef32aecd72ab4 Mon Sep 17 00:00:00 2001 From: James Tabor Date: Sun, 12 Aug 2007 07:34:23 +0000 Subject: [PATCH] Added two new subroutines in support for writing data to and from user space. Fixed calc in CoordCnvP to use float not fixed. svn path=/trunk/; revision=28296 --- reactos/dll/win32/gdi32/objects/coord.c | 8 ++-- reactos/subsystems/win32/win32k/eng/float.c | 37 +++++++++++++++++++ .../win32/win32k/include/gdifloat.h | 4 ++ 3 files changed, 46 insertions(+), 3 deletions(-) diff --git a/reactos/dll/win32/gdi32/objects/coord.c b/reactos/dll/win32/gdi32/objects/coord.c index 62a0e6912e8..2618f0616f1 100644 --- a/reactos/dll/win32/gdi32/objects/coord.c +++ b/reactos/dll/win32/gdi32/objects/coord.c @@ -70,18 +70,20 @@ VOID FASTCALL CoordCnvP(MATRIX_S * mx, LPPOINT Point) { FLOAT x, y; - gxf_long a, b; + gxf_long a, b, c; x = (FLOAT)Point->x; y = (FLOAT)Point->y; a.l = EFtoF( &mx->efM11 ); b.l = EFtoF( &mx->efM21 ); - x = x * a.f + y * b.f + mx->fxDx; + c.l = EFtoF( &mx->efDx ); + x = x * a.f + y * b.f + c.f; a.l = EFtoF( &mx->efM12 ); b.l = EFtoF( &mx->efM22 ); - y = x * a.f + y * b.f + mx->fxDy; + c.l = EFtoF( &mx->efDy ); + y = x * a.f + y * b.f + c.f; FLOAT_TO_INT(x, Point->x ); FLOAT_TO_INT(y, Point->y ); diff --git a/reactos/subsystems/win32/win32k/eng/float.c b/reactos/subsystems/win32/win32k/eng/float.c index ed19b775ebe..10c8df37637 100644 --- a/reactos/subsystems/win32/win32k/eng/float.c +++ b/reactos/subsystems/win32/win32k/eng/float.c @@ -198,6 +198,43 @@ FLOATOBJ_AddFloat( #endif } +VOID FASTCALL +XForm2MatrixS( MATRIX_S * Matrix, PXFORM XForm) +{ +gxf_long f; + f.f = XForm->eM11; + FtoEF( &Matrix->efM11, f.l); + f.f = XForm->eM12; + FtoEF( &Matrix->efM12, f.l); + f.f = XForm->eM21; + FtoEF( &Matrix->efM21, f.l); + f.f = XForm->eM22; + FtoEF( &Matrix->efM22, f.l); + f.f = XForm->eDx; + FtoEF( &Matrix->efDx, f.l); + f.f = XForm->eDy; + FtoEF( &Matrix->efDy, f.l); +} + +VOID FASTCALL +MatrixS2XForm( PXFORM XForm, MATRIX_S * Matrix) +{ +gxf_long f; + f.l = EFtoF(&Matrix->efM11); + XForm->eM11 = f.f; + f.l = EFtoF(&Matrix->efM12); + XForm->eM12 = f.f; + f.l = EFtoF(&Matrix->efM21); + XForm->eM21 = f.f; + f.l = EFtoF(&Matrix->efM22); + XForm->eM22 = f.f; + f.l = EFtoF(&Matrix->efDx); + XForm->eDx = f.f; + f.l = EFtoF(&Matrix->efDy); + XForm->eDy = f.f; +} + + VOID STDCALL FLOATOBJ_AddLong( diff --git a/reactos/subsystems/win32/win32k/include/gdifloat.h b/reactos/subsystems/win32/win32k/include/gdifloat.h index 1c25d8257cb..fd05a1616ca 100644 --- a/reactos/subsystems/win32/win32k/include/gdifloat.h +++ b/reactos/subsystems/win32/win32k/include/gdifloat.h @@ -101,3 +101,7 @@ static __inline void INTERNAL_LPTODP(DC *dc, LPPOINT point) MulDiv((ty), (dc)->Dc_Attr.szlViewportExt.cy, (dc)->Dc_Attr.szlWindowExt.cy) #endif + +VOID FASTCALL XForm2MatrixS( MATRIX_S *, PXFORM); +VOID FASTCALL MatrixS2XForm( PXFORM, MATRIX_S *); +