svgtopt/SVG/SVGImpl/src/SVGAnimTimeController.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) 2003 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:  SVG Implementation 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 "SVGAnimTimeController.h"
hgs
parents:
diff changeset
    20
#include "SVGAnimationBase.h"
hgs
parents:
diff changeset
    21
hgs
parents:
diff changeset
    22
#include "GfxGeneralPath.h"
hgs
parents:
diff changeset
    23
#include "GfxFlatteningPathIterator.h"
hgs
parents:
diff changeset
    24
hgs
parents:
diff changeset
    25
	#ifdef SVG_FLOAT_BUILD
hgs
parents:
diff changeset
    26
#define MULT255(x) (255*(x))
hgs
parents:
diff changeset
    27
	#else
hgs
parents:
diff changeset
    28
#define MULT255(x) (((x)<<8) - (x))
hgs
parents:
diff changeset
    29
	#endif
hgs
parents:
diff changeset
    30
hgs
parents:
diff changeset
    31
_LIT( KEmptyString,"" );
hgs
parents:
diff changeset
    32
hgs
parents:
diff changeset
    33
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    34
// Two phase construction
hgs
parents:
diff changeset
    35
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    36
CSvgAnimTimeController* CSvgAnimTimeController::NewL()
hgs
parents:
diff changeset
    37
    {
hgs
parents:
diff changeset
    38
    CSvgAnimTimeController* self = new ( ELeave ) CSvgAnimTimeController();
hgs
parents:
diff changeset
    39
    CleanupStack::PushL( self );
hgs
parents:
diff changeset
    40
    self->ConstructL();
hgs
parents:
diff changeset
    41
    CleanupStack::Pop();
hgs
parents:
diff changeset
    42
hgs
parents:
diff changeset
    43
    return self;
hgs
parents:
diff changeset
    44
    }
hgs
parents:
diff changeset
    45
hgs
parents:
diff changeset
    46
hgs
parents:
diff changeset
    47
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    48
//
hgs
parents:
diff changeset
    49
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    50
CSvgAnimTimeController::~CSvgAnimTimeController()
hgs
parents:
diff changeset
    51
    {
hgs
parents:
diff changeset
    52
	if ( iKeyTime )
hgs
parents:
diff changeset
    53
		{
hgs
parents:
diff changeset
    54
		iKeyTime->Close();
hgs
parents:
diff changeset
    55
		delete iKeyTime;
hgs
parents:
diff changeset
    56
		iKeyTime = NULL;
hgs
parents:
diff changeset
    57
		}
hgs
parents:
diff changeset
    58
hgs
parents:
diff changeset
    59
    if ( iAnimTime )
hgs
parents:
diff changeset
    60
		{
hgs
parents:
diff changeset
    61
		iAnimTime->Close();
hgs
parents:
diff changeset
    62
		delete iAnimTime;
hgs
parents:
diff changeset
    63
		iAnimTime = NULL;
hgs
parents:
diff changeset
    64
		}
hgs
parents:
diff changeset
    65
hgs
parents:
diff changeset
    66
    if ( iBeginTimeList )
hgs
parents:
diff changeset
    67
        {
hgs
parents:
diff changeset
    68
        iBeginTimeList->Close();
hgs
parents:
diff changeset
    69
        delete iBeginTimeList;
hgs
parents:
diff changeset
    70
		iBeginTimeList = NULL;
hgs
parents:
diff changeset
    71
        }
hgs
parents:
diff changeset
    72
    if ( iInitialBeginTimeList )
hgs
parents:
diff changeset
    73
        {
hgs
parents:
diff changeset
    74
        iInitialBeginTimeList->Close();
hgs
parents:
diff changeset
    75
        delete iInitialBeginTimeList;
hgs
parents:
diff changeset
    76
		iInitialBeginTimeList = NULL;
hgs
parents:
diff changeset
    77
        }
hgs
parents:
diff changeset
    78
    if ( iEndTimeList )
hgs
parents:
diff changeset
    79
        {
hgs
parents:
diff changeset
    80
        iEndTimeList->Close();
hgs
parents:
diff changeset
    81
        delete iEndTimeList;
hgs
parents:
diff changeset
    82
		iEndTimeList = NULL;
hgs
parents:
diff changeset
    83
        }
hgs
parents:
diff changeset
    84
    if ( iInitialEndTimeList )
hgs
parents:
diff changeset
    85
        {
hgs
parents:
diff changeset
    86
        iInitialEndTimeList->Close();
hgs
parents:
diff changeset
    87
        delete iInitialEndTimeList;
hgs
parents:
diff changeset
    88
		iInitialEndTimeList = NULL;
hgs
parents:
diff changeset
    89
        }
hgs
parents:
diff changeset
    90
    delete iSplines;
hgs
parents:
diff changeset
    91
    }
hgs
parents:
diff changeset
    92
hgs
parents:
diff changeset
    93
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    94
//
hgs
parents:
diff changeset
    95
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    96
CSvgAnimTimeController::CSvgAnimTimeController() : iCalcMode( KAnimCalcModeLinear ),
hgs
parents:
diff changeset
    97
                                                   iBeginTime( 0 ),
hgs
parents:
diff changeset
    98
                                                   iInitialBeginTime(0),
hgs
parents:
diff changeset
    99
                                                   iDurationTime( KTimeIndefinite ),
hgs
parents:
diff changeset
   100
                                                   iEndTime( KTimeIndefinite ),
hgs
parents:
diff changeset
   101
                                                   iInitialEndTime(KTimeIndefinite),
hgs
parents:
diff changeset
   102
                                                   iRepeatDurationTime( KTimeIndefinite ),
hgs
parents:
diff changeset
   103
                                                   iNewActiveDurationTime( 0 ),
hgs
parents:
diff changeset
   104
                                                   iSplineIndex( 0 ),
hgs
parents:
diff changeset
   105
												   iModifiedEndTime( 0 ),
hgs
parents:
diff changeset
   106
                                                   iIsSplineCalcMode( EFalse )
hgs
parents:
diff changeset
   107
    {
hgs
parents:
diff changeset
   108
    }
hgs
parents:
diff changeset
   109
hgs
parents:
diff changeset
   110
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   111
//
hgs
parents:
diff changeset
   112
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   113
void CSvgAnimTimeController::ConstructL()
hgs
parents:
diff changeset
   114
    {
hgs
parents:
diff changeset
   115
    iKeyTime = new ( ELeave ) RArray<TKeyTime>( 1 );
hgs
parents:
diff changeset
   116
    iAnimTime = new ( ELeave ) RArray<TUint32>( 1 );
hgs
parents:
diff changeset
   117
    for ( TInt32 i = 0; i < KTimeMax + 1; i++ )
hgs
parents:
diff changeset
   118
        {
hgs
parents:
diff changeset
   119
        iAnimTime->AppendL(0);
hgs
parents:
diff changeset
   120
        }
hgs
parents:
diff changeset
   121
    iBeginTimeList = new ( ELeave ) RArray<TInt32>( 1 );
hgs
parents:
diff changeset
   122
    iInitialBeginTimeList = new ( ELeave ) RArray<TInt32>( 1 );
hgs
parents:
diff changeset
   123
    iEndTimeList = new (ELeave) RArray<TInt32>(1);
hgs
parents:
diff changeset
   124
    iInitialEndTimeList = new (ELeave) RArray<TInt32>(1);
hgs
parents:
diff changeset
   125
    }
hgs
parents:
diff changeset
   126
hgs
parents:
diff changeset
   127
hgs
parents:
diff changeset
   128
// *******************************************************
hgs
parents:
diff changeset
   129
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   130
//
hgs
parents:
diff changeset
   131
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   132
void CSvgAnimTimeController::SetBeginTime( TInt32 aBeginTime )
hgs
parents:
diff changeset
   133
    {
hgs
parents:
diff changeset
   134
    iBeginTime = aBeginTime; // msec
hgs
parents:
diff changeset
   135
    }
hgs
parents:
diff changeset
   136
    
hgs
parents:
diff changeset
   137
    
hgs
parents:
diff changeset
   138
hgs
parents:
diff changeset
   139
void CSvgAnimTimeController::SetOrgDurationTime(TInt32 aValue)
hgs
parents:
diff changeset
   140
{
hgs
parents:
diff changeset
   141
	iOrgDurationTime = aValue;
hgs
parents:
diff changeset
   142
}
hgs
parents:
diff changeset
   143
hgs
parents:
diff changeset
   144
hgs
parents:
diff changeset
   145
hgs
parents:
diff changeset
   146
hgs
parents:
diff changeset
   147
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   148
//
hgs
parents:
diff changeset
   149
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   150
void CSvgAnimTimeController::AddBeginTime( TInt32 aBeginTime )
hgs
parents:
diff changeset
   151
    {
hgs
parents:
diff changeset
   152
       if ( aBeginTime < 0 )
hgs
parents:
diff changeset
   153
        {
hgs
parents:
diff changeset
   154
            aBeginTime = 0;     //Himanshu: to check the negative begin value
hgs
parents:
diff changeset
   155
        }   
hgs
parents:
diff changeset
   156
     iBeginTimeList->Append( aBeginTime );
hgs
parents:
diff changeset
   157
     iBeginTimeList->SortSigned();
hgs
parents:
diff changeset
   158
    }
hgs
parents:
diff changeset
   159
