svgtopt/gfx2d/src/GfxGeom/GfxFlatteningPathIterator.cpp
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 source 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
#include "GfxFlatteningPathIterator.h"
hgs
parents:
diff changeset
    20
#include "GfxShape.h"
hgs
parents:
diff changeset
    21
#include "GfxAffineTransform.h"
hgs
parents:
diff changeset
    22
hgs
parents:
diff changeset
    23
hgs
parents:
diff changeset
    24
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    25
// Constructors
hgs
parents:
diff changeset
    26
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    27
CGfxFlatteningPathIterator::CGfxFlatteningPathIterator( TInt32 aLimit )
hgs
parents:
diff changeset
    28
    : iIdx( 0 ),
hgs
parents:
diff changeset
    29
      iSegType( EGfxSegClose ),
hgs
parents:
diff changeset
    30
      iIsDone( EFalse ),
hgs
parents:
diff changeset
    31
      iLimit( aLimit )
hgs
parents:
diff changeset
    32
    {
hgs
parents:
diff changeset
    33
    }
hgs
parents:
diff changeset
    34
hgs
parents:
diff changeset
    35
hgs
parents:
diff changeset
    36
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    37
// Create a new instance.
hgs
parents:
diff changeset
    38
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    39
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
    40
//  CGfxFlatteningPathIterator* CGfxFlatteningPathIterator::NewL( MGfxShape* aSrc,
hgs
parents:
diff changeset
    41
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    42
 CGfxFlatteningPathIterator* CGfxFlatteningPathIterator::NewL( MGfxShape* aSrc,
hgs
parents:
diff changeset
    43
                                                                       TGfxAffineTransform* aAt,
hgs
parents:
diff changeset
    44
                                                                       TInt32 aLimit )
hgs
parents:
diff changeset
    45
    {
hgs
parents:
diff changeset
    46
    CGfxFlatteningPathIterator* self = new ( ELeave )
hgs
parents:
diff changeset
    47
                                       CGfxFlatteningPathIterator( aLimit );
hgs
parents:
diff changeset
    48
hgs
parents:
diff changeset
    49
    CleanupStack::PushL( self );
hgs
parents:
diff changeset
    50
    self->ConstructL( aSrc, aAt );
hgs
parents:
diff changeset
    51
    CleanupStack::Pop();
hgs
parents:
diff changeset
    52
    return self;
hgs
parents:
diff changeset
    53
    }
hgs
parents:
diff changeset
    54
hgs
parents:
diff changeset
    55
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    56
// Second phase in constructing this object.
hgs
parents:
diff changeset
    57
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    58
void CGfxFlatteningPathIterator::ConstructL( MGfxShape* aSrc,
hgs
parents:
diff changeset
    59
                                             TGfxAffineTransform* aAt )
hgs
parents:
diff changeset
    60
    {
hgs
parents:
diff changeset
    61
    aSrc->GetPathIteratorL( aAt, iSrc );
hgs
parents:
diff changeset
    62
    iCoords = new ( ELeave ) RArray<TFloatFixPt>( 10 );
hgs
parents:
diff changeset
    63
    iCoords->AppendL( NULL );
hgs
parents:
diff changeset
    64
    iCoords->Remove(0);
hgs
parents:
diff changeset
    65
    NextL();
hgs
parents:
diff changeset
    66
    }
hgs
parents:
diff changeset
    67
hgs
parents:
diff changeset
    68
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    69
// Destructor.
hgs
parents:
diff changeset
    70
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    71
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
    72
//  CGfxFlatteningPathIterator::~CGfxFlatteningPathIterator()
hgs
parents:
diff changeset
    73
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    74
 CGfxFlatteningPathIterator::~CGfxFlatteningPathIterator()
hgs
parents:
diff changeset
    75
    {
hgs
parents:
diff changeset
    76
	if ( iSrc )
hgs
parents:
diff changeset
    77
		{
hgs
parents:
diff changeset
    78
		delete iSrc;
hgs
parents:
diff changeset
    79
		iSrc = NULL;
hgs
parents:
diff changeset
    80
		}
hgs
parents:
diff changeset
    81
	if ( iCoords )
hgs
parents:
diff changeset
    82
		{
hgs
parents:
diff changeset
    83
		iCoords->Close();
hgs
parents:
diff changeset
    84
		delete iCoords;
hgs
parents:
diff changeset
    85
		iCoords = NULL;
hgs
parents:
diff changeset
    86
		}
hgs
parents:
diff changeset
    87
    }
