svgtopt/gfx2d/inc/GfxFloatFixPt.h
author hgs
Wed, 03 Nov 2010 18:56:10 +0200
changeset 46 88edb906c587
permissions -rw-r--r--
201044
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
46
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:  Graphics Extension Library header file
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
#ifndef GFXFIXPT_H
hgs
parents:
diff changeset
    20
#define GFXFIXPT_H
hgs
parents:
diff changeset
    21
#include <VG/openvg.h>
hgs
parents:
diff changeset
    22
// Enumeration
hgs
parents:
diff changeset
    23
//#define SVG_FLOAT_BUILD
hgs
parents:
diff changeset
    24
hgs
parents:
diff changeset
    25
enum TGfxTextAnchor
hgs
parents:
diff changeset
    26
    {
hgs
parents:
diff changeset
    27
    EGfxTextAnchorStart,
hgs
parents:
diff changeset
    28
    EGfxTextAnchorMiddle,
hgs
parents:
diff changeset
    29
    EGfxTextAnchorEnd,
hgs
parents:
diff changeset
    30
    EGfxTextAnchorNone = -1
hgs
parents:
diff changeset
    31
    };
hgs
parents:
diff changeset
    32
hgs
parents:
diff changeset
    33
enum TGfxTextDecoration
hgs
parents:
diff changeset
    34
    {
hgs
parents:
diff changeset
    35
    EGfxTextDecorationReserved,
hgs
parents:
diff changeset
    36
    EGfxTextDecorationUnderLine,
hgs
parents:
diff changeset
    37
    EGfxTextDecorationOverLine,
hgs
parents:
diff changeset
    38
    EGfxTextDecorationLineThrough,
hgs
parents:
diff changeset
    39
    EGfxTextDecorationNone = -1
hgs
parents:
diff changeset
    40
    };
hgs
parents:
diff changeset
    41
hgs
parents:
diff changeset
    42
enum TGfxCapType
hgs
parents:
diff changeset
    43
    {
hgs
parents:
diff changeset
    44
    EGfxCapButt = 0,
hgs
parents:
diff changeset
    45
    EGfxCapRound = 1,
hgs
parents:
diff changeset
    46
    EGfxCapSquare = 2
hgs
parents:
diff changeset
    47
    };
hgs
parents:
diff changeset
    48
hgs
parents:
diff changeset
    49
enum TGfxFilterEdgeCondition
hgs
parents:
diff changeset
    50
    {
hgs
parents:
diff changeset
    51
    EGfxEdgeNoOp,
hgs
parents:
diff changeset
    52
    EGfxEdgeZeroFill,
hgs
parents:
diff changeset
    53
    EGfxEdgeMirror
hgs
parents:
diff changeset
    54
    };
hgs
parents:
diff changeset
    55
hgs
parents:
diff changeset
    56
// Image interporation enumeration
hgs
parents:
diff changeset
    57
enum TGfxImageInterpolation
hgs
parents:
diff changeset
    58
    {
hgs
parents:
diff changeset
    59
    EGfxInterpolationBiLinear,
hgs
parents:
diff changeset
    60
    EGfxInterpolationBiCubic,
hgs
parents:
diff changeset
    61
    EGfxInterpolationNearestNeighbor
hgs
parents:
diff changeset
    62
    };
hgs
parents:
diff changeset
    63
hgs
parents:
diff changeset
    64
// Join type enumeration
hgs
parents:
diff changeset
    65
enum TGfxJoinType
hgs
parents:
diff changeset
    66
    {
hgs
parents:
diff changeset
    67
    EGfxJoinMiter = 0,
hgs
parents:
diff changeset
    68
    EGfxJoinRound = 1,
hgs
parents:
diff changeset
    69
    EGfxJoinBevel = 2
hgs
parents:
diff changeset
    70
    };
hgs
parents:
diff changeset
    71
hgs
parents:
diff changeset
    72
enum TGfxWindingRule
hgs
parents:
diff changeset
    73
    {
hgs
parents:
diff changeset
    74
    EGfxWindEvenOdd,
hgs
parents:
diff changeset
    75
    EGfxWindNonZero
hgs
parents:
diff changeset
    76
    };
hgs
parents:
diff changeset
    77
hgs
parents:
diff changeset
    78
enum TGfxSegType
hgs
parents:
diff changeset
    79
    {
hgs
parents:
diff changeset
    80
    EGfxSegMoveTo=VG_MOVE_TO_ABS,
hgs
parents:
diff changeset
    81
    EGfxSegLineTo=VG_LINE_TO_ABS,
hgs
parents:
diff changeset
    82
    EGfxSegQuadTo=VG_QUAD_TO_ABS,
hgs
parents:
diff changeset
    83
    EGfxSegCubicTo=VG_CUBIC_TO_ABS,
hgs
parents:
diff changeset
    84
    EGfxSegClose=VG_CLOSE_PATH
hgs
parents:
diff changeset
    85
    };
hgs
parents:
diff changeset
    86
hgs
parents:
diff changeset
    87
#ifdef SVG_FLOAT_BUILD
hgs
parents:
diff changeset
    88
hgs
parents:
diff changeset
    89
typedef float           SVGReal;
hgs
parents:
diff changeset
    90
hgs
parents:
diff changeset
    91
