epoc32/include/mw/aknbitmapanimation.h
branchSymbian2
changeset 2 2fe1408b6811
parent 1 666f914201fb
child 4 837f303aceeb
--- a/epoc32/include/mw/aknbitmapanimation.h	Tue Nov 24 13:55:44 2009 +0000
+++ b/epoc32/include/mw/aknbitmapanimation.h	Tue Mar 16 16:12:26 2010 +0000
@@ -1,1 +1,296 @@
-aknbitmapanimation.h
+/*
+* Copyright (c) 2002, 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* 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
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/licencesv10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: A control that can be used to display an animation. It can be constructed from 
+*   a skin, or from resource.
+* 
+*
+*/
+
+// AKNBITMAPANIMATION.H
+//
+
+#if !defined(__AKNBITMAPANIMATION_H__)
+#define __AKNBITMAPANIMATION_H__
+
+#if !defined(__COECNTRL_H__)
+#include <coecntrl.h>
+#endif
+
+#include <bmpancli.h>
+#include <AknControl.h>
+#include <AknIconUtils.h>
+
+/**
+ * Client class for wserv animations based on bitmaps.
+ * 
+ * Enables a client to package animation data, and send it to the window server for display.
+ * Requires the RAnimDll to be already instantiated. Also provides functionality for sending
+ * specific messages to configure the animation.
+ *
+ *  @lib avkon
+ *  @since S60 0.9
+ */
+class RAknBitmapAnim : public RBitmapAnim
+    {
+public:
+    /**
+     * Constructor. 
+     *
+     * @param aAnimDll must be already instantiated.
+     */
+    RAknBitmapAnim(RAnimDll& aAnimDll);
+
+    /**
+     * Starts the animation, and displays the last frame when finished.
+     */
+    void StartAndKeepLastFrameL();
+
+    /**
+     * Stops the animation.
+     *
+     * @return the error value returned from wserv
+     */
+    TInt Stop();
+    };
+
+// FORWARD DECLARATIONS
+class TResourceReader;
+class TAknsItemID;
+
+/*
+ * A control that can be used to display an animation.
+ */
+NONSHARABLE_CLASS(CAknBitmapAnimation) : public CAknControl
+    {
+public:
+    /**
+     * 2 phase construction. The pattern for constructing this class is non-standard. Call 
+     * NewL, set the container window, then call the appropriate method to contruct from
+     * either skin or resource.
+     */
+    IMPORT_C static CAknBitmapAnimation* NewL();
+
+    /**
+     * Destructor.
+     */
+    IMPORT_C virtual ~CAknBitmapAnimation();
+
+public:
+    /**
+     * gives access to RBitmapAnimation.
+     *
+     * @return the RBitmapAnim
+     */
+    IMPORT_C RBitmapAnim& Animation();
+
+    /**
+     * gives access to CBitmapAnimClientData.
+     *
+     * @return the CBitmapAnimClientData
+     */
+    IMPORT_C CBitmapAnimClientData* BitmapAnimData() const;
+
+    /**
+     * Cancels the animation.
+     *
+     * @return the error code from stopping the animation
+     */
+    IMPORT_C TInt CancelAnimation();
+
+    /**
+     * Sets the frame index, initialising the animation if necessary.
+     *
+     * @param aIndex the frame index
+     */
+    IMPORT_C void SetFrameIndexL(TInt aIndex);
+
+    /**
+     * Sets the frame interval in milliSeconds, initialising the animation if necessary.
+     *
+     * @param aFrameIntervalInMilliSeconds the frame interval
+     */
+    IMPORT_C void SetFrameIntervalL(TInt aFrameIntervalInMilliSeconds);
+
+    /**
+     * Starts the animation, initialising the animation if necessary, and starting the timer
+     * if necessary.
+     */
+    IMPORT_C void StartAnimationL();
+
+    /**
+    * Sets the scale mode for the animation frames that is used when the
+    * animation frames are scaled to the size of the control.
+    * Default scale mode is EAspectRatioPreserved.
+    *
+    * @since 3.1
+    * @param aMode scale mode
+    */
+    IMPORT_C void SetScaleModeForAnimationFrames(TScaleMode aMode);
+
+    /**
+    * Sets the scale mode for the animation background frame that is used when the
+    * animation background frame is scaled to the size of the control.
+    * Default scale mode is EAspectRatioPreserved.
+    *
+    * @since 3.1
+    * @param aMode scale mode
+    */
+    IMPORT_C void SetScaleModeForAnimationBackgroundFrame(TScaleMode aMode);
+
+    /**
+    * Excludes the animation frames from the icon cache.    
+    * Note that this method should be called before setting the size of the control
+    * to be in effect. If the animation frames are created outside of the scope of this 
+    * class method AknIconUtils::ExcludeFromCache should be called for animation frames
+    * to get the same effect.
+    * 
+    * By default scalable animation frames are being put to icon cache after they are
+    * no longer used. 
+    * This makes it possible to retrieve recently used animation frames fast
+    * without the need to render them again.
+    * Excluding infrequently used animation frames from icon cache could 
+    * improve performance and memory usage of the system.
+    * 
+    * @since 3.1    
+    */
+    IMPORT_C void ExcludeAnimationFramesFromCache();
+    
+public: 
+    /**
+     * Records whether the animation has started. If there is a timer, it is cancelled.
+     *
+     * @param aHasStarted if ETrue, started flag is recorded; if EFalse, the existing flag value is not changed.
+     * @return returns KErrNone in the case of no error occurring.
+     */
+    TInt AnimationHasStarted(TBool aHasStarted);
+
+public:
+    /**
+    * Construct the animation from skin.
+    *
+    * Usually this method should be called before ConstructFromResourceL,
+    * and if EFalse is returned the caller should try to construct the
+    * same animation with ConstructFromResourceL. The ownership of the
+    * constructed animation and its frames is vested in this class.
+    * Furthermore, the animation is not automatically updated during
+    * a skin change.
+    *
+    * @since 2.0
+    * @param aItemID Item ID of the animation.
+    * @return ETrue if the animation was found and succesfully constructed.
+    *   EFalse if the animation (or at least one of its frames) was not
+    *   found.
+    */
+    IMPORT_C TBool ConstructFromSkinL( const TAknsItemID& aItemID );
+
+public: // from CCoeControl
+    /**
+     * Construct animation from resource. This can be called after a call to NewL. Can
+     * also be called after a failed attempt to call ConstructFromSkinL.
+     * 
+     * @param aResourceReader the resource reader
+     */
+    IMPORT_C virtual void ConstructFromResourceL(TResourceReader& aResourceReader);
+
+    /**
+     * Minimum size.
+     */
+    IMPORT_C virtual TSize MinimumSize();
+
+private: // from CCoeControl
+    
+    /*
+     * Size changed.
+     */
+    virtual void SizeChanged();
+    
+    /*
+     * Position Changed
+     */
+    virtual void PositionChanged();
+    
+    /*
+     * Draw
+     *
+     * @parm aRect the drawing rect
+     */
+    virtual void Draw(const TRect& aRect) const;
+
+    /*
+     * Focus Changed
+     */
+    virtual void FocusChanged(TDrawNow aDrawNow);
+private:
+
+    /* 
+     * Constructor
+     */
+    CAknBitmapAnimation();
+    
+    /*
+     * Second phase construction
+     */
+    void ConstructL();
+    
+    /*
+     * Complete animation initialisation. Sets the animation window, 
+     * the position, and the animation data. Records the fact that 
+     * initialisation has occurred.
+     */
+    void CompleteAnimationInitialisationL();
+    
+    /*
+     * Checks the animation initialisation completion flag
+     *
+     * @return the initialisation flag
+     */
+    TBool IsInitialisationCompleted();
+    
+    /*
+     * Create frame data, by extracting the interval and position from
+     * the resource, and the frame data from the animation itself.
+     *
+     * @param aFramesReader the resource reader
+     * @param aFileName the animation file
+     * @param aVersion version of BMPANIM_DATA
+     * @return the frame data
+     */
+	CBitmapFrameData* CreateFrameDataFromResourceL(TResourceReader& aFramesReader, const TDesC& aFileName, const TInt8 aVersion);
+    
+    /*
+     * Set animation window
+     */
+    void SetAnimationWindowL();
+
+private: // timer
+    /*
+     * Callback for the animation timer
+     *
+     * @param aPtr pointer to the owning class
+     * @return any error value from the timer
+     */
+    static TInt AnimationStartedCallback(TAny* aPtr);
+
+private:
+    CBitmapAnimClientData* iBitmapAnimData;
+    RAnimDll iAnimDll;
+    RAknBitmapAnim iAnimation;
+    TInt iFlags;
+    CPeriodic* iTimer;
+    TScaleMode iScaleModeFrames;
+    TScaleMode iScaleModeBackgroundFrame;
+    TBool iGainedFocus;
+    };
+
+#endif