void CSvgAnimTimeController::AddEndTime( TInt32 aEndTime )
hgs
parents:
diff changeset
   160
    {
hgs
parents:
diff changeset
   161
     iEndTimeList->Append( aEndTime );
hgs
parents:
diff changeset
   162
     iEndTimeList->SortSigned();
hgs
parents:
diff changeset
   163
     iEndTime = iEndTimeList->operator[](0);
hgs
parents:
diff changeset
   164
    }
hgs
parents:
diff changeset
   165
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   166
//
hgs
parents:
diff changeset
   167
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   168
TUint32 CSvgAnimTimeController::GetBeginTime( TInt32 aIndex )
hgs
parents:
diff changeset
   169
    {
hgs
parents:
diff changeset
   170
hgs
parents:
diff changeset
   171
    if(aIndex >= 0 && aIndex < iBeginTimeList->Count())
hgs
parents:
diff changeset
   172
	    {
hgs
parents:
diff changeset
   173
hgs
parents:
diff changeset
   174
		return (TUint32) (iBeginTimeList->operator[](aIndex));
hgs
parents:
diff changeset
   175
    	}
hgs
parents:
diff changeset
   176
	else
hgs
parents:
diff changeset
   177
		{
hgs
parents:
diff changeset
   178
hgs
parents:
diff changeset
   179
		return 0;
hgs
parents:
diff changeset
   180
hgs
parents:
diff changeset
   181
	    }
hgs
parents:
diff changeset
   182
    }
hgs
parents:
diff changeset
   183
hgs
parents:
diff changeset
   184
hgs
parents:
diff changeset
   185
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   186
//
hgs
parents:
diff changeset
   187
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   188
void CSvgAnimTimeController::ResetBeginTime( TInt32 aBeginTime )
hgs
parents:
diff changeset
   189
    {
hgs
parents:
diff changeset
   190
    iBeginTime = aBeginTime; // msec
hgs
parents:
diff changeset
   191
    }
hgs
parents:
diff changeset
   192
hgs
parents:
diff changeset
   193
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   194
//
hgs
parents:
diff changeset
   195
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   196
void CSvgAnimTimeController::SetDurationTime( TInt32 aDurationTime )
hgs
parents:
diff changeset
   197
    {
hgs
parents:
diff changeset
   198
    iDurationTime = aDurationTime; // msec
hgs
parents:
diff changeset
   199
hgs
parents:
diff changeset
   200
    }
hgs
parents:
diff changeset
   201
hgs
parents:
diff changeset
   202
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   203
//
hgs
parents:
diff changeset
   204
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   205
TInt32 CSvgAnimTimeController::GetDurationTime()
hgs
parents:
diff changeset
   206
    {
hgs
parents:
diff changeset
   207
    return iDurationTime; // msec
hgs
parents:
diff changeset
   208
hgs
parents:
diff changeset
   209
    }
hgs
parents:
diff changeset
   210
hgs
parents:
diff changeset
   211
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   212
//
hgs
parents:
diff changeset
   213
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   214
void CSvgAnimTimeController::SetEndTime( TInt32 aEndTime )
hgs
parents:
diff changeset
   215
    {
hgs
parents:
diff changeset
   216
    iEndTime = aEndTime; // msec
hgs
parents:
diff changeset
   217
	if (aEndTime != (TInt32)KTimeIndefinite)
hgs
parents:
diff changeset
   218
		iModifiedEndTime= aEndTime;
hgs
parents:
diff changeset
   219
    }
hgs
parents:
diff changeset
   220
hgs
parents:
diff changeset
   221
hgs
parents:
diff changeset
   222
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   223
//
hgs
parents:
diff changeset
   224
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   225
TInt32 CSvgAnimTimeController::GetEndTime()
hgs
parents:
diff changeset
   226
    {
hgs
parents:
diff changeset
   227
    return iEndTime; // msec
hgs
parents:
diff changeset
   228
hgs
parents:
diff changeset
   229
    }
hgs
parents:
diff changeset
   230
    
hgs
parents:
diff changeset
   231
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   232
//
hgs
parents:
diff changeset
   233
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   234
void CSvgAnimTimeController::SetRepeatDurationTime( TUint32 aRepeatDurationTime )
hgs
parents:
diff changeset
   235
    {
hgs
parents:
diff changeset
   236
    iRepeatDurationTime = aRepeatDurationTime;
hgs
parents:
diff changeset
   237
hgs
parents:
diff changeset
   238
   }
hgs
parents:
diff changeset
   239
hgs
parents:
diff changeset
   240
hgs
parents:
diff changeset
   241
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   242
//
hgs
parents:
diff changeset
   243
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   244
void CSvgAnimTimeController::GetAnimTime( TInt32 aTimerTime,
hgs
parents:
diff changeset
   245
                                          TInt32& aAnimTime,
hgs
parents:
diff changeset
   246
                                          TInt32& aValueIndex,
hgs
parents:
diff changeset
   247
                                          TInt32& aSubAnimTime )