class TFloatFixPt
hgs
parents:
diff changeset
    92
    {
hgs
parents:
diff changeset
    93
    public:
hgs
parents:
diff changeset
    94
hgs
parents:
diff changeset
    95
        static void  GetString( float aFloat, TDes& aBuf );
hgs
parents:
diff changeset
    96
       
hgs
parents:
diff changeset
    97
        static float ConvertString( const TDesC& aVal );
hgs
parents:
diff changeset
    98
hgs
parents:
diff changeset
    99
	   	  static TInt ConvertString( const TDesC& aString, float& aValue );
hgs
parents:
diff changeset
   100
hgs
parents:
diff changeset
   101
		    static TInt ConvertString( const TDesC& aString, TFloatFixPt& aValue );
hgs
parents:
diff changeset
   102
		 
hgs
parents:
diff changeset
   103
        static float Sqrt( float aValue );
hgs
parents:
diff changeset
   104
		
hgs
parents:
diff changeset
   105
	    static float Cos(float angle); 
hgs
parents:
diff changeset
   106
	   
hgs
parents:
diff changeset
   107
	    static float SinFloatDouble(float angle);
hgs
parents:
diff changeset
   108
	   
hgs
parents:
diff changeset
   109
	    static float CosFloatDouble(float angle);
hgs
parents:
diff changeset
   110
	   
hgs
parents:
diff changeset
   111
	   static float CosineDouble(float x);
hgs
parents:
diff changeset
   112
	   
hgs
parents:
diff changeset
   113
	    static float TanFloatDouble(float angle);
hgs
parents:
diff changeset
   114
	   
hgs
parents:
diff changeset
   115
	    static float SinApprox(float angle);
hgs
parents:
diff changeset
   116
	   
hgs
parents:
diff changeset
   117
	    static float CosApprox(float angle);
hgs
parents:
diff changeset
   118
    
hgs
parents:
diff changeset
   119
      static float FastSin( const float val );
hgs
parents:
diff changeset
   120
    
hgs
parents:
diff changeset
   121
      static float FastCos( const float val );
hgs
parents:
diff changeset
   122
    
hgs
parents:
diff changeset
   123
      static float FastTan( const float val );
hgs
parents:
diff changeset
   124
       
hgs
parents:
diff changeset
   125
      static float FastASin( const float val );
hgs
parents:
diff changeset
   126
       
hgs
parents:
diff changeset
   127
      static float FastACos( const float val );
hgs
parents:
diff changeset
   128
      
hgs
parents:
diff changeset
   129
      static float FastATan( const float val );
hgs
parents:
diff changeset
   130
     
hgs
parents:
diff changeset
   131
     inline TFloatFixPt();
hgs
parents:
diff changeset
   132
hgs
parents:
diff changeset
   133
     inline TFloatFixPt( TInt aVal );
hgs
parents:
diff changeset
   134
hgs
parents:
diff changeset
   135
     inline TFloatFixPt( TInt32 aVal );
hgs
parents:
diff changeset
   136
hgs
parents:
diff changeset
   137
     inline TFloatFixPt( TReal32 aVal );
hgs
parents:
diff changeset
   138
hgs
parents:
diff changeset
   139
     inline TFloatFixPt( const TFloatFixPt& aFixpt );
hgs
parents:
diff changeset
   140
hgs
parents:
diff changeset
   141
     inline                  operator TInt32() const;
hgs
parents:
diff changeset
   142
hgs
parents:
diff changeset
   143
     inline                  operator TInt() const;
hgs
parents:
diff changeset
   144
hgs
parents:
diff changeset
   145
     inline                  operator TReal32() const;
hgs
parents:
diff changeset
   146
hgs
parents:
diff changeset
   147
     inline TFloatFixPt&          operator=( TInt32 aVal );
hgs
parents:
diff changeset
   148
hgs
parents:
diff changeset
   149
     inline TFloatFixPt&          operator=( TInt aVal );
hgs
parents:
diff changeset
   150
hgs
parents:
diff changeset
   151
     inline TFloatFixPt&          operator=( TReal32 aVal );
hgs
parents:
diff changeset
   152
hgs
parents:
diff changeset
   153
     inline TFloatFixPt&          operator+=( const TFloatFixPt& aVal );
hgs
parents:
diff changeset
   154
hgs
parents:
diff changeset
   155
     inline TFloatFixPt&          operator-=( const TFloatFixPt& aVal );
hgs
parents:
diff changeset
   156
hgs
parents:
diff changeset
   157
     inline TFloatFixPt&          operator*=( const TFloatFixPt& aVal );
hgs
parents:
diff changeset
   158
hgs
parents:
diff changeset
   159
     inline TFloatFixPt&          operator/=( const TFloatFixPt& aVal );
hgs
parents:
diff changeset
   160
hgs
parents:
diff changeset
   161
     inline TFloatFixPt           operator+( const TFloatFixPt& aVal ) const;
hgs
parents:
diff changeset
   162
		 
hgs
parents:
diff changeset
   163
		 inline TFloatFixPt           operator+( const double& aVal ) const;
hgs
parents:
diff changeset
   164
		 
hgs
parents:
diff changeset
   165
		 inline TFloatFixPt           operator+( const float& aVal ) const;
hgs
parents:
diff changeset
   166
		 
hgs
parents:
diff changeset
   167
     inline TFloatFixPt           operator-( const TFloatFixPt& aVal ) const;
hgs
parents:
diff changeset
   168
hgs
parents:
diff changeset
   169
		 inline TFloatFixPt           operator-( const double aVal ) const;
hgs
parents:
diff changeset
   170
		
hgs
parents:
diff changeset
   171
		 inline TFloatFixPt           operator-( const float aVal ) const;
hgs
parents:
diff changeset
   172
		 	
hgs
parents:
diff changeset
   173
     inline TFloatFixPt           operator*( const TFloatFixPt& aVal ) const;
hgs
parents:
diff changeset
   174
	
hgs
parents:
diff changeset
   175
		 inline TFloatFixPt           operator*( const double aVal ) const;
hgs
parents:
diff changeset
   176
		 
hgs
parents:
diff changeset
   177
		 inline TFloatFixPt           operator*( const float aVal ) const;
hgs
parents:
diff changeset
   178
		 
hgs
parents:
diff changeset
   179
     inline TFloatFixPt           operator/( const TFloatFixPt& aVal ) const;
hgs
parents:
diff changeset
   180
	
hgs
parents:
diff changeset
   181
		 inline TFloatFixPt           operator/( const double aVal ) const;
hgs
parents:
diff changeset
   182
		 
hgs
parents:
diff changeset
   183
		 inline TFloatFixPt           operator/( const float aVal ) const;
hgs
parents:
diff changeset
   184
		 
hgs
parents:
diff changeset
   185
     inline TInt		              operator==( const TFloatFixPt& aVal ) const;
hgs
parents:
diff changeset
   186
hgs
parents:
diff changeset
   187
     inline TInt             			operator!=( const TFloatFixPt& aVal ) const;
hgs
parents:
diff changeset
   188
hgs
parents:
diff changeset
   189
     inline TInt             			operator>=( const TFloatFixPt& aVal ) const;
hgs
parents:
diff changeset
   190
hgs
parents:
diff changeset
   191
     inline TInt		              operator<=( const TFloatFixPt& aVal ) const;
hgs
parents:
diff changeset
   192
     
hgs
parents:
diff changeset
   193
     inline TInt			            operator>( const TFloatFixPt& aVal ) const;
hgs
parents:
diff changeset
   194
hgs
parents:
diff changeset
   195
     inline TInt			            operator<( const TFloatFixPt& aVal ) const;
hgs
parents:
diff changeset
   196
hgs
parents:
diff changeset
   197
        /**
hgs
parents:
diff changeset
   198
         * Return the number rounded to the next whole number.
hgs
parents:
diff changeset
   199
         *
hgs
parents:
diff changeset
   200
         * @since 1.0
hgs
parents:
diff changeset
   201
         * @return
hgs
parents:
diff changeset
   202
         */
hgs
parents:
diff changeset
   203
        inline TInt32           Round();
hgs
parents:
diff changeset
   204
hgs
parents:
diff changeset
   205
        /**
hgs
parents:
diff changeset
   206
         * Return the 32-bit data for this TFixPt.
hgs
parents:
diff changeset
   207
         *
hgs
parents:
diff changeset
   208
         * @since 1.0
hgs
parents:
diff changeset
   209
         * @return 32-bit value
hgs
parents:
diff changeset
   210
         */
hgs
parents:
diff changeset
   211
        inline TInt32           RawData();
hgs
parents:
diff changeset
   212
hgs
parents:
diff changeset
   213
        /**
hgs
parents:
diff changeset
   214
         * Return the absolute value for the given number.
hgs
parents:
diff changeset
   215
         *
hgs
parents:
diff changeset
   216
         * @since 1.0
hgs
parents:
diff changeset
   217
         * @param aValue : real number to find absolute value
hgs
parents:
diff changeset
   218
         * @return absolute value
hgs
parents:
diff changeset
   219
         */
hgs
parents:
diff changeset
   220
         TFloatFixPt         Abs( TFloatFixPt& aValue );
hgs
parents:
diff changeset
   221
hgs
parents:
diff changeset
   222
hgs
parents:
diff changeset
   223
        /**
hgs
parents:
diff changeset
   224
         * Return the square root value for this number.
hgs
parents:
diff changeset
   225
         *
hgs
parents:
diff changeset
   226
         * @since 1.0
hgs
parents:
diff changeset
   227
         * @param aValue : real number to find square root
hgs
parents:
diff changeset
   228
         * @return square root value
hgs
parents:
diff changeset
   229
         */
hgs
parents:
diff changeset
   230
         static TFloatFixPt  Sqrt( TFloatFixPt aValue );
hgs
parents:
diff changeset
   231
        
hgs
parents:
diff changeset
   232
     public:
hgs
parents:
diff changeset
   233
hgs
parents:
diff changeset
   234
     float                    iValue;    // Must be the first data member of this class!
hgs
parents:
diff changeset
   235
        
hgs
parents:
diff changeset
   236
    };
