williamr@2: // Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@2: // All rights reserved. williamr@2: // This component and the accompanying materials are made available williamr@4: // under the terms of "Eclipse Public License v1.0" williamr@2: // which accompanies this distribution, and is available williamr@4: // at the URL "http://www.eclipse.org/legal/epl-v10.html". williamr@2: // williamr@2: // Initial Contributors: williamr@2: // Nokia Corporation - initial contribution. williamr@2: // williamr@2: // Contributors: williamr@2: // williamr@2: // Description: williamr@2: // williamr@2: williamr@2: #ifndef __BASICANIMATION_H__ williamr@2: #define __BASICANIMATION_H__ williamr@2: williamr@2: #include williamr@2: #include williamr@2: williamr@2: class RWsSession; williamr@2: class RWindow; williamr@2: class CWindowGc; williamr@2: class CFbsBitmap; williamr@2: class CFbsBitmapDevice; williamr@2: class CFbsBitGc; williamr@2: class CAnimationDataProvider; williamr@2: class CAnimator; williamr@2: class TAnimationConfig; williamr@2: class CAnimationTls; williamr@2: class CAnimationTicker; williamr@2: class CBasicAnimationExt; williamr@2: class CCoeControl; williamr@2: williamr@2: /** williamr@2: Implementation of CAnimation for purely client side animations. williamr@2: williamr@2: A basic animation accepts a data provider during construction, loads the williamr@2: appropriate animator plugin, and implements the interface defined in williamr@2: CAnimation. williamr@2: williamr@2: A basic animation must be associated with an RWindow. Redraw events will be williamr@2: received by the client application whenever the animation needs to draw a new williamr@2: frame, and it is the applications responsibility to call Draw() while handling williamr@2: these events. It is also the client applications responsibility to handle williamr@2: visibility events and place the animation on hold when it isn't visible. This williamr@2: saves on CPU usage and ultimately prolongs battery life. williamr@2: williamr@2: @see CAnimationDataProvider williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: class CBasicAnimation : public CAnimation, public MAnimationDrawer, public MAnimationDataProviderObserver williamr@2: { williamr@2: private: williamr@2: enum TFlags williamr@2: { williamr@2: EAnimationInitialised = 0x0001, williamr@2: }; williamr@2: public: williamr@2: IMPORT_C static CBasicAnimation* NewL(CAnimationDataProvider* aDataProvider, const TPoint& aPoint, RWsSession& aWs, RWindow& aWindow, MAnimationObserver* aObserver = 0); williamr@2: IMPORT_C static CBasicAnimation* NewL(CAnimationDataProvider* aDataProvider, const TPoint& aPoint, RWsSession& aWs, RWindow& aWindow, const TDesC8& aDataType, MAnimationObserver* aObserver = 0); williamr@2: IMPORT_C static CBasicAnimation* NewL(CAnimationDataProvider* aDataProvider, const TPoint& aPoint, MAnimationObserver* aObserver, const CCoeControl* aHost); williamr@2: IMPORT_C static CBasicAnimation* NewL(CAnimationDataProvider* aDataProvider, const TPoint& aPoint, const TDesC8& aDataType, MAnimationObserver* aObserver, const CCoeControl* aHost); williamr@2: IMPORT_C ~CBasicAnimation(); williamr@2: williamr@2: IMPORT_C void Draw(CWindowGc& aGc) const; williamr@2: williamr@2: /** Provides an CAnimationDataProvider interface to the client application. williamr@2: @return iDataProvider A CAnimationDataProvider */ williamr@2: inline CAnimationDataProvider* DataProvider() { return iDataProvider; } williamr@2: williamr@2: /** Returns the current drawing position. williamr@2: @return ipoint const Tpoint& */ williamr@2: inline const TPoint& Position() const { return iPoint; } williamr@2: williamr@2: /** Gets the size of the smallest bounding rectangle that will be required to render the animation. williamr@2: williamr@2: This function is called when the animator is ready to begin animating. The animator cannot be started williamr@2: until it has called this function. williamr@2: @return iSize The size of the smallest bounding rectangle */ williamr@2: inline const TSize& Size() const { return iSize; } williamr@2: // From CAnimation: williamr@2: virtual void Start(const TAnimationConfig& aConfig); williamr@2: virtual void Stop(); williamr@2: virtual void Pause(); williamr@2: virtual void Resume(); williamr@2: virtual void Hold(); williamr@2: virtual void Unhold(); williamr@2: virtual void SetPosition(const TPoint& aPoint); williamr@2: virtual void Freeze(); williamr@2: virtual void Unfreeze(); williamr@2: public: williamr@2: IMPORT_C void SetHostL(const CCoeControl* aHost); williamr@2: protected: williamr@2: CBasicAnimation(CAnimationDataProvider* aDataProvider, const TPoint& aPoint, RWsSession* aWs, RWindow* aWindow, MAnimationObserver* aObserver); williamr@2: CBasicAnimation(); williamr@2: CBasicAnimation(CAnimationDataProvider* aDataProvider, const TPoint& aPoint, MAnimationObserver* aObserver); williamr@2: void ConstructL(const TDesC8& aDataType); williamr@2: IMPORT_C virtual void CBasicAnimation_Reserved1(); williamr@2: IMPORT_C virtual void CBasicAnimation_Reserved2(); williamr@2: void ConstructL(const TDesC8& aDataType,const CCoeControl* aHost); williamr@2: private: williamr@2: CBasicAnimation(const CBasicAnimation&); // no implementation williamr@2: CBasicAnimation& operator=(const CBasicAnimation&); // no implementation williamr@2: // from MAnimationDataProviderObserver williamr@2: virtual void DataProviderEventL(TInt aEvent, TAny* aData, TInt aDataSize); williamr@2: // From MAnimatorDrawer williamr@2: virtual void AnimatorDraw(); williamr@2: virtual void AnimatorInitialisedL(const TSize& aSize); williamr@2: virtual void AnimatorResetL(); williamr@2: virtual const TPtrC8 AnimatorDataType() const; williamr@2: virtual CAnimationTicker& AnimatorTicker(); williamr@2: private: williamr@2: CBasicAnimationExt* iBasicAnimationExt; williamr@2: MAnimationObserver* iObserver; williamr@2: CAnimationDataProvider* iDataProvider; williamr@2: CAnimationTls* iTls; williamr@2: TPoint iPoint; williamr@2: RWsSession* iWs; williamr@2: RWindow* iWindow; williamr@2: HBufC8* iDataType; williamr@2: TInt iFreezeCount; williamr@2: TInt iFlags; williamr@2: TSize iSize; williamr@2: CAnimator* iAnimator; williamr@2: CFbsBitmap* iBitmap; williamr@2: CFbsBitmap* iMask; williamr@2: CFbsBitmapDevice* iBitmapDevice; williamr@2: CFbsBitmapDevice* iMaskDevice; williamr@2: CFbsBitGc* iRenderGc; williamr@2: }; williamr@2: williamr@2: #endif