javauis/lcdui_akn/lcdgd/src/lcdtransform.cpp
branchRCL_3
changeset 19 04becd199f91
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/lcdui_akn/lcdgd/src/lcdtransform.cpp	Tue Apr 27 16:30:29 2010 +0300
@@ -0,0 +1,240 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#include "lcdtransform.h"
+
+EXPORT_C TPoint TLcdTransform::operator()(const TPoint& aPoint) const
+{
+    return TPoint
+           (
+               aPoint.iX*iDuDx + aPoint.iY*iDuDy + iU0,
+               aPoint.iX*iDvDx + aPoint.iY*iDvDy + iV0
+           );
+}
+
+EXPORT_C TLcdTransform TLcdTransform::operator *(const TLcdTransform& aT) const
+{
+    TLcdTransform t;
+
+    t.iDuDx = iDuDx*aT.iDuDx + iDuDy*aT.iDvDx;
+    t.iDuDy = iDuDx*aT.iDuDy + iDuDy*aT.iDvDy;
+    t.iDvDx = iDvDx*aT.iDuDx + iDvDy*aT.iDvDx;
+    t.iDvDy = iDvDx*aT.iDuDy + iDvDy*aT.iDvDy;
+    t.iU0   = iDuDx*aT.iU0   + iDuDy*aT.iV0 + iU0;
+    t.iV0   = iDvDx*aT.iU0   + iDvDy*aT.iV0 + iV0;
+
+    ASSERT(Abs(t.iDuDx) <= 1);
+    ASSERT(Abs(t.iDuDy) <= 1);
+    ASSERT(Abs(t.iDvDx) <= 1);
+    ASSERT(Abs(t.iDvDy) <= 1);
+    ASSERT(Abs(t.iDuDx*t.iDvDy - t.iDuDy*t.iDvDx) == 1);
+
+    return t;
+}
+
+EXPORT_C TBool TLcdTransform::operator == (const TLcdTransform& aT) const
+{
+    return (iDuDx == aT.iDuDx) &&
+           (iDuDy == aT.iDuDy) &&
+           (iDvDx == aT.iDvDx) &&
+           (iDvDy == aT.iDvDy) &&
+           (iU0   == aT.iU0) &&
+           (iV0   == aT.iV0)  ;
+}
+
+EXPORT_C TLcdTransform TLcdTransform::Inverse() const
+{
+    TLcdTransform t;
+
+    TInt det = iDuDx*iDvDy - iDuDy*iDvDx;
+
+    ASSERT(Abs(det) == 1);
+
+    TInt a = iDuDx;
+    TInt b = iDuDy;
+    TInt c = iDvDx;
+    TInt d = iDvDy;
+    TInt u = iU0;
+    TInt v = iV0;
+
+    t.iDuDx = d * det;
+    t.iDuDy = - b * det;
+    t.iDvDx = - c * det;
+    t.iDvDy = a * det;
+
+    t.iU0 = (b * v - d * u) * det;
+    t.iV0 = (c * u - a * v) * det;
+
+    return t;
+}
+
+EXPORT_C TLcdTransform Transform(TTransformType aType, const TSize& aSize)
+{
+    TLcdTransform t = TLcdTransform();
+
+    switch (aType)
+    {
+    case ETransNone:
+    {
+        t.iDuDx = 1;
+        t.iDvDx = 0;
+        t.iDuDy = 0;
+        t.iDvDy = 1;
+        t.iU0   = 0;
+        t.iV0   = 0;
+    }
+    break;
+    case ETransMirrorRot180:    // EReflectVert
+    {
+        t.iDuDx = 1;
+        t.iDvDx = 0;
+        t.iDuDy = 0;
+        t.iDvDy = -1;
+        t.iU0   = 0;
+        t.iV0   = aSize.iHeight - 1;
+    }
+    break;
+    case ETransMirror:          // EReflectHorz
+    {
+        t.iDuDx = -1;
+        t.iDvDx = 0;
+        t.iDuDy = 0;
+        t.iDvDy = 1;
+        t.iU0   = aSize.iWidth - 1;
+        t.iV0   = 0;
+    }
+    break;
+    case ETransRot180:          // EReflectVert|EReflectHorz
+    {
+        t.iDuDx = -1;
+        t.iDvDx = 0;
+        t.iDuDy = 0;
+        t.iDvDy = -1;
+        t.iU0 = aSize.iWidth - 1;
+        t.iV0 = aSize.iHeight - 1;
+    }
+    break;
+    case ETransMirrorRot270:    // EReflectDiag
+    {
+        t.iDuDx = 0;
+        t.iDvDx = 1;
+        t.iDuDy = 1;
+        t.iDvDy = 0;
+        t.iU0   = 0;
+        t.iV0   = 0;
+    }
+    break;
+    case ETransRot90:           // EReflectVert|EReflectDiag
+    {
+        t.iDuDx = 0;
+        t.iDvDx = 1;
+        t.iDuDy = -1;
+        t.iDvDy = 0;
+        t.iU0   = aSize.iHeight-1;
+        t.iV0   = 0;
+    }
+    break;
+
+    case ETransRot270:          // EReflectHorz|EReflectDiag
+    {
+        t.iDuDx = 0;
+        t.iDvDx = -1;
+        t.iDuDy = 1;
+        t.iDvDy = 0;
+        t.iU0   = 0;
+        t.iV0   = aSize.iWidth - 1;
+    }
+    break;
+
+    case ETransMirrorRot90:     // EReflectVert|EReflectHorz|EReflectDiag
+    {
+        t.iDuDx = 0;
+        t.iDvDx = -1;
+        t.iDuDy = -1;
+        t.iDvDy = 0;
+        t.iU0 = aSize.iHeight - 1;
+        t.iV0 = aSize.iWidth  - 1;
+    }
+    break;
+    default:
+        ASSERT(aType != aType);     // unknown type.
+        break;
+    }
+
+    return t;
+}
+
+
+EXPORT_C TLcdTransform Identity()
+{
+    TLcdTransform t;
+    t.iDuDx = 1;
+    t.iDuDy = 0;
+    t.iDvDx = 0;
+    t.iDvDy = 1;
+    t.iU0   = 0;
+    t.iV0   = 0;
+    return t;
+}
+
+/**
+ * Compose the vertical reflection.
+ *
+ * Maps from source (image) coords to destination (graphics) coords.
+ */
+EXPORT_C TLcdTransform ReflectVert(const TSize& aSize)
+{
+    return Transform((TTransformType)EReflectVert, aSize);
+}
+
+/**
+ * Compose the horizontal reflection.
+ *
+ * Maps from source (image) coords to destination (graphics) coords.
+ */
+EXPORT_C TLcdTransform ReflectHorz(const TSize& aSize)
+{
+    return Transform((TTransformType)EReflectHorz, aSize);
+}
+
+/**
+ * Compose the diagonal reflection.
+ *
+ * Maps from source (image) coords to destination (graphics) coords.
+ */
+EXPORT_C TLcdTransform ReflectDiag()
+{
+    return Transform((TTransformType)EReflectDiag, TSize(0,0));
+}
+
+/**
+ * Compose translation.
+ *
+ * Maps from source (image) coords to destination (graphics) coords.
+ *
+ */
+EXPORT_C TLcdTransform Translate(const TPoint& aPoint)
+{
+    TLcdTransform t;
+    t.iDuDx = 1;
+    t.iDuDy = 0;
+    t.iDvDx = 0;
+    t.iDvDy = 1;
+    t.iU0   = aPoint.iX;
+    t.iV0   = aPoint.iY;
+    return t;
+}