hgs
parents:
diff changeset
   248
    {
hgs
parents:
diff changeset
   249
    if(iDurationTime == KTimeIndefinite || iDurationTime == 0)
hgs
parents:
diff changeset
   250
        {
hgs
parents:
diff changeset
   251
        aValueIndex = 0;
hgs
parents:
diff changeset
   252
        aSubAnimTime= 0;
hgs
parents:
diff changeset
   253
        aAnimTime=0;
hgs
parents:
diff changeset
   254
        return;
hgs
parents:
diff changeset
   255
        }
hgs
parents:
diff changeset
   256
    TInt32 x = 0;
hgs
parents:
diff changeset
   257
hgs
parents:
diff changeset
   258
    if( iNewActiveDurationTime > 0 )//"repeatDur" <= "Dur"
hgs
parents:
diff changeset
   259
		{
hgs
parents:
diff changeset
   260
       	x = MULT255( aTimerTime - iBeginTime ) / iNewActiveDurationTime;
hgs
parents:
diff changeset
   261
		}
hgs
parents:
diff changeset
   262
    else
hgs
parents:
diff changeset
   263
		{
hgs
parents:
diff changeset
   264
hgs
parents:
diff changeset
   265
		x = MULT255( aTimerTime - iBeginTime ) / iDurationTime;
hgs
parents:
diff changeset
   266
hgs
parents:
diff changeset
   267
		}
hgs
parents:
diff changeset
   268
hgs
parents:
diff changeset
   269
    if ( x > KTimeMax )
hgs
parents:
diff changeset
   270
		{
hgs
parents:
diff changeset
   271
        x = KTimeMax;
hgs
parents:
diff changeset
   272
		}
hgs
parents:
diff changeset
   273
	else
hgs
parents:
diff changeset
   274
		{
hgs
parents:
diff changeset
   275
		if ( x < 0 )
hgs
parents:
diff changeset
   276
			{
hgs
parents:
diff changeset
   277
			x = 0;
hgs
parents:
diff changeset
   278
			}
hgs
parents:
diff changeset
   279
		}
hgs
parents:
diff changeset
   280
hgs
parents:
diff changeset
   281
    TInt32 kcount = iKeyTime->Count();
hgs
parents:
diff changeset
   282
hgs
parents:
diff changeset
   283
    if ( kcount == 0 )// || iCalcMode == KAnimCalcModePaced)
hgs
parents:
diff changeset
   284
	    {
hgs
parents:
diff changeset
   285
        aValueIndex = 0;
hgs
parents:
diff changeset
   286
        aSubAnimTime = 0;
hgs
parents:
diff changeset
   287
        aAnimTime = x; //
hgs
parents:
diff changeset
   288
        // No keytimes or paced animation
hgs
parents:
diff changeset
   289
        if ( iCalcMode == KAnimCalcModeDiscrete )
hgs
parents:
diff changeset
   290
            {
hgs
parents:
diff changeset
   291
         // From SMIL 2.1 Animation Modules
hgs
parents:
diff changeset
   292
         // Normative: Normative: A from-to animation with a from value vf
hgs
parents:
diff changeset
   293
         // and a to value vt is equivalent to the same animation with a 
hgs
parents:
diff changeset
   294
         // values list with 2 values, vf and vt. 
hgs
parents:
diff changeset
   295
 
hgs
parents:
diff changeset
   296
            if ( x < KTimeMax / 2 )
hgs
parents:
diff changeset
   297
				{
hgs
parents:
diff changeset
   298
                aAnimTime = 0;
hgs
parents:
diff changeset
   299
				}
hgs
parents:
diff changeset
   300
            else
hgs
parents:
diff changeset
   301
				{
hgs
parents:
diff changeset
   302
                aAnimTime = KTimeMax;
hgs
parents:
diff changeset
   303
				}
hgs
parents:
diff changeset
   304
            }
hgs
parents:
diff changeset
   305
        }
hgs
parents:
diff changeset
   306
    else if ( iCalcMode == KAnimCalcModePaced )
hgs
parents:
diff changeset
   307
        {
hgs
parents:
diff changeset
   308
        aAnimTime = x;
hgs
parents:
diff changeset
   309
        TInt32 i = 0;
hgs
parents:
diff changeset
   310
        while ( i < kcount && ( *iKeyTime )[i].iY < aAnimTime )
hgs
parents:
diff changeset
   311
            i++;
hgs
parents:
diff changeset
   312
        if ( i > 0 )
hgs
parents:
diff changeset
   313
            i--;
hgs
parents:
diff changeset
   314
        aValueIndex = i;
hgs
parents:
diff changeset
   315
        // to avoid crashing for the array index aValueIndex + 1
hgs
parents:
diff changeset
   316
		TBool IndexWasDecremented = EFalse;
hgs
parents:
diff changeset
   317
        if(aValueIndex + 1 == kcount)
hgs
parents:
diff changeset
   318
           	{
hgs
parents:
diff changeset
   319
           	 aValueIndex--;
hgs
parents:
diff changeset
   320
           	 IndexWasDecremented = ETrue;
hgs
parents:
diff changeset
   321
           	}
hgs
parents:
diff changeset
   322
        TInt32 dy = ( TInt32 )
hgs
parents:
diff changeset
   323
                    ( ( *iKeyTime )[aValueIndex + 1].iY -
hgs
parents:
diff changeset
   324
                      ( *iKeyTime )[aValueIndex].iY );
hgs
parents:
diff changeset
   325
        if ( dy != 0 )
hgs
parents:
diff changeset
   326
            aSubAnimTime = MULT255( aAnimTime - ( *iKeyTime )[aValueIndex].iY ) / dy;
hgs
parents:
diff changeset
   327
        else
hgs
parents:
diff changeset
   328
            aSubAnimTime = 0;
hgs
parents:
diff changeset
   329
hgs
parents:
diff changeset
   330
		if(IndexWasDecremented)
hgs
parents:
diff changeset
   331
           	{
hgs
parents:
diff changeset
   332
           	aValueIndex++;
hgs
parents:
diff changeset
   333
           	}
hgs
parents:
diff changeset
   334
        }
hgs
parents:
diff changeset
   335
    else
hgs
parents:
diff changeset
   336
        {
hgs
parents:
diff changeset
   337
        // find corresponding keytime index
hgs
parents:
diff changeset
   338
        TInt32 i = 0;
hgs
parents:
diff changeset
   339
        while ( i < kcount && ( *iKeyTime )[i].iX < x )
hgs
parents:
diff changeset
   340
            i++;
hgs
parents:
diff changeset
   341
        if ( i > 0 )
hgs
parents:
diff changeset
   342
            i--;
hgs
parents:
diff changeset
   343
hgs
parents:
diff changeset
   344
hgs
parents:
diff changeset
   345
        ///// EXPLICITLY INCREMENT THE aValueIndex TO THE LAST OF THE LIST.
hgs
parents:
diff changeset
   346
hgs
parents:
diff changeset
   347
        if(x == 255)
hgs
parents:
diff changeset
   348
	        {
hgs
parents:
diff changeset
   349
	        aValueIndex = kcount-1;
hgs
parents:
diff changeset
   350
	        }
hgs
parents:
diff changeset
   351
	    else
hgs
parents:
diff changeset
   352
	    	{
hgs
parents:
diff changeset
   353
         	aValueIndex = i;
hgs
parents:
diff changeset
   354
	    	}
hgs
parents:
diff changeset
   355
hgs
parents:
diff changeset
   356
hgs
parents:
diff changeset
   357
        ////////////// END OF ADDITION ///////////////
hgs
parents:
diff changeset
   358
hgs
parents:
diff changeset
   359
        if ( iCalcMode == KAnimCalcModeDiscrete )
hgs
parents:
diff changeset
   360
            {
hgs
parents:
diff changeset
   361
            if ( x == KTimeMax )
hgs
parents:
diff changeset
   362
                aValueIndex = iKeyTime->Count() - 1;
hgs
parents:
diff changeset
   363
            aAnimTime = ( *iKeyTime )[aValueIndex].iY;
hgs
parents:
diff changeset
   364
            aSubAnimTime = 0;
hgs
parents:
diff changeset
   365
            }
hgs
parents:
diff changeset
   366
        else
hgs
parents:
diff changeset
   367
            {
hgs
parents:
diff changeset
   368
            if ( iCalcMode == KAnimCalcModeLinear )
hgs
parents:
diff changeset
   369
                {
hgs
parents:
diff changeset
   370
                // calcMode:Linear
hgs
parents:
diff changeset
   371
hgs
parents:
diff changeset
   372
hgs
parents:
diff changeset
   373
				if(( *iKeyTime )[i].iX == ( *iKeyTime )[i+1].iX)
hgs
parents:
diff changeset
   374
					{
hgs
parents:
diff changeset
   375
					while((i<(kcount-1)) && ( *iKeyTime )[i + 1].iX == ( *iKeyTime )[i].iX )
hgs
parents:
diff changeset
   376
						{
hgs
parents:
diff changeset
   377
						// this will increment the index so that
hgs
parents:
diff changeset
   378
						// the interpolation would be done between the last
hgs
parents:
diff changeset
   379
						// values.
hgs
parents:
diff changeset
   380
						i++;
hgs
parents:
diff changeset
   381
						// count should be less than the total number of elements.
hgs
parents:
diff changeset
   382
						}
hgs
parents:
diff changeset
   383
hgs
parents:
diff changeset
   384
hgs
parents:
diff changeset
   385
					}
hgs
parents:
diff changeset
   386
hgs
parents:
diff changeset
   387
				TInt32 alpha = MULT255( ( TInt32 )
hgs
parents:
diff changeset
   388
                                        ( x - ( *iKeyTime )[i].iX ) ) /
hgs
parents:
diff changeset
   389
                               ( TInt32 )
hgs
parents:
diff changeset
   390
                               ( ( *iKeyTime )[i + 1].iX -
hgs
parents:
diff changeset
   391
                                 ( *iKeyTime )[i].iX ) ;
hgs
parents:
diff changeset
   392
hgs
parents:
diff changeset
   393
                if(x == 255)
hgs
parents:
diff changeset
   394
                	{
hgs
parents:
diff changeset
   395
	             	aAnimTime = 255; // THIS SPECIFIES THAT THE DUR IS COMPLETE.
hgs
parents:
diff changeset
   396
	               	}
hgs
parents:
diff changeset
   397
				else
hgs
parents:
diff changeset
   398
					{
hgs
parents:
diff changeset
   399
hgs
parents:
diff changeset
   400
					aAnimTime = CSvgAnimationBase::BlendInt( alpha,
hgs
parents:
diff changeset
   401
	                                                         ( *iKeyTime )[i].iY,
hgs
parents:
diff changeset
   402
	                                                         ( *iKeyTime )[i + 1].iY );
hgs
parents:
diff changeset
   403
	                 }
hgs
parents:
diff changeset
   404
                aSubAnimTime = alpha;
hgs
parents:
diff changeset
   405
hgs
parents:
diff changeset
   406
                }
hgs
parents:
diff changeset
   407
            else
hgs
parents:
diff changeset
   408
                {
hgs
parents:
diff changeset
   409
                // calcMode:Spline
hgs
parents:
diff changeset
   410
                TBool IndexWasDecremented = EFalse;
hgs
parents:
diff changeset
   411
				if(aValueIndex + 1 == kcount)
hgs
parents:
diff changeset
   412
					 {
hgs
parents:
diff changeset
   413
					 aValueIndex--;
hgs
parents:
diff changeset
   414
					 IndexWasDecremented = ETrue;
hgs
parents:
diff changeset
   415
					 }
hgs
parents:
diff changeset
   416
				aAnimTime = ( *iAnimTime )[x];
hgs
parents:
diff changeset
   417
                TInt32 ydiff = ( TInt32 )
hgs
parents:
diff changeset
   418
                               ( ( *iKeyTime )[aValueIndex + 1].iY -
hgs
parents:
diff changeset
   419
                                 ( *iKeyTime )[aValueIndex].iY );
hgs
parents:
diff changeset
   420
                if ( ydiff != 0 )
hgs
parents:
diff changeset
   421
					{
hgs
parents:
diff changeset
   422
                    aSubAnimTime = MULT255( aAnimTime -
hgs
parents:
diff changeset
   423
                                            ( *iKeyTime )[aValueIndex].iY ) / ydiff;
hgs
parents:
diff changeset
   424
					}
hgs
parents:
diff changeset
   425
                else
hgs
parents:
diff changeset
   426
					 {
hgs
parents:
diff changeset
   427
                    aSubAnimTime = 0;
hgs
parents:
diff changeset
   428
                }
hgs
parents:
diff changeset
   429
				// oops increment again if it was decremented.
hgs
parents:
diff changeset
   430
				if(IndexWasDecremented)
hgs
parents:
diff changeset
   431
					 {
hgs
parents:
diff changeset
   432
					 aValueIndex++;
hgs
parents:
diff changeset
   433
					 }
hgs
parents:
diff changeset
   434
hgs
parents:
diff changeset
   435
hgs
parents:
diff changeset
   436
hgs
parents:
diff changeset
   437
                }
hgs
parents:
diff changeset
   438
hgs
parents:
diff changeset
   439
            if ( aAnimTime > KTimeMax )
hgs
parents:
diff changeset
   440
				{
hgs
parents:
diff changeset
   441
                aAnimTime = KTimeMax;
hgs
parents:
diff changeset
   442
				}
hgs
parents:
diff changeset
   443
			else
hgs
parents:
diff changeset
   444
				{
hgs
parents:
diff changeset
   445
				if ( aAnimTime < 0 )
hgs
parents:
diff changeset
   446
					{
hgs
parents:
diff changeset
   447
					aAnimTime = 0;
hgs
parents:
diff changeset
   448
					}
hgs
parents:
diff changeset
   449
				}
hgs
parents:
diff changeset
   450
hgs
parents:
diff changeset
   451
            }
hgs
parents:
diff changeset
   452
        }
hgs
parents:
diff changeset
   453
    }