hgs
parents:
diff changeset
    88
hgs
parents:
diff changeset
    89
hgs
parents:
diff changeset
    90
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
    91
//  TGfxSegType CGfxFlatteningPathIterator::CurrentSegment( TFloatFixPt* aCoords )
hgs
parents:
diff changeset
    92
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    93
 TGfxSegType CGfxFlatteningPathIterator::CurrentSegment( TFloatFixPt* aCoords )
hgs
parents:
diff changeset
    94
    {
hgs
parents:
diff changeset
    95
    if ( iCoords->Count() > 0 && iCoords->Count() > iIdx )
hgs
parents:
diff changeset
    96
        {
hgs
parents:
diff changeset
    97
        aCoords[0] = ( *iCoords )[iIdx];
hgs
parents:
diff changeset
    98
        aCoords[1] = ( *iCoords )[iIdx + 1];
hgs
parents:
diff changeset
    99
        }
hgs
parents:
diff changeset
   100
hgs
parents:
diff changeset
   101
    return iSegType;
hgs
parents:
diff changeset
   102
    }
hgs
parents:
diff changeset
   103
hgs
parents:
diff changeset
   104
hgs
parents:
diff changeset
   105
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
   106
//  TBool CGfxFlatteningPathIterator::IsDone()
hgs
parents:
diff changeset
   107
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   108
 TBool CGfxFlatteningPathIterator::IsDone()
hgs
parents:
diff changeset
   109
    {
hgs
parents:
diff changeset
   110
    return iIsDone;
hgs
parents:
diff changeset
   111
    }
hgs
parents:
diff changeset
   112
hgs
parents:
diff changeset
   113
hgs
parents:
diff changeset
   114
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
   115
//  void CGfxFlatteningPathIterator::Next()
hgs
parents:
diff changeset
   116
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   117
 void CGfxFlatteningPathIterator::NextL()
