williamr@2: // Copyright (c) 1997-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@2: // under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members williamr@2: // which accompanies this distribution, and is available williamr@2: // at the URL "http://www.symbianfoundation.org/legal/licencesv10.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: williamr@2: #if !defined(__BMPANCLI_H__) williamr@2: #define __BMPANCLI_H__ williamr@2: williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: williamr@2: // williamr@2: // CFrameData williamr@2: // williamr@2: williamr@2: williamr@2: /** williamr@2: Encapsulates the information required for one frame of an animation. williamr@2: williamr@2: Each animation frame includes a bitmap that is displayed in a specified position williamr@2: for a specified length of time. You can optionally include a mask that either williamr@2: hides part of the bitmap, or makes part of the bitmap transparent so that the williamr@2: background can be seen. williamr@2: williamr@2: You will probably need to define several frames for a complete animation. williamr@2: When you have defined the frames you require, use CBitmapAnimClientData to williamr@2: construct the animation itself. williamr@2: williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: class CBitmapFrameData : public CBase williamr@2: { williamr@2: public: williamr@2: IMPORT_C ~CBitmapFrameData(); williamr@2: IMPORT_C static CBitmapFrameData* NewL(); williamr@2: IMPORT_C static CBitmapFrameData* NewL(CFbsBitmap* aBitmap, CFbsBitmap* aMask=NULL); williamr@2: IMPORT_C static CBitmapFrameData* NewL(CFbsBitmap* aBitmap, CFbsBitmap* aMask, TInt aIntervalInMilliSeconds, TPoint aPosition); williamr@2: // williamr@2: IMPORT_C void SetBitmap(CFbsBitmap* aBitmap); williamr@2: IMPORT_C void SetMask(CFbsBitmap* aMask); williamr@2: IMPORT_C void SetPosition(TPoint aPosition); williamr@2: IMPORT_C void SetInterval(TInt aIntervalInMilliSeconds); williamr@2: IMPORT_C void SetBitmapsOwnedExternally(TBool aOwnedExternally); williamr@2: // williamr@2: IMPORT_C CFbsBitmap* Bitmap() const; williamr@2: IMPORT_C CFbsBitmap* Mask() const; williamr@2: IMPORT_C TInt IntervalInMilliSeconds() const; williamr@2: IMPORT_C TPoint Position() const; williamr@2: IMPORT_C TBool BitmapsOwnedExternally() const; williamr@2: private: williamr@2: CBitmapFrameData(); williamr@2: private: williamr@2: CFbsBitmap* iBitmap; williamr@2: CFbsBitmap* iMaskBitmap; williamr@2: TBool iBitmapsOwnedExternally; williamr@2: TInt iIntervalInMilliSeconds; williamr@2: TPoint iPosition; williamr@2: }; williamr@2: williamr@2: williamr@2: // williamr@2: // CBitmapAnimClientData williamr@2: // williamr@2: williamr@2: williamr@2: /** williamr@2: Encapsulates one or more animation frames into an entire animation. williamr@2: williamr@2: In addition to specifying the frames you wish to include in your animation, williamr@2: you can also specify: williamr@2: williamr@2: - whether the animation will flash williamr@2: williamr@2: - whether the animation is played once, or continuously williamr@2: williamr@2: - the background frame that is drawn to clear each frame in the animation williamr@2: williamr@2: You can also specify a default frame interval that is used for all frames williamr@2: in an animation. If the interval is already set for any of the individual williamr@2: frames, that takes precedence. williamr@2: williamr@2: When you have defined your animation, use RBitmapAnim to play the animation. williamr@2: williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: class CBitmapAnimClientData : public CBase williamr@2: { williamr@2: public: williamr@2: /** Animation play mode flags. williamr@2: williamr@2: The animation can be played in any of the ways described below. */ williamr@2: enum TPlayMode williamr@2: { williamr@2: /** Plays the animation once, from the first frame to the last one. */ williamr@2: EPlay = 0x00, williamr@2: /** Plays the animation from the first frame to the last one continuously. */ williamr@2: ECycle = 0x01, williamr@2: /** Plays the animation from the first frame to the last one then from the last williamr@2: frame to the first continuously. */ williamr@2: EBounce = 0x02 williamr@2: }; williamr@2: public: williamr@2: IMPORT_C static CBitmapAnimClientData* NewL(); williamr@2: IMPORT_C ~CBitmapAnimClientData(); williamr@2: // williamr@2: IMPORT_C void AppendFrameL(CBitmapFrameData* aFrame); williamr@2: IMPORT_C void ResetFrameArray(); williamr@2: IMPORT_C void SetBackgroundFrame(CBitmapFrameData* aBackgroundFrame); williamr@2: IMPORT_C void SetFlash(TBool aFlash); williamr@2: IMPORT_C void SetFrameInterval(TInt aFrameIntervalInMilliSeconds); williamr@2: IMPORT_C void SetPlayMode(TPlayMode aPlayMode); williamr@2: // williamr@2: IMPORT_C CBitmapFrameData* BackgroundFrame() const; williamr@2: IMPORT_C TBool Flash() const; williamr@2: IMPORT_C const CArrayPtrFlat& FrameArray() const; williamr@2: IMPORT_C TInt FrameIntervalInMilliSeconds() const; williamr@2: IMPORT_C TPlayMode PlayMode() const; williamr@2: // williamr@2: IMPORT_C TInt DurationInMilliSeconds() const; williamr@2: IMPORT_C TSize Size() const; williamr@2: private: williamr@2: CBitmapAnimClientData(); williamr@2: private: williamr@2: TBool iFlash; williamr@2: TPlayMode iPlayMode; williamr@2: TInt iFrameIntervalInMilliSeconds; williamr@2: CArrayPtrFlat iFrameArray; williamr@2: CBitmapFrameData* iBackgroundFrame; williamr@2: }; williamr@2: williamr@2: williamr@2: williamr@2: /** williamr@2: Enables a client to package animation data, and send it to the window server williamr@2: for display. williamr@2: williamr@2: Before using RBitmapAnim, a client must instantiate an RAnimDll. This provides williamr@2: a reference to the window server DLL that runs the animation specified through williamr@2: the RBitmapAnim() object. To complete construction, call ConstructL(). williamr@2: williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: class RBitmapAnim : public RAnim williamr@2: { williamr@2: public: williamr@2: IMPORT_C RBitmapAnim(RAnimDll& aAnimDll); williamr@2: IMPORT_C void ConstructL(const RWindowBase& aWindow); williamr@2: IMPORT_C void DisplayFrameL(TInt aIndex); williamr@2: IMPORT_C void SetBitmapAnimDataL(const CBitmapAnimClientData& aBitmapAnimData); williamr@2: IMPORT_C void SetFlashL(TBool aFlash); williamr@2: IMPORT_C void SetFrameIntervalL(TInt aFrameIntervalInMilliSeconds); williamr@2: IMPORT_C void SetPlayModeL(CBitmapAnimClientData::TPlayMode aPlayMode); williamr@2: IMPORT_C void StartL(); williamr@2: IMPORT_C void StopL(); williamr@2: IMPORT_C void SetNumberOfCyclesL(TInt aNumberOfCycles); williamr@2: IMPORT_C void SetPositionL(TPoint aPosition); williamr@2: private: williamr@2: void SetAttributesL(const CBitmapAnimClientData& aBitmapAnimData); williamr@2: void SetBackgroundFrameL(const CBitmapFrameData& aFrame); williamr@2: void SetFrameArrayL(const CArrayPtrFlat& aFrameArray); williamr@2: void SetFrameL(const CBitmapFrameData& aFrame, TInt aOpCode); williamr@2: }; williamr@2: williamr@2: #endif