hgs
parents:
diff changeset
   454
hgs
parents:
diff changeset
   455
// *******************************************************
hgs
parents:
diff changeset
   456
// Create keytimes
hgs
parents:
diff changeset
   457
// default is equally deived time
hgs
parents:
diff changeset
   458
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   459
//
hgs
parents:
diff changeset
   460
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   461
hgs
parents:
diff changeset
   462
void CSvgAnimTimeController::CreateKeyTime( TInt32 aKeyTimeCount )
hgs
parents:
diff changeset
   463
    {
hgs
parents:
diff changeset
   464
    // Create keyTime array if not available
hgs
parents:
diff changeset
   465
	TInt lDivider = aKeyTimeCount;
hgs
parents:
diff changeset
   466
	if ( iCalcMode != KAnimCalcModeDiscrete )
hgs
parents:
diff changeset
   467
		{
hgs
parents:
diff changeset
   468
		lDivider--;
hgs
parents:
diff changeset
   469
		}
hgs
parents:
diff changeset
   470
hgs
parents:
diff changeset
   471
    if ( iKeyTime->Count() == 0 && aKeyTimeCount > 0 && lDivider != 0 ) // check to avoid division by zero.
hgs
parents:
diff changeset
   472
        {
hgs
parents:
diff changeset
   473
        for ( TInt32 i = 0; i < aKeyTimeCount; i++ )
hgs
parents:
diff changeset
   474
            {
hgs
parents:
diff changeset
   475
			AddKeyTime( TFloatFixPt( i ) / TFloatFixPt( lDivider ) );
hgs
parents:
diff changeset
   476
            }
hgs
parents:
diff changeset
   477
        }
hgs
parents:
diff changeset
   478
    }
hgs
parents:
diff changeset
   479
hgs
parents:
diff changeset
   480
void CSvgAnimTimeController::CreateKeyTimeForEnumeration( TInt32 aKeyTimeCount )
hgs
parents:
diff changeset
   481
    {
hgs
parents:
diff changeset
   482
    // Create keyTime array if not available
hgs
parents:
diff changeset
   483
	// ignore the calc mode specification.
hgs
parents:
diff changeset
   484
hgs
parents:
diff changeset
   485
	TInt lDivider = aKeyTimeCount - 1;
hgs
parents:
diff changeset
   486
    if ( iKeyTime->Count() == 0 && aKeyTimeCount > 0 && lDivider != 0 ) // check to avoid division by zero.
hgs
parents:
diff changeset
   487
        {
hgs
parents:
diff changeset
   488
        for ( TInt32 i = 0; i < aKeyTimeCount; i++ )
hgs
parents:
diff changeset
   489
            {
hgs
parents:
diff changeset
   490
			AddKeyTime( TFloatFixPt( i ) / TFloatFixPt( lDivider ) );
hgs
parents:
diff changeset
   491
            }
hgs
parents:
diff changeset
   492
        }
hgs
parents:
diff changeset
   493
    }
hgs
parents:
diff changeset
   494
hgs
parents:
diff changeset
   495
// Preparing animation time
hgs
parents:
diff changeset
   496
// this should be called just before animation start
hgs
parents:
diff changeset
   497
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   498
//
hgs
parents:
diff changeset
   499
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   500
void CSvgAnimTimeController::PrepareTimeL( const RArray<TFloatFixPt>* aValues )
hgs
parents:
diff changeset
   501
    {
hgs
parents:
diff changeset
   502
    TInt32 i;
hgs
parents:
diff changeset
   503
    // set y for each keytime
hgs
parents:
diff changeset
   504
    TInt32 count = iKeyTime->Count();
hgs
parents:
diff changeset
   505
hgs
parents:
diff changeset
   506
	// THIS IS MODIFIED FOR THE BUG FIX.
hgs
parents:
diff changeset
   507
    if ( count <= 1)
hgs
parents:
diff changeset
   508
		{
hgs
parents:
diff changeset
   509
        return;
hgs
parents:
diff changeset
   510
		}
hgs
parents:
diff changeset
   511
hgs
parents:
diff changeset
   512
    if ( iCalcMode == KAnimCalcModePaced )
hgs
parents:
diff changeset
   513
        {
hgs
parents:
diff changeset
   514
        if ( aValues == NULL )
hgs
parents:
diff changeset
   515
			{
hgs
parents:
diff changeset
   516
            return;
hgs
parents:
diff changeset
   517
			}
hgs
parents:
diff changeset
   518
hgs
parents:
diff changeset
   519
        TInt32 valCount = aValues->Count();
hgs
parents:
diff changeset
   520
        if ( valCount != count )
hgs
parents:
diff changeset
   521
			{
hgs
parents:
diff changeset
   522
            return; // No animation if values and keytimes has different number of items
hgs
parents:
diff changeset
   523
			}
hgs
parents:
diff changeset
   524
hgs
parents:
diff changeset
   525
        // 'Paced' animation needs unique animation time from
hgs
parents:
diff changeset
   526
        //  value difference
hgs
parents:
diff changeset
   527
        RArray<TFloatFixPt>* yary = new ( ELeave ) RArray<TFloatFixPt>( 1 ); // SSB was 10
hgs
parents:
diff changeset
   528
        CleanupStack::PushL( yary );
hgs
parents:
diff changeset
   529
	
hgs
parents:
diff changeset
   530
				#ifdef SVG_FLOAT_BUILD
hgs
parents:
diff changeset
   531
        yary->AppendL( TFloatFixPt( 0.0f ) );
hgs
parents:
diff changeset
   532
        TFloatFixPt sum( 0.0f );
hgs
parents:
diff changeset
   533
        #else
hgs
parents:
diff changeset
   534
        yary->AppendL( TFloatFixPt( 0, ETrue ) );
hgs
parents:
diff changeset
   535
        TFloatFixPt sum( 0, ETrue );
hgs
parents:
diff changeset
   536
        #endif
hgs
parents:
diff changeset
   537
        
hgs
parents:
diff changeset
   538
        for ( i = 1; i < valCount; i++ )
hgs
parents:
diff changeset
   539
            {
hgs
parents:
diff changeset
   540
            TFloatFixPt value = ( *aValues )[i] - ( *aValues )[i - 1];
hgs
parents:
diff changeset
   541
            if ( value < TFloatFixPt( 0 ) )
hgs
parents:
diff changeset
   542
            	{
hgs
parents:
diff changeset
   543
            	value = TFloatFixPt(0) - value;
hgs
parents:
diff changeset
   544
            	}
hgs
parents:
diff changeset
   545
            yary->AppendL( value );
hgs
parents:
diff changeset
   546
            sum += ( *yary )[i];
hgs
parents:
diff changeset
   547
            }
hgs
parents:
diff changeset
   548
        TFloatFixPt tmax( ( TInt32 ) KTimeMax );
hgs
parents:
diff changeset
   549
        ( *iKeyTime )[0].iY = 0;
hgs
parents:
diff changeset
   550
hgs
parents:
diff changeset
   551
hgs
parents:
diff changeset
   552
		for ( i = 1; i < valCount; i++ )
hgs
parents:
diff changeset
   553
			{
hgs
parents:
diff changeset
   554
			if( (TReal32)sum != 0) // check to avoid division by zero.
hgs
parents:
diff changeset
   555
				{
hgs
parents:
diff changeset
   556
				( *yary )[i] = ( ( *yary )[i] / sum ) * tmax; // need to make sure value does not exceed 0x7fff
hgs
parents:
diff changeset
   557
				}
hgs
parents:
diff changeset
   558
			else
hgs
parents:
diff changeset
   559
				{
hgs
parents:
diff changeset
   560
				( *yary )[i] = (TFloatFixPt) (0);
hgs
parents:
diff changeset
   561
				}
hgs
parents:
diff changeset
   562
hgs
parents:
diff changeset
   563
			( *iKeyTime )[i].iY = ( TUint16 )
hgs
parents:
diff changeset
   564
								  ( ( *iKeyTime )[i - 1].iY +
hgs
parents:
diff changeset
   565
									( TUint16 ) ( TInt32 ) ( *yary )[i] );
hgs
parents:
diff changeset
   566
			}
hgs
parents:
diff changeset
   567
		( *iKeyTime )[count - 1].iY = KTimeMax;
hgs
parents:
diff changeset
   568
hgs
parents:
diff changeset
   569
        yary->Close();
hgs
parents:
diff changeset
   570
        CleanupStack::PopAndDestroy( 1 ); // yary
hgs
parents:
diff changeset
   571
        }
hgs
parents:
diff changeset
   572
    else
hgs
parents:
diff changeset
   573
		{
hgs
parents:
diff changeset
   574
        for ( i = 0; i < count; i++ )
hgs
parents:
diff changeset
   575
            {
hgs
parents:
diff changeset
   576
            ( *iKeyTime )[i].iY = ( TUint16 ) ( i * KTimeMax / ( count -1  ) );
hgs
parents:
diff changeset
   577
            }
hgs
parents:
diff changeset
   578
		}
hgs
parents:
diff changeset
   579
    // interpolate animation time (keySplines)
hgs
parents:
diff changeset
   580
    for ( i = 1; i < KTimeMax; i++ )
hgs
parents:
diff changeset
   581
        {
hgs
parents:
diff changeset
   582
        if ( ( *iAnimTime )[i] == 0 )
hgs
parents:
diff changeset
   583
            ( *iAnimTime )[i] = ( *iAnimTime )[i - 1];
hgs
parents:
diff changeset
   584
        }
hgs
parents:
diff changeset
   585
    }