hgs
parents:
diff changeset
   118
    {
hgs
parents:
diff changeset
   119
    iIdx += 2;
hgs
parents:
diff changeset
   120
hgs
parents:
diff changeset
   121
    if ( iCoords->Count() <= 0 || iCoords->Count() <= iIdx )
hgs
parents:
diff changeset
   122
        {
hgs
parents:
diff changeset
   123
        TFloatFixPt tmpcoords[6];
hgs
parents:
diff changeset
   124
        TInt i;
hgs
parents:
diff changeset
   125
hgs
parents:
diff changeset
   126
        iCoords->Reset();
hgs
parents:
diff changeset
   127
        iIdx = 0;
hgs
parents:
diff changeset
   128
        if ( iSrc->IsDone() )
hgs
parents:
diff changeset
   129
            {
hgs
parents:
diff changeset
   130
            iIsDone = ETrue;
hgs
parents:
diff changeset
   131
            }
hgs
parents:
diff changeset
   132
        else
hgs
parents:
diff changeset
   133
            {
hgs
parents:
diff changeset
   134
            iSegType = iSrc->CurrentSegment( tmpcoords );
hgs
parents:
diff changeset
   135
            switch ( iSegType )
hgs
parents:
diff changeset
   136
                {
hgs
parents:
diff changeset
   137
                case EGfxSegMoveTo:
hgs
parents:
diff changeset
   138
                    iLastX = tmpcoords[0];
hgs
parents:
diff changeset
   139
                    iLastY = tmpcoords[1];
hgs
parents:
diff changeset
   140
                    iCoords->AppendL( iLastX );
hgs
parents:
diff changeset
   141
                    iCoords->AppendL( iLastY );
hgs
parents:
diff changeset
   142
                    break;
hgs
parents:
diff changeset
   143
                case EGfxSegLineTo:
hgs
parents:
diff changeset
   144
                    iLastX = tmpcoords[0];
hgs
parents:
diff changeset
   145
                    iLastY = tmpcoords[1];
hgs
parents:
diff changeset
   146
                    iCoords->AppendL( iLastX );
hgs
parents:
diff changeset
   147
                    iCoords->AppendL( iLastY );
hgs
parents:
diff changeset
   148
                    break;
hgs
parents:
diff changeset
   149
                case EGfxSegQuadTo:
hgs
parents:
diff changeset
   150
                    iCoords->AppendL( iLastX );
hgs
parents:
diff changeset
   151
                    iCoords->AppendL( iLastY );
hgs
parents:
diff changeset
   152
                    iCoords->AppendL( tmpcoords[0] );
hgs
parents:
diff changeset
   153
                    iCoords->AppendL( tmpcoords[1] );
hgs
parents:
diff changeset
   154
                    iCoords->AppendL( tmpcoords[2] );
hgs
parents:
diff changeset
   155
                    iCoords->AppendL( tmpcoords[3] );
hgs
parents:
diff changeset
   156
hgs
parents:
diff changeset
   157
                    for ( i = 0; i < iLimit; i++ )
hgs
parents:
diff changeset
   158
                        CreateSubcurveQuadL( iCoords );
hgs
parents:
diff changeset
   159
                    //CreateSubcurveQuad(iCoords);
hgs
parents:
diff changeset
   160
                    //CreateSubcurveQuad(iCoords);
hgs
parents:
diff changeset
   161
                    //CreateSubcurveQuad(iCoords);
hgs
parents:
diff changeset
   162
hgs
parents:
diff changeset
   163
                    iIdx = 2;
hgs
parents:
diff changeset
   164
                    iLastX = tmpcoords[2];
hgs
parents:
diff changeset
   165
                    iLastY = tmpcoords[3];
hgs
parents:
diff changeset
   166
                    iSegType = EGfxSegLineTo;
hgs
parents:
diff changeset
   167
                    break;
hgs
parents:
diff changeset
   168
                case EGfxSegCubicTo:
hgs
parents:
diff changeset
   169
                    iCoords->AppendL( iLastX );
hgs
parents:
diff changeset
   170
                    iCoords->AppendL( iLastY );
hgs
parents:
diff changeset
   171
                    iCoords->AppendL( tmpcoords[0] );
hgs
parents:
diff changeset
   172
                    iCoords->AppendL( tmpcoords[1] );
hgs
parents:
diff changeset
   173
                    iCoords->AppendL( tmpcoords[2] );
hgs
parents:
diff changeset
   174
                    iCoords->AppendL( tmpcoords[3] );
hgs
parents:
diff changeset
   175
                    iCoords->AppendL( tmpcoords[4] );
hgs
parents:
diff changeset
   176
                    iCoords->AppendL( tmpcoords[5] );
hgs
parents:
diff changeset
   177
hgs
parents:
diff changeset
   178
                    for ( i = 0; i < iLimit; i++ )
hgs
parents:
diff changeset
   179
                        CreateSubcurveCubicL( iCoords );
hgs
parents:
diff changeset
   180
hgs
parents:
diff changeset
   181
                    iIdx = 2;
hgs
parents:
diff changeset
   182
                    iLastX = tmpcoords[4];
hgs
parents:
diff changeset
   183
                    iLastY = tmpcoords[5];
hgs
parents:
diff changeset
   184
                    iSegType = EGfxSegLineTo;
hgs
parents:
diff changeset
   185
                    break;
hgs
parents:
diff changeset
   186
                case EGfxSegClose:              // (cdm)
hgs
parents:
diff changeset
   187
                    iLastX = tmpcoords[0];
hgs
parents:
diff changeset
   188
                    iLastY = tmpcoords[1];
hgs
parents:
diff changeset
   189
                    iCoords->AppendL( iLastX );
hgs
parents:
diff changeset
   190
                    iCoords->AppendL( iLastY );
hgs
parents:
diff changeset
   191
                    break;
hgs
parents:
diff changeset
   192
hgs
parents:
diff changeset
   193
                 default:
hgs
parents:
diff changeset
   194
                    break;
hgs
parents:
diff changeset
   195
                }
hgs
parents:
diff changeset
   196
            iSrc->NextL();
hgs
parents:
diff changeset
   197
            }
hgs
parents:
diff changeset
   198
        }
hgs
parents:
diff changeset
   199
    }
