svgtopt/gfx2d/inc/GfxFloatFixPt.h
changeset 0 d46562c3d99d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svgtopt/gfx2d/inc/GfxFloatFixPt.h	Thu Jan 07 16:19:02 2010 +0200
@@ -0,0 +1,639 @@
+/*
+* Copyright (c) 2002 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:  Graphics Extension Library header file
+*
+*/
+
+
+#ifndef GFXFIXPT_H
+#define GFXFIXPT_H
+#include <VG/openvg.h>
+// Enumeration
+//#define SVG_FLOAT_BUILD
+
+enum TGfxTextAnchor
+    {
+    EGfxTextAnchorStart,
+    EGfxTextAnchorMiddle,
+    EGfxTextAnchorEnd,
+    EGfxTextAnchorNone = -1
+    };
+
+enum TGfxTextDecoration
+    {
+    EGfxTextDecorationReserved,
+    EGfxTextDecorationUnderLine,
+    EGfxTextDecorationOverLine,
+    EGfxTextDecorationLineThrough,
+    EGfxTextDecorationNone = -1
+    };
+
+enum TGfxCapType
+    {
+    EGfxCapButt = 0,
+    EGfxCapRound = 1,
+    EGfxCapSquare = 2
+    };
+
+enum TGfxFilterEdgeCondition
+    {
+    EGfxEdgeNoOp,
+    EGfxEdgeZeroFill,
+    EGfxEdgeMirror
+    };
+
+// Image interporation enumeration
+enum TGfxImageInterpolation
+    {
+    EGfxInterpolationBiLinear,
+    EGfxInterpolationBiCubic,
+    EGfxInterpolationNearestNeighbor
+    };
+
+// Join type enumeration
+enum TGfxJoinType
+    {
+    EGfxJoinMiter = 0,
+    EGfxJoinRound = 1,
+    EGfxJoinBevel = 2
+    };
+
+enum TGfxWindingRule
+    {
+    EGfxWindEvenOdd,
+    EGfxWindNonZero
+    };
+
+enum TGfxSegType
+    {
+    EGfxSegMoveTo=VG_MOVE_TO_ABS,
+    EGfxSegLineTo=VG_LINE_TO_ABS,
+    EGfxSegQuadTo=VG_QUAD_TO_ABS,
+    EGfxSegCubicTo=VG_CUBIC_TO_ABS,
+    EGfxSegClose=VG_CLOSE_PATH
+    };
+
+#ifdef SVG_FLOAT_BUILD
+
+typedef float           SVGReal;
+
+class TFloatFixPt
+    {
+    public:
+
+        static void  GetString( float aFloat, TDes& aBuf );
+       
+        static float ConvertString( const TDesC& aVal );
+
+	   	  static TInt ConvertString( const TDesC& aString, float& aValue );
+
+		    static TInt ConvertString( const TDesC& aString, TFloatFixPt& aValue );
+		 
+        static float Sqrt( float aValue );
+		
+	    static float Cos(float angle); 
+	   
+	    static float SinFloatDouble(float angle);
+	   
+	    static float CosFloatDouble(float angle);
+	   
+	   static float CosineDouble(float x);
+	   
+	    static float TanFloatDouble(float angle);
+	   
+	    static float SinApprox(float angle);
+	   
+	    static float CosApprox(float angle);
+    
+      static float FastSin( const float val );
+    
+      static float FastCos( const float val );
+    
+      static float FastTan( const float val );
+       
+      static float FastASin( const float val );
+       
+      static float FastACos( const float val );
+      
+      static float FastATan( const float val );
+     
+     inline TFloatFixPt();
+
+     inline TFloatFixPt( TInt aVal );
+
+     inline TFloatFixPt( TInt32 aVal );
+
+     inline TFloatFixPt( TReal32 aVal );
+
+     inline TFloatFixPt( const TFloatFixPt& aFixpt );
+
+     inline                  operator TInt32() const;
+
+     inline                  operator TInt() const;
+
+     inline                  operator TReal32() const;
+
+     inline TFloatFixPt&          operator=( TInt32 aVal );
+
+     inline TFloatFixPt&          operator=( TInt aVal );
+
+     inline TFloatFixPt&          operator=( TReal32 aVal );
+
+     inline TFloatFixPt&          operator+=( const TFloatFixPt& aVal );
+
+     inline TFloatFixPt&          operator-=( const TFloatFixPt& aVal );
+
+     inline TFloatFixPt&          operator*=( const TFloatFixPt& aVal );
+
+     inline TFloatFixPt&          operator/=( const TFloatFixPt& aVal );
+
+     inline TFloatFixPt           operator+( const TFloatFixPt& aVal ) const;
+		 
+		 inline TFloatFixPt           operator+( const double& aVal ) const;
+		 
+		 inline TFloatFixPt           operator+( const float& aVal ) const;
+		 
+     inline TFloatFixPt           operator-( const TFloatFixPt& aVal ) const;
+
+		 inline TFloatFixPt           operator-( const double aVal ) const;
+		
+		 inline TFloatFixPt           operator-( const float aVal ) const;
+		 	
+     inline TFloatFixPt           operator*( const TFloatFixPt& aVal ) const;
+	
+		 inline TFloatFixPt           operator*( const double aVal ) const;
+		 
+		 inline TFloatFixPt           operator*( const float aVal ) const;
+		 
+     inline TFloatFixPt           operator/( const TFloatFixPt& aVal ) const;
+	
+		 inline TFloatFixPt           operator/( const double aVal ) const;
+		 
+		 inline TFloatFixPt           operator/( const float aVal ) const;
+		 
+     inline TInt		              operator==( const TFloatFixPt& aVal ) const;
+
+     inline TInt             			operator!=( const TFloatFixPt& aVal ) const;
+
+     inline TInt             			operator>=( const TFloatFixPt& aVal ) const;
+
+     inline TInt		              operator<=( const TFloatFixPt& aVal ) const;
+     
+     inline TInt			            operator>( const TFloatFixPt& aVal ) const;
+
+     inline TInt			            operator<( const TFloatFixPt& aVal ) const;
+
+        /**
+         * Return the number rounded to the next whole number.
+         *
+         * @since 1.0
+         * @return
+         */
+        inline TInt32           Round();
+
+        /**
+         * Return the 32-bit data for this TFixPt.
+         *
+         * @since 1.0
+         * @return 32-bit value
+         */
+        inline TInt32           RawData();
+
+        /**
+         * Return the absolute value for the given number.
+         *
+         * @since 1.0
+         * @param aValue : real number to find absolute value
+         * @return absolute value
+         */
+         TFloatFixPt         Abs( TFloatFixPt& aValue );
+
+
+        /**
+         * Return the square root value for this number.
+         *
+         * @since 1.0
+         * @param aValue : real number to find square root
+         * @return square root value
+         */
+         static TFloatFixPt  Sqrt( TFloatFixPt aValue );
+        
+     public:
+
+     float                    iValue;    // Must be the first data member of this class!
+        
+    };
+
+#include "GfxFloatFixPt.inl"
+
+#else	/*FIXED POINT BUILD*/
+
+typedef int             SVGReal;
+
+const TInt32 KFixPtFrac = 16;
+const TInt32 KFixPtFracVal = ( 1 << KFixPtFrac );
+
+/**
+ * Implementation of a real number using 16.16 bits.
+ *
+ *  @lib Gfx2D.lib
+ *  @since 1.0
+ */
+class TFloatFixPt
+    {
+    public:
+
+        /**
+         * Construct a TFixPt.  The default value is 0.0.
+         *
+         * @since 1.0
+         * @return
+         */
+        inline TFloatFixPt();
+
+        /**
+         * Construct a TFixPt from the given integer value.
+         *
+         * @since 1.0
+         * @param aVal : integer value
+         * @return
+         */
+        inline TFloatFixPt( TInt aVal );
+
+        /**
+         * Construct a TFixPt from the given integer value.
+         *
+         * @since 1.0
+         * @param aVal : integer value
+         * @return
+         */
+        inline TFloatFixPt( TInt32 aVal );
+
+        /**
+         * Construct a TFixPt from the given real 32-bit int.
+         *
+         * @since 1.0
+         * @param aVal : integer value
+         * @param aBool : not used.
+         * @return
+         */
+        inline TFloatFixPt( TInt aVal, TBool aBool );
+
+        /**
+         * Construct a TFixPt from the given TReal32.
+         *
+         * @since 1.0
+         * @param aVal : value to copy from
+         * @return
+         */
+        inline TFloatFixPt( TReal32 aVal );
+
+        /**
+         * Construct a TFixPt from the given TFixPt.
+         *
+         * @since 1.0
+         * @param aFixpt : value to copy from
+         * @return
+         */
+        inline TFloatFixPt( const TFloatFixPt& aFixpt );
+
+
+        /**
+         * Return the fractional portion as an int representation.
+         *
+         * @since 1.0
+         * @return the fractional portion value
+         */
+        inline TInt32 FracAsInt();
+
+
+        /**
+         * Casting operator to TInt32.
+         *
+         * @since 1.0
+         * @return
+         */
+
+        inline                  operator TInt32() const;
+
+        /**
+         * Casting operator to TInt.
+         *
+         * @since 1.0
+         * @return
+         */
+        inline                  operator TInt() const;
+
+        /**
+         * Casting operator to TReal32.
+         *
+         * @since 1.0
+         * @return
+         */
+        inline                  operator TReal32() const;
+
+        /**
+         * Assignment operator.
+         *
+         * @since 1.0
+         * @param aVal : value to assign from.
+         * @return
+         */
+        inline TFloatFixPt&          operator=( TInt32 aVal );
+
+        /**
+         * Assignment operator.
+         *
+         * @since 1.0
+         * @param aVal : value to assign from.
+         * @return
+         */
+        inline TFloatFixPt&          operator=( TInt aVal );
+
+        /**
+         * Assignment operator.
+         *
+         * @since 1.0
+         * @param aVal : value to assign from.
+         * @return
+         */
+        inline TFloatFixPt&          operator=( TReal32 aVal );
+
+        /**
+         * Addition assignment operator.
+         *
+         * @since 1.0
+         * @param aVal : value to add with.
+         * @return
+         */
+        inline TFloatFixPt&          operator+=( const TFloatFixPt& aVal );
+
+        /**
+         * Subtraction assignment operator.
+         *
+         * @since 1.0
+         * @param aVal : value to substract.
+         * @return
+         */
+        inline TFloatFixPt&          operator-=( const TFloatFixPt& aVal );
+
+        /**
+         * Multiplication assignment operator.
+         *
+         * @since 1.0
+         * @param aVal : value to multiply with.
+         * @return
+         */
+        inline TFloatFixPt&          operator*=( const TFloatFixPt& aVal );
+
+        /**
+         * Division assignment operator.
+         *
+         * @since 1.0
+         * @param aVal : value to divide with.
+         * @return
+         */
+        inline TFloatFixPt&          operator/=( const TFloatFixPt& aVal );
+
+
+        /**
+         * Addition operator.
+         *
+         * @since 1.0
+         * @param aVal : value to add with.
+         * @return
+         */
+        inline TFloatFixPt           operator+( const TFloatFixPt& aVal ) const;
+
+        /**
+         * Subtraction operator.
+         *
+         * @since 1.0
+         * @param aVal : value to subtract.
+         * @return
+         */
+        inline TFloatFixPt           operator-( const TFloatFixPt& aVal ) const;
+			
+        /**
+         * Multiplication operator.
+         *
+         * @since 1.0
+         * @param aVal : value to multiply with.
+         * @return
+         */
+
+        inline TFloatFixPt           operator*( const TFloatFixPt& aVal ) const;
+
+        /**
+         * Division operator.
+         *
+         * @since 1.0
+         * @param aVal : value to divide with.
+         * @return
+         */
+        inline TFloatFixPt           operator/( const TFloatFixPt& aVal ) const;
+
+        /**
+         * Equal operator.
+         *
+         * @since 1.0
+         * @param aVal : value to compare.
+         * @return non-zero if equal
+         */
+
+        inline TInt             operator==( const TFloatFixPt& aVal ) const;
+
+        /**
+         * Not Equals operator.
+         *
+         * @since 1.0
+         * @param aVal : value to compare.
+         * @return non-zero if not equal
+         */
+        inline TInt             operator!=( const TFloatFixPt& aVal ) const;
+
+        /**
+         * Greater than or equal to operator.
+         *
+         * @since 1.0
+         * @param aVal : value to compare.
+         * @return non-zero if greater than or equal to
+         */
+        inline TInt             operator>=( const TFloatFixPt& aVal ) const;
+
+        /**
+         * Less than or equal to operator.
+         *
+         * @since 1.0
+         * @param aVal : value to compare.
+         * @return non-zero if less than or equal to
+         */
+        inline TInt             operator<=( const TFloatFixPt& aVal ) const;
+
+        /**
+         * Greater than operator.
+         *
+         * @since 1.0
+         * @param aVal : value to compare.
+         * @return non-zero if greater than
+         */
+        inline TInt             operator>( const TFloatFixPt& aVal ) const;
+
+        /**
+         * Less than operator.
+         *
+         * @since 1.0
+         * @param aVal : value to compare.
+         * @return non-zero if less than
+         */
+        inline TInt             operator<( const TFloatFixPt& aVal ) const;
+
+		/**
+         * Operator to left shift
+         *
+         * @since 1.0
+         * @param aN : bits to be shifted.
+         * @return
+         */
+
+        inline TFloatFixPt           operator<<( const TInt aN ) const;
+
+        /**
+         * operator to right shift.
+         *
+         * @since 1.0
+         * @param aBuf : string output storage.
+         * @return value obtained after shifeting
+         */
+
+        inline TFloatFixPt           operator>>( const TInt aN ) const;
+
+
+
+		/**
+         * Get the string representation of this real number.
+         *
+         * @since 1.0
+         * @param aN : bits to be shifted
+         * @return value obtained after shifeting
+         */
+         void           GetString( TDes& aBuf ) const;
+
+        /**
+         * Parse the given string for a TFixPt.
+         *
+         * @since 1.0
+         * @param aVal : string containing a real number.
+         * @return TFixPt equal to string representation.
+         */
+         static TFloatFixPt  ConvertString( const TDesC& aVal );
+
+        /**
+         * Parse the given string for a TFixPt.
+         *
+         * @since 1.0
+         * @param aVal : string containing a real number.
+         * @param aVal : parsed number.
+         * @return Error code (KErrNone if no errors).
+         */
+         static TInt ConvertString( const TDesC& aValueString, TFloatFixPt& aValue );
+
+        /**
+         * Return the number rounded to the next whole number.
+         *
+         * @since 1.0
+         * @return
+         */
+        inline TInt32           Round();
+
+        /**
+         * Return the 32-bit data for this TFixPt.
+         *
+         * @since 1.0
+         * @return 32-bit value
+         */
+        inline TInt32           RawData();
+
+        /**
+         * Return the absolute value for the given number.
+         *
+         * @since 1.0
+         * @param aValue : real number to find absolute value
+         * @return absolute value
+         */
+         TFloatFixPt         Abs( TFloatFixPt& aValue );
+
+
+        /**
+         * Return the square root value for this number.
+         *
+         * @since 1.0
+         * @param aValue : real number to find square root
+         * @return square root value
+         */
+         static TFloatFixPt  Sqrt( TFloatFixPt aValue );
+
+        /**
+         * Return the square root value for the given number.
+         *
+         * @since 1.0
+         * @param aValue : 32-bit representation of real number
+         * @param aFracbits: number of bits allocated for fractional portion.
+         * @return square root value
+         */
+         static TInt32  FixedSqrtGeneral( TInt32 aValue, TUint32 aFracbits );
+
+    private:
+
+        /**
+         * Optimized method to do multiplication using assembly.
+         *
+         * @since 1.0
+         * @param aValue : real number to find multiply with
+         * @return
+         */
+        inline void             GfxMultiplyAsm( TInt aValue );
+
+	public:
+
+        TInt                    iValue;    // Must be the first data member of this class!
+
+    };
+
+#ifdef SVG_FLOAT_BUILD
+#define KFloatFixOne = (TFloatFixPt(1))
+#define KFloatFixZero = (TFloatFixPt())
+#define KMAXFLOATFIXVALUE (1e38f)
+#define KMINFLOATFIXVALUE (-1e38f)
+#define KMAXFLOATFIX (TFloatFixPt( KMAXFLOATFIXVALUE ))
+#define KMINFLOATFIX (TFloatFixPt( KMINFLOATFIXVALUE ))
+#else
+#define KFloatFixOne (TFloatFixPt( 0x10000, ETrue ))
+#define KFloatFixZero (TFloatFixPt())
+#define KMAXFLOATFIXVALUE  (0x7fff)
+#define KMINFLOATFIXVALUE (-0x7fff)
+#define KMAXFLOATFIX (TFloatFixPt( 0x7fff0000, ETrue ))
+#define KMINFLOATFIX (TFloatFixPt( -0x7fff0000, ETrue ))
+
+#endif
+
+typedef struct
+    {
+    SVGReal         matrix[2][3];
+    } SVGMatrix2x3;
+    
+#include "GfxFloatFixPt.inl"
+
+#endif
+#endif      // GFXFIXPT_H