hgs
parents:
diff changeset
   586
hgs
parents:
diff changeset
   587
//
hgs
parents:
diff changeset
   588
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   589
//
hgs
parents:
diff changeset
   590
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   591
void CSvgAnimTimeController::AddKeyTime( TFloatFixPt aTimerTime )
hgs
parents:
diff changeset
   592
    {
hgs
parents:
diff changeset
   593
    TKeyTime newKeytime;
hgs
parents:
diff changeset
   594
    newKeytime.iX = ( TUint16 )
hgs
parents:
diff changeset
   595
                    ( ( TInt32 ) ( aTimerTime * TFloatFixPt( KTimeMax ) ) );
hgs
parents:
diff changeset
   596
    newKeytime.iY = 0;
hgs
parents:
diff changeset
   597
    iKeyTime->Append( newKeytime );
hgs
parents:
diff changeset
   598
    }
hgs
parents:
diff changeset
   599
hgs
parents:
diff changeset
   600
//
hgs
parents:
diff changeset
   601
// This needs 'L' postfix or TRAP
hgs
parents:
diff changeset
   602
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   603
//
hgs
parents:
diff changeset
   604
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   605
void CSvgAnimTimeController::AddKeySplineL( TFloatFixPt aX1,
hgs
parents:
diff changeset
   606
                                            TFloatFixPt aY1,
hgs
parents:
diff changeset
   607
                                            TFloatFixPt aX2,
hgs
parents:
diff changeset
   608
                                            TFloatFixPt aY2 )
hgs
parents:
diff changeset
   609
    {
hgs
parents:
diff changeset
   610
    // keySplines must be keyTime-1
hgs
parents:
diff changeset
   611
    if ( iSplineIndex >= iKeyTime->Count() - 1 )
hgs
parents:
diff changeset
   612
		{
hgs
parents:
diff changeset
   613
        return;
hgs
parents:
diff changeset
   614
		}
hgs
parents:
diff changeset
   615
hgs
parents:
diff changeset
   616
    // Keytime must be set before adding keyspline
hgs
parents:
diff changeset
   617
    CGfxGeneralPath* path = CGfxGeneralPath::NewLC();
hgs
parents:
diff changeset
   618
hgs
parents:
diff changeset
   619
    TFloatFixPt x0, y0, x3, y3;
hgs
parents:
diff changeset
   620
    x0 = ( TInt32 ) ( *iKeyTime )[iSplineIndex].iX;
hgs
parents:
diff changeset
   621
    y0 = ( TInt32 ) ( *iKeyTime )[iSplineIndex].iY;
hgs
parents:
diff changeset
   622
    x3 = ( TInt32 )
hgs
parents:
diff changeset
   623
         ( ( *iKeyTime )[iSplineIndex + 1].iX -
hgs
parents:
diff changeset
   624
           ( *iKeyTime )[iSplineIndex].iX );
hgs
parents:
diff changeset
   625
    y3 = ( TInt32 )
hgs
parents:
diff changeset
   626
         ( ( *iKeyTime )[iSplineIndex + 1].iY -
hgs
parents:
diff changeset
   627
           ( *iKeyTime )[iSplineIndex].iY );
hgs
parents:
diff changeset
   628
    aX1 *= x3;
hgs
parents:
diff changeset
   629
    aY1 *= y3;
hgs
parents:
diff changeset
   630
    aX2 *= x3;
hgs
parents:
diff changeset
   631
    aY2 *= y3;
hgs
parents:
diff changeset
   632
hgs
parents:
diff changeset
   633
    path->MoveToL( x0, y0, ETrue );
hgs
parents:
diff changeset
   634
    path->CubicToL( aX1, aY1, aX2, aY2, x3, y3, EFalse );
hgs
parents:
diff changeset
   635
    TGfxAffineTransform ident;
hgs
parents:
diff changeset
   636
hgs
parents:
diff changeset
   637
    CGfxFlatteningPathIterator* itr = CGfxFlatteningPathIterator::NewL( path,
hgs
parents:
diff changeset
   638
                                                                        &ident,
hgs
parents:
diff changeset
   639
                                                                        3 );
hgs
parents:
diff changeset
   640
hgs
parents:
diff changeset
   641
    CleanupStack::PushL( itr );
hgs
parents:
diff changeset
   642
    TFloatFixPt tmpcoords[6];
hgs
parents:
diff changeset
   643
    while ( !itr->IsDone() )
hgs
parents:
diff changeset
   644
        {
hgs
parents:
diff changeset
   645
        itr->CurrentSegment( tmpcoords );
hgs
parents:
diff changeset
   646
        TInt32 x = tmpcoords[0];
hgs
parents:
diff changeset
   647
        if ( 0 <= x && x <= 255 )
hgs
parents:
diff changeset
   648
            {
hgs
parents:
diff changeset
   649
            ( *iAnimTime )[x] = ( TUint8 ) ( TInt32 ) tmpcoords[1];
hgs
parents:
diff changeset
   650
            }
hgs
parents:
diff changeset
   651
        itr->NextL();
hgs
parents:
diff changeset
   652
        }
hgs
parents:
diff changeset
   653
hgs
parents:
diff changeset
   654
    iSplineIndex++;
hgs
parents:
diff changeset
   655
    CleanupStack::PopAndDestroy( 2 ); // path, itr
hgs
parents:
diff changeset
   656
    }
hgs
parents:
diff changeset
   657
hgs
parents:
diff changeset
   658
hgs
parents:
diff changeset
   659
hgs
parents:
diff changeset
   660
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   661
// Functions used by Decoder
hgs
parents:
diff changeset
   662
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   663
hgs
parents:
diff changeset
   664
TInt CSvgAnimTimeController::BeginTimesCount()
hgs
parents:
diff changeset
   665
	{
hgs
parents:
diff changeset
   666
	return iBeginTimeList->Count();
hgs
parents:
diff changeset
   667
	}
hgs
parents:
diff changeset
   668
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   669
//
hgs
parents:
diff changeset
   670
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   671
void CSvgAnimTimeController::SetBeginTimeList(RArray<TInt32>*& aList)
hgs
parents:
diff changeset
   672
	{
hgs
parents:
diff changeset
   673
	if (iBeginTimeList)
hgs
parents:
diff changeset
   674
		{
hgs
parents:
diff changeset
   675
		iBeginTimeList->Reset();
hgs
parents:
diff changeset
   676
		delete iBeginTimeList;
hgs
parents:
diff changeset
   677
		iBeginTimeList= NULL;
hgs
parents:
diff changeset
   678
		}
hgs
parents:
diff changeset
   679
hgs
parents:
diff changeset
   680
	iBeginTimeList= aList;
hgs
parents:
diff changeset
   681
	}
hgs
parents:
diff changeset
   682
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   683
//
hgs
parents:
diff changeset
   684
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   685
void CSvgAnimTimeController::SetKeyTimeArray(RArray<TKeyTime>*& aArray)
hgs
parents:
diff changeset
   686
	{
hgs
parents:
diff changeset
   687
	if (iKeyTime)
hgs
parents:
diff changeset
   688
		{
hgs
parents:
diff changeset
   689
		iKeyTime->Close();
hgs
parents:
diff changeset
   690
		delete iKeyTime;
hgs
parents:
diff changeset
   691
		iKeyTime= NULL;
hgs
parents:
diff changeset
   692
		}
hgs
parents:
diff changeset
   693
hgs
parents:
diff changeset
   694
	iKeyTime= aArray;
hgs
parents:
diff changeset
   695
	}
hgs
parents:
diff changeset
   696
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   697
//
hgs
parents:
diff changeset
   698
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   699
void CSvgAnimTimeController::  SetAnimTimeArray(RArray<TUint32>*& aArray)
hgs
parents:
diff changeset
   700
	{
hgs
parents:
diff changeset
   701
	if (iAnimTime)
hgs
parents:
diff changeset
   702
		{
hgs
parents:
diff changeset
   703
		iAnimTime->Close();
hgs
parents:
diff changeset
   704
		delete iAnimTime;
hgs
parents:
diff changeset
   705
		iAnimTime= NULL;
hgs
parents:
diff changeset
   706
		}
hgs
parents:
diff changeset
   707
hgs
parents:
diff changeset
   708
	iAnimTime= aArray;
hgs
parents:
diff changeset
   709
	}
hgs
parents:
diff changeset
   710
hgs
parents:
diff changeset
   711
hgs
parents:
diff changeset
   712
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   713
//
hgs
parents:
diff changeset
   714
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   715
void CSvgAnimTimeController:: CalculateAnimTimes()
hgs
parents:
diff changeset
   716
    {
hgs
parents:
diff changeset
   717
    if(iRepeatDurationTime <= iDurationTime   )
hgs
parents:
diff changeset
   718
	    {
hgs
parents:
diff changeset
   719
        iNewActiveDurationTime = iDurationTime;
hgs
parents:
diff changeset
   720
        iDurationTime = iRepeatDurationTime;
hgs
parents:
diff changeset
   721
hgs
parents:
diff changeset
   722
	    }
hgs
parents:
diff changeset
   723
	if( iBeginTime == KTimeIndefinite || iRepeatDurationTime == KTimeIndefinite )
hgs
parents:
diff changeset
   724
		{
hgs
parents:
diff changeset
   725
		iEndTime = KTimeIndefinite;
hgs
parents:
diff changeset
   726
		}
hgs
parents:
diff changeset
   727
hgs
parents:
diff changeset
   728
	}