hgs
parents:
diff changeset
   200
hgs
parents:
diff changeset
   201
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
   202
//  void CGfxFlatteningPathIterator::SetFlatness( TFloatFixPt& aFlatness )
hgs
parents:
diff changeset
   203
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   204
 void CGfxFlatteningPathIterator::SetFlatness( TFloatFixPt& aFlatness )
hgs
parents:
diff changeset
   205
    {
hgs
parents:
diff changeset
   206
    iFlatness = aFlatness;
hgs
parents:
diff changeset
   207
    }
hgs
parents:
diff changeset
   208
hgs
parents:
diff changeset
   209
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
   210
//  void CGfxFlatteningPathIterator::SetRecursionLimit( TInt32 aLimit )
hgs
parents:
diff changeset
   211
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   212
 void CGfxFlatteningPathIterator::SetRecursionLimit( TInt32 aLimit )
hgs
parents:
diff changeset
   213
    {
hgs
parents:
diff changeset
   214
    iLimit = aLimit;
hgs
parents:
diff changeset
   215
    }
hgs
parents:
diff changeset
   216
hgs
parents:
diff changeset
   217
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
   218
//  TFloatFixPt CGfxFlatteningPathIterator::Flatness()
hgs
parents:
diff changeset
   219
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   220
 TFloatFixPt CGfxFlatteningPathIterator::Flatness()
hgs
parents:
diff changeset
   221
    {
hgs
parents:
diff changeset
   222
    return iFlatness;
hgs
parents:
diff changeset
   223
    }
hgs
parents:
diff changeset
   224
hgs
parents:
diff changeset
   225
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
   226
//  TInt32 CGfxFlatteningPathIterator::RecursionLimit()
hgs
parents:
diff changeset
   227
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   228
 TInt32 CGfxFlatteningPathIterator::RecursionLimit()
hgs
parents:
diff changeset
   229
    {
hgs
parents:
diff changeset
   230
    return iLimit;
hgs
parents:
diff changeset
   231
    }
hgs
parents:
diff changeset
   232
hgs
parents:
diff changeset
   233
hgs
parents:
diff changeset
   234
hgs
parents:
diff changeset
   235
hgs
parents:
diff changeset
   236
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
   237
// void CGfxFlatteningPathIterator::CreateSubcurveQuad( RArray<TFloatFixPt>* aCtrlPoints )
hgs
parents:
diff changeset
   238
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   239
void CGfxFlatteningPathIterator::CreateSubcurveQuadL( RArray<TFloatFixPt>* aCtrlPoints )
hgs
parents:
diff changeset
   240
    {
hgs
parents:
diff changeset
   241
    TInt32 ix = 0;
hgs
parents:
diff changeset
   242
    TFloatFixPt x0, y0, xm, ym, x1, y1;
hgs
parents:
diff changeset
   243
	TInt32 lCount;
hgs
parents:
diff changeset
   244
hgs
parents:
diff changeset
   245
    while ( ix + 5 < aCtrlPoints->Count() )
hgs
parents:
diff changeset
   246
        {
hgs
parents:
diff changeset
   247
		lCount = ix;
hgs
parents:
diff changeset
   248
        x0 = ( *aCtrlPoints )[lCount++];
hgs
parents:
diff changeset
   249
        y0 = ( *aCtrlPoints )[lCount++];
hgs
parents:
diff changeset
   250
        xm = ( *aCtrlPoints )[lCount++];
hgs
parents:
diff changeset
   251
        ym = ( *aCtrlPoints )[lCount++];
hgs
parents:
diff changeset
   252
        x1 = ( *aCtrlPoints )[lCount++];
hgs
parents:
diff changeset
   253
        y1 = ( *aCtrlPoints )[lCount++];
hgs
parents:
diff changeset
   254
	#ifdef SVG_FLOAT_BUILD
hgs
parents:
diff changeset
   255
        x0 = ( x0 + xm ) * .5f;
hgs
parents:
diff changeset
   256
        y0 = ( y0 + ym ) * .5f;
hgs
parents:
diff changeset
   257
        x1 = ( x1 + xm ) * .5f;
hgs
parents:
diff changeset
   258
        y1 = ( y1 + ym ) * .5f;
hgs
parents:
diff changeset
   259
        xm = ( x0 + x1 ) * .5f;
hgs
parents:
diff changeset
   260
        ym = ( y0 + y1 ) * .5f;
hgs
parents:
diff changeset
   261
	#else
hgs
parents:
diff changeset
   262
        x0 = ( x0 + xm ) >> 1;
hgs
parents:
diff changeset
   263
        y0 = ( y0 + ym ) >> 1;
hgs
parents:
diff changeset
   264
        x1 = ( x1 + xm ) >> 1;
hgs
parents:
diff changeset
   265
        y1 = ( y1 + ym ) >> 1;
hgs
parents:
diff changeset
   266
        xm = ( x0 + x1 ) >> 1;
hgs
parents:
diff changeset
   267
        ym = ( y0 + y1 ) >> 1;
hgs
parents:
diff changeset
   268
	#endif
hgs
parents:
diff changeset
   269
		lCount=ix + 2;
hgs
parents:
diff changeset
   270
        ( *aCtrlPoints )[lCount] = xm;
hgs
parents:
diff changeset
   271
        ( *aCtrlPoints )[lCount + 1] = ym;
hgs
parents:
diff changeset
   272
        aCtrlPoints->InsertL( TFloatFixPt( x0 ), lCount++);
hgs
parents:
diff changeset
   273
        aCtrlPoints->InsertL( TFloatFixPt( y0 ), lCount );
hgs
parents:
diff changeset
   274
        aCtrlPoints->InsertL( TFloatFixPt( x1 ), ix + 6 );
hgs
parents:
diff changeset
   275
        aCtrlPoints->InsertL( TFloatFixPt( y1 ), ix + 7 );
hgs
parents:
diff changeset
   276
        ix += 8;
hgs
parents:
diff changeset
   277
        }
hgs
parents:
diff changeset
   278
    }