hgs
parents:
diff changeset
   237
hgs
parents:
diff changeset
   238
#include "GfxFloatFixPt.inl"
hgs
parents:
diff changeset
   239
hgs
parents:
diff changeset
   240
#else	/*FIXED POINT BUILD*/
hgs
parents:
diff changeset
   241
hgs
parents:
diff changeset
   242
typedef int             SVGReal;
hgs
parents:
diff changeset
   243
hgs
parents:
diff changeset
   244
const TInt32 KFixPtFrac = 16;
hgs
parents:
diff changeset
   245
const TInt32 KFixPtFracVal = ( 1 << KFixPtFrac );
hgs
parents:
diff changeset
   246
hgs
parents:
diff changeset
   247
/**
hgs
parents:
diff changeset
   248
 * Implementation of a real number using 16.16 bits.
hgs
parents:
diff changeset
   249
 *
hgs
parents:
diff changeset
   250
 *  @lib Gfx2D.lib
hgs
parents:
diff changeset
   251
 *  @since 1.0
hgs
parents:
diff changeset
   252
 */
hgs
parents:
diff changeset
   253
class TFloatFixPt
hgs
parents:
diff changeset
   254
    {
hgs
parents:
diff changeset
   255
    public:
hgs
parents:
diff changeset
   256
hgs
parents:
diff changeset
   257
        /**
hgs
parents:
diff changeset
   258
         * Construct a TFixPt.  The default value is 0.0.
hgs
parents:
diff changeset
   259
         *
hgs
parents:
diff changeset
   260
         * @since 1.0
hgs
parents:
diff changeset
   261
         * @return
hgs
parents:
diff changeset
   262
         */
hgs
parents:
diff changeset
   263
        inline TFloatFixPt();
hgs
parents:
diff changeset
   264
hgs
parents:
diff changeset
   265
        /**
hgs
parents:
diff changeset
   266
         * Construct a TFixPt from the given integer value.
hgs
parents:
diff changeset
   267
         *
hgs
parents:
diff changeset
   268
         * @since 1.0
hgs
parents:
diff changeset
   269
         * @param aVal : integer value
hgs
parents:
diff changeset
   270
         * @return
hgs
parents:
diff changeset
   271
         */
hgs
parents:
diff changeset
   272
        inline TFloatFixPt( TInt aVal );
hgs
parents:
diff changeset
   273
hgs
parents:
diff changeset
   274
        /**
hgs
parents:
diff changeset
   275
         * Construct a TFixPt from the given integer value.
hgs
parents:
diff changeset
   276
         *
hgs
parents:
diff changeset
   277
         * @since 1.0
hgs
parents:
diff changeset
   278
         * @param aVal : integer value
hgs
parents:
diff changeset
   279
         * @return
hgs
parents:
diff changeset
   280
         */
hgs
parents:
diff changeset
   281
        inline TFloatFixPt( TInt32 aVal );
hgs
parents:
diff changeset
   282
hgs
parents:
diff changeset
   283
        /**
hgs
parents:
diff changeset
   284
         * Construct a TFixPt from the given real 32-bit int.
hgs
parents:
diff changeset
   285
         *
hgs
parents:
diff changeset
   286
         * @since 1.0
hgs
parents:
diff changeset
   287
         * @param aVal : integer value
hgs
parents:
diff changeset
   288
         * @param aBool : not used.
hgs
parents:
diff changeset
   289
         * @return
hgs
parents:
diff changeset
   290
         */
hgs
parents:
diff changeset
   291
        inline TFloatFixPt( TInt aVal, TBool aBool );
hgs
parents:
diff changeset
   292
hgs
parents:
diff changeset
   293
        /**
hgs
parents:
diff changeset
   294
         * Construct a TFixPt from the given TReal32.
hgs
parents:
diff changeset
   295
         *
hgs
parents:
diff changeset
   296
         * @since 1.0
hgs
parents:
diff changeset
   297
         * @param aVal : value to copy from
hgs
parents:
diff changeset
   298
         * @return
hgs
parents:
diff changeset
   299
         */
hgs
parents:
diff changeset
   300
        inline TFloatFixPt( TReal32 aVal );
hgs
parents:
diff changeset
   301
hgs
parents:
diff changeset
   302
        /**
hgs
parents:
diff changeset
   303
         * Construct a TFixPt from the given TFixPt.
hgs
parents:
diff changeset
   304
         *
hgs
parents:
diff changeset
   305
         * @since 1.0
hgs
parents:
diff changeset
   306
         * @param aFixpt : value to copy from
hgs
parents:
diff changeset
   307
         * @return
hgs
parents:
diff changeset
   308
         */
hgs
parents:
diff changeset
   309
        inline TFloatFixPt( const TFloatFixPt& aFixpt );
hgs
parents:
diff changeset
   310
hgs
parents:
diff changeset
   311
hgs
parents:
diff changeset
   312
        /**
hgs
parents:
diff changeset
   313
         * Return the fractional portion as an int representation.
hgs
parents:
diff changeset
   314
         *
hgs
parents:
diff changeset
   315
         * @since 1.0
hgs
parents:
diff changeset
   316
         * @return the fractional portion value
hgs
parents:
diff changeset
   317
         */
hgs
parents:
diff changeset
   318
        inline TInt32 FracAsInt();
hgs
parents:
diff changeset
   319
hgs
parents:
diff changeset
   320
hgs
parents:
diff changeset
   321
        /**
hgs
parents:
diff changeset
   322
         * Casting operator to TInt32.
hgs
parents:
diff changeset
   323
         *
hgs
parents:
diff changeset
   324
         * @since 1.0
hgs
parents:
diff changeset
   325
         * @return
hgs
parents:
diff changeset
   326
         */
hgs
parents:
diff changeset
   327
hgs
parents:
diff changeset
   328
        inline                  operator TInt32() const;
hgs
parents:
diff changeset
   329
hgs
parents:
diff changeset
   330
        /**
hgs
parents:
diff changeset
   331
         * Casting operator to TInt.
hgs
parents:
diff changeset
   332
         *
hgs
parents:
diff changeset
   333
         * @since 1.0
hgs
parents:
diff changeset
   334
         * @return
hgs
parents:
diff changeset
   335
         */
hgs
parents:
diff changeset
   336
        inline                  operator TInt() const;
hgs
parents:
diff changeset
   337
hgs
parents:
diff changeset
   338
        /**
hgs
parents:
diff changeset
   339
         * Casting operator to TReal32.
hgs
parents:
diff changeset
   340
         *
hgs
parents:
diff changeset
   341
         * @since 1.0
hgs
parents:
diff changeset
   342
         * @return
hgs
parents:
diff changeset
   343
         */
hgs
parents:
diff changeset
   344
        inline                  operator TReal32() const;
hgs
parents:
diff changeset
   345
hgs
parents:
diff changeset
   346
        /**
hgs
parents:
diff changeset
   347
         * Assignment operator.
hgs
parents:
diff changeset
   348
         *
hgs
parents:
diff changeset
   349
         * @since 1.0
hgs
parents:
diff changeset
   350
         * @param aVal : value to assign from.
hgs
parents:
diff changeset
   351
         * @return
hgs
parents:
diff changeset
   352
         */
hgs
parents:
diff changeset
   353
        inline TFloatFixPt&          operator=( TInt32 aVal );
hgs
parents:
diff changeset
   354
hgs
parents:
diff changeset
   355
        /**
hgs
parents:
diff changeset
   356
         * Assignment operator.
hgs
parents:
diff changeset
   357
         *
hgs
parents:
diff changeset
   358
         * @since 1.0
hgs
parents:
diff changeset
   359
         * @param aVal : value to assign from.
hgs
parents:
diff changeset
   360
         * @return
hgs
parents:
diff changeset
   361
         */
hgs
parents:
diff changeset
   362
        inline TFloatFixPt&          operator=( TInt aVal );
hgs
parents:
diff changeset
   363
hgs
parents:
diff changeset
   364
        /**
hgs
parents:
diff changeset
   365
         * Assignment operator.
hgs
parents:
diff changeset
   366
         *
hgs
parents:
diff changeset
   367
         * @since 1.0
hgs
parents:
diff changeset
   368
         * @param aVal : value to assign from.
hgs
parents:
diff changeset
   369
         * @return
hgs
parents:
diff changeset
   370
         */
hgs
parents:
diff changeset
   371
        inline TFloatFixPt&          operator=( TReal32 aVal );
hgs
parents:
diff changeset
   372
hgs
parents:
diff changeset
   373
        /**
hgs
parents:
diff changeset
   374
         * Addition assignment operator.
hgs
parents:
diff changeset
   375
         *
hgs
parents:
diff changeset
   376
         * @since 1.0
hgs
parents:
diff changeset
   377
         * @param aVal : value to add with.
hgs
parents:
diff changeset
   378
         * @return
hgs
parents:
diff changeset
   379
         */
hgs
parents:
diff changeset
   380
        inline TFloatFixPt&          operator+=( const TFloatFixPt& aVal );
hgs
parents:
diff changeset
   381
hgs
parents:
diff changeset
   382
        /**
hgs
parents:
diff changeset
   383
         * Subtraction assignment operator.
hgs
parents:
diff changeset
   384
         *
hgs
parents:
diff changeset
   385
         * @since 1.0
hgs
parents:
diff changeset
   386
         * @param aVal : value to substract.
hgs
parents:
diff changeset
   387
         * @return
hgs
parents:
diff changeset
   388
         */
hgs
parents:
diff changeset
   389
        inline TFloatFixPt&          operator-=( const TFloatFixPt& aVal );
hgs
parents:
diff changeset
   390
hgs
parents:
diff changeset
   391
        /**
hgs
parents:
diff changeset
   392
         * Multiplication assignment operator.
hgs
parents:
diff changeset
   393
         *
hgs
parents:
diff changeset
   394
         * @since 1.0
hgs
parents:
diff changeset
   395
         * @param aVal : value to multiply with.
hgs
parents:
diff changeset
   396
         * @return
hgs
parents:
diff changeset
   397
         */
hgs
parents:
diff changeset
   398
        inline TFloatFixPt&          operator*=( const TFloatFixPt& aVal );
hgs
parents:
diff changeset
   399
hgs
parents:
diff changeset
   400
        /**
hgs
parents:
diff changeset
   401
         * Division assignment operator.
hgs
parents:
diff changeset
   402
         *
hgs
parents:
diff changeset
   403
         * @since 1.0
hgs
parents:
diff changeset
   404
         * @param aVal : value to divide with.
hgs
parents:
diff changeset
   405
         * @return
hgs
parents:
diff changeset
   406
         */
hgs
parents:
diff changeset
   407
        inline TFloatFixPt&          operator/=( const TFloatFixPt& aVal );
hgs
parents:
diff changeset
   408
hgs
parents:
diff changeset
   409
hgs
parents:
diff changeset
   410
        /**
hgs
parents:
diff changeset
   411
         * Addition operator.
hgs
parents:
diff changeset
   412
         *
hgs
parents:
diff changeset
   413
         * @since 1.0
hgs
parents:
diff changeset
   414
         * @param aVal : value to add with.
hgs
parents:
diff changeset
   415
         * @return
hgs
parents:
diff changeset
   416
         */
hgs
parents:
diff changeset
   417
        inline TFloatFixPt           operator+( const TFloatFixPt& aVal ) const;
hgs
parents:
diff changeset
   418
hgs
parents:
diff changeset
   419
        /**
hgs
parents:
diff changeset
   420
         * Subtraction operator.
hgs
parents:
diff changeset
   421
         *
hgs
parents:
diff changeset
   422
         * @since 1.0
hgs
parents:
diff changeset
   423
         * @param aVal : value to subtract.
hgs
parents:
diff changeset
   424
         * @return
hgs
parents:
diff changeset
   425
         */
hgs
parents:
diff changeset
   426
        inline TFloatFixPt           operator-( const TFloatFixPt& aVal ) const;
hgs
parents:
diff changeset
   427
			
hgs
parents:
diff changeset
   428
        /**
hgs
parents:
diff changeset
   429
         * Multiplication operator.
hgs
parents:
diff changeset
   430
         *
hgs
parents:
diff changeset
   431
         * @since 1.0
hgs
parents:
diff changeset
   432
         * @param aVal : value to multiply with.
hgs
parents:
diff changeset
   433
         * @return
hgs
parents:
diff changeset
   434
         */
hgs
parents:
diff changeset
   435
hgs
parents:
diff changeset
   436
        inline TFloatFixPt           operator*( const TFloatFixPt& aVal ) const;
hgs
parents:
diff changeset
   437
hgs
parents:
diff changeset
   438
        /**
hgs
parents:
diff changeset
   439
         * Division operator.
hgs
parents:
diff changeset
   440
         *
hgs
parents:
diff changeset
   441
         * @since 1.0
hgs
parents:
diff changeset
   442
         * @param aVal : value to divide with.
hgs
parents:
diff changeset
   443
         * @return
hgs
parents:
diff changeset
   444
         */
hgs
parents:
diff changeset
   445
        inline TFloatFixPt           operator/( const TFloatFixPt& aVal ) const;
hgs
parents:
diff changeset
   446
hgs
parents:
diff changeset
   447
        /**
hgs
parents:
diff changeset
   448
         * Equal operator.
hgs
parents:
diff changeset
   449
         *
hgs
parents:
diff changeset
   450
         * @since 1.0
hgs
parents:
diff changeset
   451
         * @param aVal : value to compare.
hgs
parents:
diff changeset
   452
         * @return non-zero if equal
hgs
parents:
diff changeset
   453
         */
hgs
parents:
diff changeset
   454
hgs
parents:
diff changeset
   455
        inline TInt             operator==( const TFloatFixPt& aVal ) const;
hgs
parents:
diff changeset
   456
hgs
parents:
diff changeset
   457
        /**
hgs
parents:
diff changeset
   458
         * Not Equals operator.
hgs
parents:
diff changeset
   459
         *
hgs
parents:
diff changeset
   460
         * @since 1.0
hgs
parents:
diff changeset
   461
         * @param aVal : value to compare.
hgs
parents:
diff changeset
   462
         * @return non-zero if not equal
hgs
parents:
diff changeset
   463
         */
hgs
parents:
diff changeset
   464
        inline TInt             operator!=( const TFloatFixPt& aVal ) const;
hgs
parents:
diff changeset
   465
hgs
parents:
diff changeset
   466
        /**
hgs
parents:
diff changeset
   467
         * Greater than or equal to operator.
hgs
parents:
diff changeset
   468
         *
hgs
parents:
diff changeset
   469
         * @since 1.0
hgs
parents:
diff changeset
   470
         * @param aVal : value to compare.
hgs
parents:
diff changeset
   471
         * @return non-zero if greater than or equal to
hgs
parents:
diff changeset
   472
         */
hgs
parents:
diff changeset
   473
        inline TInt             operator>=( const TFloatFixPt& aVal ) const;
hgs
parents:
diff changeset
   474
hgs
parents:
diff changeset
   475
        /**
hgs
parents:
diff changeset
   476
         * Less than or equal to operator.
hgs
parents:
diff changeset
   477
         *
hgs
parents:
diff changeset
   478
         * @since 1.0
hgs
parents:
diff changeset
   479
         * @param aVal : value to compare.
hgs
parents:
diff changeset
   480
         * @return non-zero if less than or equal to
hgs
parents:
diff changeset
   481
         */
hgs
parents:
diff changeset
   482
        inline TInt             operator<=( const TFloatFixPt& aVal ) const;
hgs
parents:
diff changeset
   483
hgs
parents:
diff changeset
   484
        /**
hgs
parents:
diff changeset
   485
         * Greater than operator.
hgs
parents:
diff changeset
   486
         *
hgs
parents:
diff changeset
   487
         * @since 1.0
hgs
parents:
diff changeset
   488
         * @param aVal : value to compare.
hgs
parents:
diff changeset
   489
         * @return non-zero if greater than
hgs
parents:
diff changeset
   490
         */
hgs
parents:
diff changeset
   491
        inline TInt             operator>( const TFloatFixPt& aVal ) const;
hgs
parents:
diff changeset
   492
hgs
parents:
diff changeset
   493
        /**
hgs
parents:
diff changeset
   494
         * Less than operator.
hgs
parents:
diff changeset
   495
         *
hgs
parents:
diff changeset
   496
         * @since 1.0
hgs
parents:
diff changeset
   497
         * @param aVal : value to compare.
hgs
parents:
diff changeset
   498
         * @return non-zero if less than
hgs
parents:
diff changeset
   499
         */
hgs
parents:
diff changeset
   500
        inline TInt             operator<( const TFloatFixPt& aVal ) const;
hgs
parents:
diff changeset
   501
hgs
parents:
diff changeset
   502
		/**
hgs
parents:
diff changeset
   503
         * Operator to left shift
hgs
parents:
diff changeset
   504
         *
hgs
parents:
diff changeset
   505
         * @since 1.0
hgs
parents:
diff changeset
   506
         * @param aN : bits to be shifted.
hgs
parents:
diff changeset
   507
         * @return
hgs
parents:
diff changeset
   508
         */
hgs
parents:
diff changeset
   509
hgs
parents:
diff changeset
   510
        inline TFloatFixPt           operator<<( const TInt aN ) const;
hgs
parents:
diff changeset
   511
hgs
parents:
diff changeset
   512
        /**
hgs
parents:
diff changeset
   513
         * operator to right shift.
hgs
parents:
diff changeset
   514
         *
hgs
parents:
diff changeset
   515
         * @since 1.0
hgs
parents:
diff changeset
   516
         * @param aBuf : string output storage.
hgs
parents:
diff changeset
   517
         * @return value obtained after shifeting
hgs
parents:
diff changeset
   518
         */
hgs
parents:
diff changeset
   519
hgs
parents:
diff changeset
   520
        inline TFloatFixPt           operator>>( const TInt aN ) const;
hgs
parents:
diff changeset
   521
hgs
parents:
diff changeset
   522
hgs
parents:
diff changeset
   523
hgs
parents:
diff changeset
   524
		/**
hgs
parents:
diff changeset
   525
         * Get the string representation of this real number.
hgs
parents:
diff changeset
   526
         *
hgs
parents:
diff changeset
   527
         * @since 1.0
hgs
parents:
diff changeset
   528
         * @param aN : bits to be shifted
hgs
parents:
diff changeset
   529
         * @return value obtained after shifeting
hgs
parents:
diff changeset
   530
         */
hgs
parents:
diff changeset
   531
         void           GetString( TDes& aBuf ) const;
hgs
parents:
diff changeset
   532
hgs
parents:
diff changeset
   533
        /**
hgs
parents:
diff changeset
   534
         * Parse the given string for a TFixPt.
hgs
parents:
diff changeset
   535
         *
hgs
parents:
diff changeset
   536
         * @since 1.0
hgs
parents:
diff changeset
   537
         * @param aVal : string containing a real number.
hgs
parents:
diff changeset
   538
         * @return TFixPt equal to string representation.
hgs
parents:
diff changeset
   539
         */
hgs
parents:
diff changeset
   540
         static TFloatFixPt  ConvertString( const TDesC& aVal );
hgs
parents:
diff changeset
   541
hgs
parents:
diff changeset
   542
        /**
hgs
parents:
diff changeset
   543
         * Parse the given string for a TFixPt.
hgs
parents:
diff changeset
   544
         *
hgs
parents:
diff changeset
   545
         * @since 1.0
hgs
parents:
diff changeset
   546
         * @param aVal : string containing a real number.
hgs
parents:
diff changeset
   547
         * @param aVal : parsed number.
hgs
parents:
diff changeset
   548
         * @return Error code (KErrNone if no errors).
hgs
parents:
diff changeset
   549
         */
hgs
parents:
diff changeset
   550
         static TInt ConvertString( const TDesC& aValueString, TFloatFixPt& aValue );
hgs
parents:
diff changeset
   551
hgs
parents:
diff changeset
   552
        /**
hgs
parents:
diff changeset
   553
         * Return the number rounded to the next whole number.
hgs
parents:
diff changeset
   554
         *
hgs
parents:
diff changeset
   555
         * @since 1.0
hgs
parents:
diff changeset
   556
         * @return
hgs
parents:
diff changeset
   557
         */
hgs
parents:
diff changeset
   558
        inline TInt32           Round();
hgs
parents:
diff changeset
   559
hgs
parents:
diff changeset
   560
        /**
hgs
parents:
diff changeset
   561
         * Return the 32-bit data for this TFixPt.
hgs
parents:
diff changeset
   562
         *
hgs
parents:
diff changeset
   563
         * @since 1.0
hgs
parents:
diff changeset
   564
         * @return 32-bit value
hgs
parents:
diff changeset
   565
         */
hgs
parents:
diff changeset
   566
        inline TInt32           RawData();
hgs
parents:
diff changeset
   567
hgs
parents:
diff changeset
   568
        /**
hgs
parents:
diff changeset
   569
         * Return the absolute value for the given number.
hgs
parents:
diff changeset
   570
         *
hgs
parents:
diff changeset
   571
         * @since 1.0
hgs
parents:
diff changeset
   572
         * @param aValue : real number to find absolute value
hgs
parents:
diff changeset
   573
         * @return absolute value
hgs
parents:
diff changeset
   574
         */
hgs
parents:
diff changeset
   575
         TFloatFixPt         Abs( TFloatFixPt& aValue );
hgs
parents:
diff changeset
   576
hgs
parents:
diff changeset
   577
hgs
parents:
diff changeset
   578
        /**
hgs
parents:
diff changeset
   579
         * Return the square root value for this number.
hgs
parents:
diff changeset
   580
         *
hgs
parents:
diff changeset
   581
         * @since 1.0
hgs
parents:
diff changeset
   582
         * @param aValue : real number to find square root
hgs
parents:
diff changeset
   583
         * @return square root value
hgs
parents:
diff changeset
   584
         */
hgs
parents:
diff changeset
   585
         static TFloatFixPt  Sqrt( TFloatFixPt aValue );
hgs
parents:
diff changeset
   586
hgs
parents:
diff changeset
   587
        /**
hgs
parents:
diff changeset
   588
         * Return the square root value for the given number.
hgs
parents:
diff changeset
   589
         *
hgs
parents:
diff changeset
   590
         * @since 1.0
hgs
parents:
diff changeset
   591
         * @param aValue : 32-bit representation of real number
hgs
parents:
diff changeset
   592
         * @param aFracbits: number of bits allocated for fractional portion.
hgs
parents:
diff changeset
   593
         * @return square root value
hgs
parents:
diff changeset
   594
         */
hgs
parents:
diff changeset
   595
         static TInt32  FixedSqrtGeneral( TInt32 aValue, TUint32 aFracbits );
hgs
parents:
diff changeset
   596
hgs
parents:
diff changeset
   597
    private:
hgs
parents:
diff changeset
   598
hgs
parents:
diff changeset
   599
        /**
hgs
parents:
diff changeset
   600
         * Optimized method to do multiplication using assembly.
hgs
parents:
diff changeset
   601
         *
hgs
parents:
diff changeset
   602
         * @since 1.0
hgs
parents:
diff changeset
   603
         * @param aValue : real number to find multiply with
hgs
parents:
diff changeset
   604
         * @return
hgs
parents:
diff changeset
   605
         */
hgs
parents:
diff changeset
   606
        inline void             GfxMultiplyAsm( TInt aValue );
hgs
parents:
diff changeset
   607
hgs
parents:
diff changeset
   608
	public:
hgs
parents:
diff changeset
   609
hgs
parents:
diff changeset
   610
        TInt                    iValue;    // Must be the first data member of this class!
hgs
parents:
diff changeset
   611
hgs
parents:
diff changeset
   612
    };