hgs
parents:
diff changeset
   729
hgs
parents:
diff changeset
   730
void CSvgAnimTimeController:: SetOriginalValues_DOMReuse()
hgs
parents:
diff changeset
   731
    {
hgs
parents:
diff changeset
   732
    iOrgEndTime = iEndTime;
hgs
parents:
diff changeset
   733
	iModifiedEndTime= iEndTime;
hgs
parents:
diff changeset
   734
    iOrgDurationTime = iDurationTime;
hgs
parents:
diff changeset
   735
	}
hgs
parents:
diff changeset
   736
TUint32 CSvgAnimTimeController::GetOriginalEndTime()
hgs
parents:
diff changeset
   737
{
hgs
parents:
diff changeset
   738
return iOrgEndTime;
hgs
parents:
diff changeset
   739
}
hgs
parents:
diff changeset
   740
void CSvgAnimTimeController:: ReInitialize()
hgs
parents:
diff changeset
   741
    {
hgs
parents:
diff changeset
   742
     iEndTime = iOrgEndTime;
hgs
parents:
diff changeset
   743
	 iDurationTime = iOrgDurationTime;
hgs
parents:
diff changeset
   744
	}
hgs
parents:
diff changeset
   745
void CSvgAnimTimeController::AddToInitialList(TInt aBeginTime)
hgs
parents:
diff changeset
   746
    {
hgs
parents:
diff changeset
   747
        if ( aBeginTime < 0 )
hgs
parents:
diff changeset
   748
            {
hgs
parents:
diff changeset
   749
            aBeginTime = 0;     
hgs
parents:
diff changeset
   750
            }   
hgs
parents:
diff changeset
   751
     iInitialBeginTimeList->Append( aBeginTime );
hgs
parents:
diff changeset
   752
     iInitialBeginTimeList->SortSigned();
hgs
parents:
diff changeset
   753
     
hgs
parents:
diff changeset
   754
    }
hgs
parents:
diff changeset
   755
void CSvgAnimTimeController:: ReInitializeForSeek()
hgs
parents:
diff changeset
   756
    {
hgs
parents:
diff changeset
   757
/*	if (iOrgEndTime == KTimeIndefinite)
hgs
parents:
diff changeset
   758
		{
hgs
parents:
diff changeset
   759
		if( iEndTime == KTimeIndefinite)
hgs
parents:
diff changeset
   760
			{
hgs
parents:
diff changeset
   761
            iEndTime= iModifiedEndTime;
hgs
parents:
diff changeset
   762
			}
hgs
parents:
diff changeset
   763
		}
hgs
parents:
diff changeset
   764
	else
hgs
parents:
diff changeset
   765
		{
hgs
parents:
diff changeset
   766
		iEndTime = iOrgEndTime;
hgs
parents:
diff changeset
   767
		}
hgs
parents:
diff changeset
   768
*/
hgs
parents:
diff changeset
   769
	iEndTime = iModifiedEndTime;
hgs
parents:
diff changeset
   770
	 iDurationTime = iOrgDurationTime;
hgs
parents:
diff changeset
   771
	}
hgs
parents:
diff changeset
   772
hgs
parents:
diff changeset
   773
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   774
// CSvgAnimTimeController::SetIsSplineCalcMode
hgs
parents:
diff changeset
   775
//  Sets the calc mode to spline mode
hgs
parents:
diff changeset
   776
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   777
void CSvgAnimTimeController::SetIsSplineCalcMode( 
hgs
parents:
diff changeset
   778
        const TBool aIsSplineCalcMode ) // Boolean indicating calcMode
hgs
parents:
diff changeset
   779
    {
hgs
parents:
diff changeset
   780
    iIsSplineCalcMode = aIsSplineCalcMode;
hgs
parents:
diff changeset
   781
    }
hgs
parents:
diff changeset
   782
hgs
parents:
diff changeset
   783
hgs
parents:
diff changeset
   784
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   785
// CSvgAnimTimeController::IsSplineCalcMode
hgs
parents:
diff changeset
   786
//  Returns ETrue if the calc mode is in spline mode
hgs
parents:
diff changeset
   787
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   788
TBool CSvgAnimTimeController::IsSplineCalcMode() const
hgs
parents:
diff changeset
   789
    {
hgs
parents:
diff changeset
   790
    return iIsSplineCalcMode;
hgs
parents:
diff changeset
   791
    }
hgs
parents:
diff changeset
   792
hgs
parents:
diff changeset
   793
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   794
// CSvgAnimTimeController::SetSplineValueL
hgs
parents:
diff changeset
   795
// Sets the spline parameter string for later processing when calc mode is set
hgs
parents:
diff changeset
   796
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   797
void CSvgAnimTimeController::SetSplineValueL( const TDesC& aSplineValue )
hgs
parents:
diff changeset
   798
    {
hgs
parents:
diff changeset
   799
    iSplines = aSplineValue.AllocL();
hgs
parents:
diff changeset
   800
    }
hgs
parents:
diff changeset
   801
hgs
parents:
diff changeset
   802
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   803
// CSvgAnimTimeController::SplineValue
hgs
parents:
diff changeset
   804
//  Returns the string corresponding to the Spline parameters.
hgs
parents:
diff changeset
   805
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   806
TPtrC CSvgAnimTimeController::SplineValue() const
hgs
parents:
diff changeset
   807
    {
hgs
parents:
diff changeset
   808
    if ( iSplines )
hgs
parents:
diff changeset
   809
        {
hgs
parents:
diff changeset
   810
        return iSplines->Des();
hgs
parents:
diff changeset
   811
        }
hgs
parents:
diff changeset
   812
    else
hgs
parents:
diff changeset
   813
        {
hgs
parents:
diff changeset
   814
        TPtrC lRetVal;
hgs
parents:
diff changeset
   815
        lRetVal.Set( KEmptyString );
hgs
parents:
diff changeset
   816
        return lRetVal;
hgs
parents:
diff changeset
   817
        }
hgs
parents:
diff changeset
   818
    }
hgs
parents:
diff changeset
   819
hgs
parents:
diff changeset
   820
void CSvgAnimTimeController::GetAnimTimeForEnumeration( TInt32 aTimerTime,
hgs
parents:
diff changeset
   821
                                          TInt32& aAnimTime,
hgs
parents:
diff changeset
   822
                                          TInt32& aValueIndex,
hgs
parents:
diff changeset
   823
                                          TBool aKeyTimesPresent
hgs
parents:
diff changeset
   824
                                           )
