svgtopt/SVG/SVGEngine/inc/SVGTimer.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Wed, 14 Apr 2010 16:53:18 +0300
branchRCL_3
changeset 15 d240fe32a15c
parent 0 d46562c3d99d
permissions -rw-r--r--
Revision: 201013 Kit: 201015

/*
* Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description:  SVG Engine header file
 *
*/


#ifndef __INC_CSVGTIMER__
#define __INC_CSVGTIMER__

#if !defined(__E32BASE_H__)
#include <e32base.h>
#endif
#include "GfxFloatFixPt.h"

// Maximum frame rate: 15 fps
const TUint32 KMinFrameDelay = 33;       // milliseconds
const TUint32 KMinSleepDuration = 1;     // milliseconds

// Minimum sleep duration in msecs
const TUint32 KMinSleepDurationInMsecs = 1000;

class CSvgEngineImpl;
class CSvgTimeContainer;

/**
 * A Timer class that wraps Symbian CTimer class
 * All the essential functionality is same
 * Adds additional capabilities such as frames, frames per second information,
 * ability to specify/change duration etc.
 *
 *  @lib SVGEngine.lib
 *  @since 1.0
 */
class CSvgTimer : public CTimer
    {
    public:

        /**
         * Two phase constructor
         *
         * @since 1.0
         * @param aTimeContainer - Pointer to the Time Container
         * @return An instance of the CSvgTimer
         */
        static CSvgTimer*   NewLC( CSvgTimeContainer* 
            aTimeContainer );

        /**
         * Two phase constructor
         *
         * @since 1.0
         * @param aTimeContainer - Pointer to the Time Container
         * @return An instance of the CSvgTimer
         */
        static CSvgTimer*   NewL( CSvgTimeContainer* 
            aTimeContainer );
            
        /**
         * Destructor
         *
         * @since 1.0
         * @param None
         * @return None
         */
                            ~CSvgTimer();

    public:
        // Defined as pure virtual by CActive;

        /**
         * Standard Active Object DoCancel
         *
         * @since 1.0
         * @param None
         * @return None
         */
        void                DoCancel();

        /**
         * Standard Active Object RunL
         *
         * @since 1.0
         * @param
         * @return
         */
        void                RunL();


       /**
         * Reset the time
         *
         * @since 1.0
         * @param None
         * @return None
         */
        void    ResetTime();

        /**
         * CHange the duration of the timer
         *
         * @since 1.0
         * @param aTimerDuration - An integer that is the new duration
         * @return None
         */
        void    ChangeFrameDuration( TUint32 aTimerDuration );


        /**
         * Return the frames per second information
         *
         * @since 1.0
         * @param None
         * @return An integer that is the number of frames per second
         */
        TUint   Fps();

        /**
         * Resume function
         *
         * @since 1.0
         * @param aTime Time in msecs to resume after(Must be Positive)
         * @return An integer that is the number of frames per second
         */
        void   SVGResume( TInt32 aTime );

        /**
         * Pause function
         *
         * @since 1.0
         * @param None
         * @return An integer that is the number of frames per second
         */
        void   SVGStop();

        /**
         * Set Start Time for animation
         *
         * @since 1.0
         * @param None
         * @return None
         */
        void SetStartTime();

        /**
         * Set the timer to forward/rewind animation
         *
         * @since 1.0
         * @param aTime - in microseconds
         * @return None
         */
        void SetSeekTime( TUint32 aTime );

        /**
         * Set whether each frame generated should be time-base or
         * frame-based.
         *
         * @since 1.0
         * @param aKeepStrictFrameDuration - if ETrue then
         * every cycle of RunL will generate a frame with the elapsed
         * time set by ChangeFrameDuration().
         * @return None
         */
        void SetStrictFrameDuration( TBool aKeepStrictFrameDuration );

    protected:

        /**
         * Private constructor
         *
         * @since 1.0
         * @param aSvgEngine - A pointer to the SVG Engine
         * @return None
         */
         CSvgTimer( CSvgTimeContainer* 
            aTimeContainer );
        /**
         * A private constructor that constructs heap objects
         *
         * @since 1.0
         * @param None
         * @return None
         */
        void                ConstructL();

    private:
        static TUint32 GetElapsedMilliseconds( TTime& aStart, TTime& aEnd );

        /**
         * Request svg engine to generate frame at the given time in
         * milliseconds
         *
         * @since 1.0
         * @param aTime - milliseconds
         * @return None
         */
        TUint32 GenerateFrameL( TUint32 aTime );


        CSvgTimeContainer* iTimeContainer;

        TUint32             iTime;          // in millisecond
        TUint32             iFrameDuration; // in millisecond
        TTime               iPreviousFrameTime;

        TUint32             iFrames;        // for debug. counting FPS

        // Frame-based or time-based (default)
        TBool               iIsStrictFrameDuration;

        TBool               iFirstFrameDrawn;
    };

#endif //__INC_CSVGTIMER__