hgs
parents:
diff changeset
   279
hgs
parents:
diff changeset
   280
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
   281
// void CGfxFlatteningPathIterator::CreateSubcurveCubic( RArray<TFloatFixPt>* aCtrlPoints )
hgs
parents:
diff changeset
   282
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   283
void CGfxFlatteningPathIterator::CreateSubcurveCubicL( RArray<TFloatFixPt>* aCtrlPoints )
hgs
parents:
diff changeset
   284
    {
hgs
parents:
diff changeset
   285
    TInt32 ix = 0;
hgs
parents:
diff changeset
   286
    TFloatFixPt x0, y0, xm, ym, xm1, ym1, xm2, ym2, x1, y1;
hgs
parents:
diff changeset
   287
	TInt32 lCount;
hgs
parents:
diff changeset
   288
    while ( ix + 7 < aCtrlPoints->Count() )
hgs
parents:
diff changeset
   289
        {
hgs
parents:
diff changeset
   290
		lCount = ix;
hgs
parents:
diff changeset
   291
        x0 = ( *aCtrlPoints )[lCount++];
hgs
parents:
diff changeset
   292
        y0 = ( *aCtrlPoints )[lCount++];
hgs
parents:
diff changeset
   293
        xm1 = ( *aCtrlPoints )[lCount++];
hgs
parents:
diff changeset
   294
        ym1 = ( *aCtrlPoints )[lCount++];
hgs
parents:
diff changeset
   295
        xm2 = ( *aCtrlPoints )[lCount++];
hgs
parents:
diff changeset
   296
        ym2 = ( *aCtrlPoints )[lCount++];
hgs
parents:
diff changeset
   297
        x1 = ( *aCtrlPoints )[lCount++];
hgs
parents:
diff changeset
   298
        y1 = ( *aCtrlPoints )[lCount ];
hgs
parents:
diff changeset
   299
hgs
parents:
diff changeset
   300
	#ifdef SVG_FLOAT_BUILD
hgs
parents:
diff changeset
   301
        x0 = ( x0 + xm1 ) * .5f;
hgs
parents:
diff changeset
   302
        y0 = ( y0 + ym1 ) * .5f;
hgs
parents:
diff changeset
   303
        x1 = ( x1 + xm2 ) * .5f;
hgs
parents:
diff changeset
   304
        y1 = ( y1 + ym2 ) * .5f;
hgs
parents:
diff changeset
   305
        xm = ( xm1 + xm2 ) * .5f;
hgs
parents:
diff changeset
   306
        ym = ( ym1 + ym2 ) * .5f;
hgs
parents:
diff changeset
   307
        xm1 = ( x0 + xm ) * .5f;
hgs
parents:
diff changeset
   308
        ym1 = ( y0 + ym ) * .5f;
hgs
parents:
diff changeset
   309
        xm2 = ( x1 + xm ) * .5f;
hgs
parents:
diff changeset
   310
        ym2 = ( y1 + ym ) * .5f;
hgs
parents:
diff changeset
   311
        xm = ( xm1 + xm2 ) * .5f;
hgs
parents:
diff changeset
   312
        ym = ( ym1 + ym2 ) * .5f;
hgs
parents:
diff changeset
   313
	#else
hgs
parents:
diff changeset
   314
        x0 = ( x0 + xm1 ) >> 1;
hgs
parents:
diff changeset
   315
        y0 = ( y0 + ym1 ) >> 1;
hgs
parents:
diff changeset
   316
        x1 = ( x1 + xm2 ) >> 1;
hgs
parents:
diff changeset
   317
        y1 = ( y1 + ym2 ) >> 1;
hgs
parents:
diff changeset
   318
        xm = ( xm1 + xm2 ) >> 1;
hgs
parents:
diff changeset
   319
        ym = ( ym1 + ym2 ) >> 1;
hgs
parents:
diff changeset
   320
        xm1 = ( x0 + xm ) >> 1;
hgs
parents:
diff changeset
   321
        ym1 = ( y0 + ym ) >> 1;
hgs
parents:
diff changeset
   322
        xm2 = ( x1 + xm ) >> 1;
hgs
parents:
diff changeset
   323
        ym2 = ( y1 + ym ) >> 1;
hgs
parents:
diff changeset
   324
        xm = ( xm1 + xm2 ) >> 1;
hgs
parents:
diff changeset
   325
        ym = ( ym1 + ym2 ) >> 1;
hgs
parents:
diff changeset
   326
	#endif
hgs
parents:
diff changeset
   327
		lCount=ix + 2;
hgs
parents:
diff changeset
   328
        ( *aCtrlPoints )[lCount++] = x0;
hgs
parents:
diff changeset
   329
        ( *aCtrlPoints )[lCount++] = y0;
hgs
parents:
diff changeset
   330
        ( *aCtrlPoints )[lCount++] = xm1;
hgs
parents:
diff changeset
   331
        ( *aCtrlPoints )[lCount++] = ym1;
hgs
parents:
diff changeset
   332
hgs
parents:
diff changeset
   333
        aCtrlPoints->InsertL( TFloatFixPt( y1 ), lCount);
hgs
parents:
diff changeset
   334
        aCtrlPoints->InsertL( TFloatFixPt( x1 ), lCount );
hgs
parents:
diff changeset
   335
        aCtrlPoints->InsertL( TFloatFixPt( ym2 ), lCount );
hgs
parents:
diff changeset
   336
        aCtrlPoints->InsertL( TFloatFixPt( xm2 ), lCount );
hgs
parents:
diff changeset
   337
        aCtrlPoints->InsertL( TFloatFixPt( ym ), lCount );
hgs
parents:
diff changeset
   338
        aCtrlPoints->InsertL( TFloatFixPt( xm ), lCount );
hgs
parents:
diff changeset
   339
        ix += 12;
hgs
parents:
diff changeset
   340
        }
hgs
parents:
diff changeset
   341
    }
hgs
parents:
diff changeset
   342
hgs
parents:
diff changeset
   343
hgs
parents:
diff changeset
   344
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
   345
//  void CGfxFlatteningPathIterator::PolygonizeL( CGfxEdgeListP* /* aRenderer */, TInt /* aFlatness */ )
hgs
parents:
diff changeset
   346
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   347
 void CGfxFlatteningPathIterator::PolygonizeL( CGfxEdgeListP* /* aRenderer */, TInt /* aFlatness */ )
hgs
parents:
diff changeset
   348
{
hgs
parents:
diff changeset
   349
}