hgs
parents:
diff changeset
   825
    {
hgs
parents:
diff changeset
   826
hgs
parents:
diff changeset
   827
	// This function is specifically for enumerations. i.e. "strings"
hgs
parents:
diff changeset
   828
	// remember that these attributes  {"strings"} can not be interpolated
hgs
parents:
diff changeset
   829
	// linearly so the calc mode for these should be
hgs
parents:
diff changeset
   830
	// discrete irrespective of what is specified in the .svg file.
hgs
parents:
diff changeset
   831
hgs
parents:
diff changeset
   832
hgs
parents:
diff changeset
   833
	// THE following code supports only "discrete" calc mode.
hgs
parents:
diff changeset
   834
hgs
parents:
diff changeset
   835
	if(  iDurationTime == KTimeIndefinite || iDurationTime == 0)
hgs
parents:
diff changeset
   836
        {
hgs
parents:
diff changeset
   837
        aValueIndex = 0;
hgs
parents:
diff changeset
   838
        aAnimTime=0;
hgs
parents:
diff changeset
   839
        return;
hgs
parents:
diff changeset
   840
        }
hgs
parents:
diff changeset
   841
    TInt32 x;
hgs
parents:
diff changeset
   842
hgs
parents:
diff changeset
   843
    if( iNewActiveDurationTime > 0 )//"repeatDur" <= "Dur"
hgs
parents:
diff changeset
   844
		{
hgs
parents:
diff changeset
   845
       	x = MULT255( aTimerTime - iBeginTime ) / iNewActiveDurationTime;
hgs
parents:
diff changeset
   846
		}
hgs
parents:
diff changeset
   847
    else
hgs
parents:
diff changeset
   848
		{
hgs
parents:
diff changeset
   849
hgs
parents:
diff changeset
   850
	   	x = MULT255( aTimerTime - iBeginTime ) / iDurationTime;
hgs
parents:
diff changeset
   851
hgs
parents:
diff changeset
   852
		}
hgs
parents:
diff changeset
   853
hgs
parents:
diff changeset
   854
    if ( x > KTimeMax )
hgs
parents:
diff changeset
   855
		{
hgs
parents:
diff changeset
   856
        x = KTimeMax;
hgs
parents:
diff changeset
   857
		}
hgs
parents:
diff changeset
   858
	else
hgs
parents:
diff changeset
   859
		{
hgs
parents:
diff changeset
   860
		if ( x < 0 )
hgs
parents:
diff changeset
   861
			{
hgs
parents:
diff changeset
   862
			x = 0;
hgs
parents:
diff changeset
   863
			}
hgs
parents:
diff changeset
   864
		}
hgs
parents:
diff changeset
   865
hgs
parents:
diff changeset
   866
    TInt32 kcount = iKeyTime->Count();
hgs
parents:
diff changeset
   867
hgs
parents:
diff changeset
   868
    if ( kcount == 0 )
hgs
parents:
diff changeset
   869
	    {
hgs
parents:
diff changeset
   870
        aValueIndex = 0;
hgs
parents:
diff changeset
   871
        aAnimTime = x; //
hgs
parents:
diff changeset
   872
        // No keytimes or paced animation
hgs
parents:
diff changeset
   873
           if ( x < KTimeMax / 2 )
hgs
parents:
diff changeset
   874
				{
hgs
parents:
diff changeset
   875
                aAnimTime = 0;
hgs
parents:
diff changeset
   876
				}
hgs
parents:
diff changeset
   877
            else
hgs
parents:
diff changeset
   878
				{
hgs
parents:
diff changeset
   879
                aAnimTime = KTimeMax;
hgs
parents:
diff changeset
   880
				}
hgs
parents:
diff changeset
   881
hgs
parents:
diff changeset
   882
        }
hgs
parents:
diff changeset
   883
     else
hgs
parents:
diff changeset
   884
        {
hgs
parents:
diff changeset
   885
        // find corresponding keytime index
hgs
parents:
diff changeset
   886
        TInt32 i = 0;
hgs
parents:
diff changeset
   887
		// earlier the last one was getting missed. this is specifically for
hgs
parents:
diff changeset
   888
		// "string" data types.
hgs
parents:
diff changeset
   889
        while ( i < kcount && ( *iKeyTime )[i].iX <= x )
hgs
parents:
diff changeset
   890
			{
hgs
parents:
diff changeset
   891
            i++;
hgs
parents:
diff changeset
   892
			}
hgs
parents:
diff changeset
   893
        if ( i > 0 )
hgs
parents:
diff changeset
   894
			{
hgs
parents:
diff changeset
   895
			i--;
hgs
parents:
diff changeset
   896
			}
hgs
parents:
diff changeset
   897
hgs
parents:
diff changeset
   898
			/// PROPAGATE THE CHANGES TO THIS PLACE ALSO.
hgs
parents:
diff changeset
   899
        if(x == 255)
hgs
parents:
diff changeset
   900
	        {
hgs
parents:
diff changeset
   901
	        aValueIndex = kcount-1;
hgs
parents:
diff changeset
   902
	        }
hgs
parents:
diff changeset
   903
	    else
hgs
parents:
diff changeset
   904
	    	{
hgs
parents:
diff changeset
   905
         	aValueIndex = i;
hgs
parents:
diff changeset
   906
	    	}
hgs
parents:
diff changeset
   907
	    	////// END OF ADDITION.
hgs
parents:
diff changeset
   908
hgs
parents:
diff changeset
   909
		if(i == (kcount-1))
hgs
parents:
diff changeset
   910
			{
hgs
parents:
diff changeset
   911
			i--;
hgs
parents:
diff changeset
   912
			}
hgs
parents:
diff changeset
   913
		// do not go down if "keyTimes" is specified in the file.
hgs
parents:
diff changeset
   914
hgs
parents:
diff changeset
   915
        if(aKeyTimesPresent)
hgs
parents:
diff changeset
   916
	        {
hgs
parents:
diff changeset
   917
	        return;
hgs
parents:
diff changeset
   918
	        }
hgs
parents:
diff changeset
   919
hgs
parents:
diff changeset
   920
		///come to this place if keyTimes is not present.
hgs
parents:
diff changeset
   921
		TInt32 alpha  = MULT255( ( TInt32 )
hgs
parents:
diff changeset
   922
	                                        ( x - ( *iKeyTime )[i].iX ) ) /
hgs
parents:
diff changeset
   923
	                               ( TInt32 )
hgs
parents:
diff changeset
   924
	                               ( ( *iKeyTime )[i + 1].iX -
hgs
parents:
diff changeset
   925
	                                 ( *iKeyTime )[i].iX ) ;
hgs
parents:
diff changeset
   926
hgs
parents:
diff changeset
   927
hgs
parents:
diff changeset
   928
hgs
parents:
diff changeset
   929
		// gives you AnimTime between 0-255 , this is used when KeyTimes is not
hgs
parents:
diff changeset
   930
		// explicitly specified in the .svg file.
hgs
parents:
diff changeset
   931
		aAnimTime = CSvgAnimationBase::BlendInt( alpha,
hgs
parents:
diff changeset
   932
                                                         ( *iKeyTime )[i].iY,
hgs
parents:
diff changeset
   933
                                                         ( *iKeyTime )[i + 1].iY );
hgs
parents:
diff changeset
   934
hgs
parents:
diff changeset
   935
hgs
parents:
diff changeset
   936
		if(aAnimTime > KTimeMax)
hgs
parents:
diff changeset
   937
			aAnimTime = KTimeMax;
hgs
parents:
diff changeset
   938
        if(aAnimTime < 0)
hgs
parents:
diff changeset
   939
			aAnimTime = 0;
hgs
parents:
diff changeset
   940
hgs
parents:
diff changeset
   941
        }
hgs
parents:
diff changeset
   942
    }
hgs
parents:
diff changeset
   943
hgs
parents:
diff changeset
   944
//////////////////////////////////////
hgs
parents:
diff changeset
   945
void CSvgAnimTimeController::CopyL(CSvgAnimTimeController* newElement)
hgs
parents:
diff changeset
   946
{
hgs
parents:
diff changeset
   947
	if(newElement)
hgs
parents:
diff changeset
   948
		{
hgs
parents:
diff changeset
   949
		newElement->iCalcMode = iCalcMode;
hgs
parents:
diff changeset
   950
		newElement->iBeginTime = iBeginTime;
hgs
parents:
diff changeset
   951
		newElement->iDurationTime = iDurationTime;
hgs
parents:
diff changeset
   952
		newElement->iOrgDurationTime = iOrgDurationTime;
hgs
parents:
diff changeset
   953
		newElement->iEndTime = iEndTime;
hgs
parents:
diff changeset
   954
		newElement->iOrgEndTime = iOrgEndTime;
hgs
parents:
diff changeset
   955
		newElement->iRepeatDurationTime = iRepeatDurationTime;
hgs
parents:
diff changeset
   956
		newElement->iNewActiveDurationTime = iNewActiveDurationTime;
hgs
parents:
diff changeset
   957
		newElement->iSplineIndex = iSplineIndex;
hgs
parents:
diff changeset
   958
		newElement->iModifiedEndTime = iModifiedEndTime;
hgs
parents:
diff changeset
   959
        newElement->iIsSplineCalcMode = EFalse;
hgs
parents:
diff changeset
   960
        newElement->iSplines = NULL; // There is no parsing later
hgs
parents:
diff changeset
   961
		TInt Count= iKeyTime->Count();
hgs
parents:
diff changeset
   962
		newElement->iKeyTime->Reset();
hgs
parents:
diff changeset
   963
		for(TInt i=0; i<Count; i++)
hgs
parents:
diff changeset
   964
            {
hgs
parents:
diff changeset
   965
            newElement->iKeyTime->AppendL(this->iKeyTime->operator[](i));
hgs
parents:
diff changeset
   966
            }
hgs
parents:
diff changeset
   967
        TInt Count2= iAnimTime->Count();
hgs
parents:
diff changeset
   968
        newElement->iAnimTime->Reset();
hgs
parents:
diff changeset
   969
        for(TInt i2=0; i2<Count2; i2++)
hgs
parents:
diff changeset
   970
            {
hgs
parents:
diff changeset
   971
            newElement->iAnimTime->AppendL(this->iAnimTime->operator[](i2));
hgs
parents:
diff changeset
   972
            }
hgs
parents:
diff changeset
   973
        TInt Count3= iBeginTimeList->Count();
hgs
parents:
diff changeset
   974
        newElement->iBeginTimeList->Reset();
hgs
parents:
diff changeset
   975
        for(TInt i3=0; i3<Count3; i3++)
hgs
parents:
diff changeset
   976
            {
hgs
parents:
diff changeset
   977
            newElement->iBeginTimeList->AppendL(this->iBeginTimeList->operator[](i3));
hgs
parents:
diff changeset
   978
            }
hgs
parents:
diff changeset
   979
		}
hgs
parents:
diff changeset
   980
hgs
parents:
diff changeset
   981
}
hgs
parents:
diff changeset
   982
void CSvgAnimTimeController:: SetModifiedEndTime(TUint32 aTime)
hgs
parents:
diff changeset
   983
    {
hgs
parents:
diff changeset
   984
	if(aTime >= iBeginTime)
hgs
parents:
diff changeset
   985
	    iModifiedEndTime = aTime;
hgs
parents:
diff changeset
   986
	else
hgs
parents:
diff changeset
   987
	    iModifiedEndTime = iBeginTime;
hgs
parents:
diff changeset
   988
hgs
parents:
diff changeset
   989
	}
hgs
parents:
diff changeset
   990
hgs
parents:
diff changeset
   991