hgs
parents:
diff changeset
   613
hgs
parents:
diff changeset
   614
#ifdef SVG_FLOAT_BUILD
hgs
parents:
diff changeset
   615
#define KFloatFixOne = (TFloatFixPt(1))
hgs
parents:
diff changeset
   616
#define KFloatFixZero = (TFloatFixPt())
hgs
parents:
diff changeset
   617
#define KMAXFLOATFIXVALUE (1e38f)
hgs
parents:
diff changeset
   618
#define KMINFLOATFIXVALUE (-1e38f)
hgs
parents:
diff changeset
   619
#define KMAXFLOATFIX (TFloatFixPt( KMAXFLOATFIXVALUE ))
hgs
parents:
diff changeset
   620
#define KMINFLOATFIX (TFloatFixPt( KMINFLOATFIXVALUE ))
hgs
parents:
diff changeset
   621
#else
hgs
parents:
diff changeset
   622
#define KFloatFixOne (TFloatFixPt( 0x10000, ETrue ))
hgs
parents:
diff changeset
   623
#define KFloatFixZero (TFloatFixPt())
hgs
parents:
diff changeset
   624
#define KMAXFLOATFIXVALUE  (0x7fff)
hgs
parents:
diff changeset
   625
#define KMINFLOATFIXVALUE (-0x7fff)
hgs
parents:
diff changeset
   626
#define KMAXFLOATFIX (TFloatFixPt( 0x7fff0000, ETrue ))
hgs
parents:
diff changeset
   627
#define KMINFLOATFIX (TFloatFixPt( -0x7fff0000, ETrue ))
hgs
parents:
diff changeset
   628
hgs
parents:
diff changeset
   629
#endif
hgs
parents:
diff changeset
   630
hgs
parents:
diff changeset
   631
typedef struct
hgs
parents:
diff changeset
   632
    {
hgs
parents:
diff changeset
   633
    SVGReal         matrix[2][3];
hgs
parents:
diff changeset
   634
    } SVGMatrix2x3;
hgs
parents:
diff changeset
   635
    
hgs
parents:
diff changeset
   636
#include "GfxFloatFixPt.inl"
hgs
parents:
diff changeset
   637
hgs
parents:
diff changeset
   638
#endif
hgs
parents:
diff changeset
   639
#endif      // GFXFIXPT_H