void CSvgAnimTimeController:: Reset()
hgs
parents:
diff changeset
   992
    {
hgs
parents:
diff changeset
   993
   // iEndTime = iModifiedEndTime;
hgs
parents:
diff changeset
   994
hgs
parents:
diff changeset
   995
   if(iOrgEndTime == KTimeIndefinite)
hgs
parents:
diff changeset
   996
		{
hgs
parents:
diff changeset
   997
		iEndTime = iModifiedEndTime;
hgs
parents:
diff changeset
   998
		}
hgs
parents:
diff changeset
   999
	else
hgs
parents:
diff changeset
  1000
		{
hgs
parents:
diff changeset
  1001
		iEndTime= iOrgEndTime;
hgs
parents:
diff changeset
  1002
		}
hgs
parents:
diff changeset
  1003
	 iDurationTime = iOrgDurationTime ;
hgs
parents:
diff changeset
  1004
hgs
parents:
diff changeset
  1005
hgs
parents:
diff changeset
  1006
	}
hgs
parents:
diff changeset
  1007
void CSvgAnimTimeController:: SetEndTimesIndefinite()
hgs
parents:
diff changeset
  1008
    {
hgs
parents:
diff changeset
  1009
	iModifiedEndTime = KTimeIndefinite;
hgs
parents:
diff changeset
  1010
	iEndTime = KTimeIndefinite;
hgs
parents:
diff changeset
  1011
	}
hgs
parents:
diff changeset
  1012
void CSvgAnimTimeController::GetNextEndTime(TInt32 aBeginTime)
hgs
parents:
diff changeset
  1013
    {
hgs
parents:
diff changeset
  1014
    // this is similar to adobe.
hgs
parents:
diff changeset
  1015
	TInt lCount = iEndTimeList->Count();
hgs
parents:
diff changeset
  1016
	for(TInt i=0; i<lCount; i++)
hgs
parents:
diff changeset
  1017
		{
hgs
parents:
diff changeset
  1018
		if(iEndTimeList->operator[](i) >= aBeginTime)
hgs
parents:
diff changeset
  1019
			{
hgs
parents:
diff changeset
  1020
		 	iEndTime = iEndTimeList->operator[](i);
hgs
parents:
diff changeset
  1021
		 	return;
hgs
parents:
diff changeset
  1022
			}
hgs
parents:
diff changeset
  1023
		}
hgs
parents:
diff changeset
  1024
	iEndTime = KTimeIndefinite;
hgs
parents:
diff changeset
  1025
	}
hgs
parents:
diff changeset
  1026
void CSvgAnimTimeController::SetNextBeginTime(TInt32 aCurTime)
hgs
parents:
diff changeset
  1027
    {
hgs
parents:
diff changeset
  1028
    // Initially begintime is indefinite
hgs
parents:
diff changeset
  1029
    // checking beginlist
hgs
parents:
diff changeset
  1030
    if( aCurTime == KTimeIndefinite && iBeginTimeList->Count() > 0)
hgs
parents:
diff changeset
  1031
        {
hgs
parents:
diff changeset
  1032
        iBeginTime = iBeginTimeList->operator[](0);
hgs
parents:
diff changeset
  1033
        }
hgs
parents:
diff changeset
  1034
    // pick the begin time that is greater than the time passed
hgs
parents:
diff changeset
  1035
    else
hgs
parents:
diff changeset
  1036
        {
hgs
parents:
diff changeset
  1037
        TInt lCount = iBeginTimeList->Count();
hgs
parents:
diff changeset
  1038
    	for(TInt i=0; i<lCount; i++)
hgs
parents:
diff changeset
  1039
    		{
hgs
parents:
diff changeset
  1040
    		if(iBeginTimeList->operator[](i) >= aCurTime)
hgs
parents:
diff changeset
  1041
    			{
hgs
parents:
diff changeset
  1042
    		 	iBeginTime = iBeginTimeList->operator[](i);
hgs
parents:
diff changeset
  1043
    		 	return;
hgs
parents:
diff changeset
  1044
    			}
hgs
parents:
diff changeset
  1045
    		}
hgs
parents:
diff changeset
  1046
    	
hgs
parents:
diff changeset
  1047
    	iBeginTime = KTimeIndefinite;
hgs
parents:
diff changeset
  1048
	    }
hgs
parents:
diff changeset
  1049
	}
hgs
parents:
diff changeset
  1050
	
hgs
parents:
diff changeset
  1051
void CSvgAnimTimeController::SaveEndTime()	
hgs
parents:
diff changeset
  1052
    {
hgs
parents:
diff changeset
  1053
    iInitialEndTime = iEndTime;
hgs
parents:
diff changeset
  1054
    iInitialEndTimeList->Reset();
hgs
parents:
diff changeset
  1055
    for(TInt i=0; i<iEndTimeList->Count(); i++)
hgs
parents:
diff changeset
  1056
        {
hgs
parents:
diff changeset
  1057
        iInitialEndTimeList->Append(iEndTimeList->operator[](i));
hgs
parents:
diff changeset
  1058
        }
hgs
parents:
diff changeset
  1059
    }
hgs
parents:
diff changeset
  1060
void CSvgAnimTimeController::SaveBeginTime()
hgs
parents:
diff changeset
  1061
    {
hgs
parents:
diff changeset
  1062
    iInitialBeginTime = iBeginTime;
hgs
parents:
diff changeset
  1063
    iInitialBeginTimeList->Reset();
hgs
parents:
diff changeset
  1064
    for(TInt i =0; i<iBeginTimeList->Count(); i++)
hgs
parents:
diff changeset
  1065
        {
hgs
parents:
diff changeset
  1066
        iInitialBeginTimeList->Append(iBeginTimeList->operator[](i));
hgs
parents:
diff changeset
  1067
        }
hgs
parents:
diff changeset
  1068
    }
hgs
parents:
diff changeset
  1069
void CSvgAnimTimeController::ResetEndTime()
hgs
parents:
diff changeset
  1070
    {
hgs
parents:
diff changeset
  1071
hgs
parents:
diff changeset
  1072
    iEndTime = iInitialEndTime;
hgs
parents:
diff changeset
  1073
    iModifiedEndTime = iInitialEndTime;
hgs
parents:
diff changeset
  1074
    
hgs
parents:
diff changeset
  1075
    iEndTimeList->Reset();
hgs
parents:
diff changeset
  1076
    
hgs
parents:
diff changeset
  1077
    for(TInt i=0; i<iInitialEndTimeList->Count();i++)
hgs
parents:
diff changeset
  1078
        {
hgs
parents:
diff changeset
  1079
        iEndTimeList->Append(iInitialEndTimeList->operator[](i));
hgs
parents:
diff changeset
  1080
        }
hgs
parents:
diff changeset
  1081
    }
hgs
parents:
diff changeset
  1082
void CSvgAnimTimeController::ResetBeginTime()
hgs
parents:
diff changeset
  1083
    {
hgs
parents:
diff changeset
  1084
    iBeginTime = iInitialBeginTime;
hgs
parents:
diff changeset
  1085
    iBeginTimeList->Reset();
hgs
parents:
diff changeset
  1086
    for(TInt i=0; i<iInitialBeginTimeList->Count();i++)
hgs
parents:
diff changeset
  1087
        {
hgs
parents:
diff changeset
  1088
        iBeginTimeList->Append(iInitialBeginTimeList->operator[](i));
hgs
parents:
diff changeset
  1089
        }
hgs
parents:
diff changeset
  1090
    }
hgs
parents:
diff changeset
  1091
TInt32 CSvgAnimTimeController::LastEndTime()
hgs
parents:
diff changeset
  1092
    {
hgs
parents:
diff changeset
  1093
    if(iEndTimeList)
hgs
parents:
diff changeset
  1094
        {
hgs
parents:
diff changeset
  1095
        if(iEndTimeList->Count())
hgs
parents:
diff changeset
  1096
            {
hgs
parents:
diff changeset
  1097
            return iEndTimeList->operator[](iEndTimeList->Count() - 1);
hgs
parents:
diff changeset
  1098
            }
hgs
parents:
diff changeset
  1099
        else
hgs
parents:
diff changeset
  1100
            {
hgs
parents:
diff changeset
  1101
            return KTimeIndefinite;
hgs
parents:
diff changeset
  1102
            }    
hgs
parents:
diff changeset
  1103
        }
hgs
parents:
diff changeset
  1104
    else
hgs
parents:
diff changeset
  1105
        {
hgs
parents:
diff changeset
  1106
        return KTimeIndefinite;
hgs
parents:
diff changeset
  1107
        }
hgs
parents:
diff changeset
  1108
    }
hgs
parents:
diff changeset
  1109
TInt32 CSvgAnimTimeController::LastBeginTime()
hgs
parents:
diff changeset
  1110
    {
hgs
parents:
diff changeset
  1111
    if(iBeginTimeList)
hgs
parents:
diff changeset
  1112
        {
hgs
parents:
diff changeset
  1113
        if(iBeginTimeList->Count())
hgs
parents:
diff changeset
  1114
            {
hgs
parents:
diff changeset
  1115
            return iBeginTimeList->operator[](iBeginTimeList->Count() - 1);
hgs
parents:
diff changeset
  1116
            }
hgs
parents:
diff changeset
  1117
        else
hgs
parents:
diff changeset
  1118
            {
hgs
parents:
diff changeset
  1119
            return KTimeIndefinite;
hgs
parents:
diff changeset
  1120
            } 
hgs
parents:
diff changeset
  1121
        }
hgs
parents:
diff changeset
  1122
    else
hgs
parents:
diff changeset
  1123
        {
hgs
parents:
diff changeset
  1124
        return KTimeIndefinite;
hgs
parents:
diff changeset
  1125
        }
hgs
parents:
diff changeset
  1126
    }
hgs
parents:
diff changeset
  1127