uiacceltk/hitchcock/coretoolkit/inc/huitextureanimationstate.h
changeset 0 15bf7259bb7c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uiacceltk/hitchcock/coretoolkit/inc/huitextureanimationstate.h	Tue Feb 02 07:56:43 2010 +0200
@@ -0,0 +1,256 @@
+/*
+* Copyright (c) 2008 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:   Defines CHuiTextureAnimationState, which is used by
+*                CHuiTextureManager when loading animated textures.
+*
+*/
+
+
+#ifndef C_HUITEXTUREANIMATIONSTATE_H
+#define C_HUITEXTUREANIMATIONSTATE_H
+
+#include <e32base.h>
+#include <gdi.h>
+#include <imageconversion.h>
+
+class CFbsBitmap;
+
+/**
+ * This holds animation state. One instance is required per animation.
+ * To produce next frame, you have to have animation state containing
+ * previous frame information. Thus, if animation state is needed, 
+ * you should load frames in sequence (0, 1, ..., N).
+ */
+NONSHARABLE_CLASS( CHuiTextureAnimationState ) : public CBase
+    {
+public:
+    /**
+     * Two-phased constructor.
+     * @param aTextureGroupId texture group id.
+     * @param aImageFile image file.
+     * @param aFrameCount amount of frames in file.
+     */
+    static CHuiTextureAnimationState* NewL( 
+        TInt aTextureGroupId, const TDesC& aImageFile, TInt aFrameCount );
+        
+    /**
+     * Destructor.
+     */
+    ~CHuiTextureAnimationState();
+   
+    /**
+     * Returns owner texture group id.
+     * @return texture group id.
+     */
+    TInt OwnerTextureGroupId() const;
+    
+    /** 
+     * Checks if frame defined by aImageFile and aFrameNumber can be
+     * composed with this state instance.
+     * @param aImageFile image file name.
+     * @param aFrameNumber frame number.
+     * @param aFrameCount amount of frames in the file.
+     */
+    TBool CheckIfCanProduce( 
+        const TDesC& aImageFile, 
+        TInt aFrameNumber, 
+        TInt aFrameCount ) const;
+
+    /**
+     * Gets next frame number.
+     * @return next frame number.
+     */
+    TInt GetNextFrameNumber() const;
+    
+    /**
+     * Offers next frame information. This method will store
+     * information in order to be able to produce next frame
+     * in @c ProduceNextFrameL.
+     * @param aFrameInfo frame info.
+     */
+    void OfferNextFrameInfo( const TFrameInfo& aFrameInfo );
+    
+    /**
+     * Returns overall size.
+     */
+    TSize OverallSize() const;
+
+    /**
+     * Produces next frame.
+     * @param aNewFrame new frame.
+     * @param aNewFrameMask new frame mask.
+     * @param aSubFrame sub frame.
+     * @param aSubFrameMask sub frame mask.
+     */
+    void ProduceNextFrameL(
+        CFbsBitmap*& aNewFrame,
+        CFbsBitmap*& aNewFrameMask,
+        CFbsBitmap* aSubFrame,
+        CFbsBitmap* aSubFrameMask );
+        
+    /** 
+     * Proceed without generating next frame.
+     * @param aSubFrame sub frame.
+     * @param aSubFrameMask sub frame mask.
+     */
+    void ProceedWithoutNextFrameL(
+        CFbsBitmap* aSubFrame,
+        CFbsBitmap* aSubFrameMask );
+        
+private:
+    CHuiTextureAnimationState();
+    void ConstructL( 
+        TInt aTextureGroupId, const TDesC& aImageFile, 
+        TInt aFrameCount );
+   
+    /**
+     * Produces first frame and generates previous.
+     */
+    void ProduceFirstFrameAndGeneratePreviousL(
+        CFbsBitmap*& aNewFrame,
+        CFbsBitmap*& aNewFrameMask,
+        CFbsBitmap* aSubFrame,
+        CFbsBitmap* aSubFrameMask );
+
+    /**
+     * Produces next frame and updates previous.
+     */
+    void ProduceNextFrameAndUpdatePreviousL(
+        CFbsBitmap*& aNewFrame,
+        CFbsBitmap*& aNewFrameMask,
+        CFbsBitmap* aSubFrame,
+        CFbsBitmap* aSubFrameMask );
+
+    /**
+     * Produces first frame and generates previous. Quick
+     * version assumes that mask contains only values 0 and 255.
+     */
+    void QuickProduceFirstFrameAndGeneratePreviousL(
+        CFbsBitmap*& aNewFrame,
+        CFbsBitmap*& aNewFrameMask,
+        CFbsBitmap* aSubFrame,
+        CFbsBitmap* aSubFrameMask );
+
+    /**
+     * Produces next frame and updates previous. Quick
+     * version assumes that mask contains only values 0 and 255.
+     */
+    void QuickProduceNextFrameAndUpdatePreviousL(
+        CFbsBitmap*& aNewFrame,
+        CFbsBitmap*& aNewFrameMask,
+        CFbsBitmap* aSubFrame,
+        CFbsBitmap* aSubFrameMask );
+
+    inline static TRgb BitmapClearColor();
+    inline static TRgb MaskClearColor();
+    inline static TRgb MaskOpaqueColor();
+    
+    /**
+     * Checks sub frame and its mask for validity.
+     * Leaves if invalid.
+     */
+    static void CheckSubFrameL( 
+        CFbsBitmap* aSubFrame, 
+        CFbsBitmap* aSubFrameMask );
+    
+private:
+    //
+    // Information about current animation
+    //
+    
+    /**
+     * Group id.
+     */
+    TInt iTextureGroupId;
+    
+    /**
+     * File name.
+     * Own.
+     */
+    HBufC* iFile;
+    
+    /**
+     * Frame number. -1 if no frame yet produced.
+     */
+    TInt iFrame;
+
+    /**
+     * Frame count. Should be greater than one.
+     */
+    TInt iFrameCount;
+        
+    /**
+     * Size of frames.
+     */
+    TSize iSize;
+
+    //
+    // Information about next frame
+    //
+    
+    /**
+     * Sub frame rectangle.
+     * Updated in OfferNextFrameInfo.
+     */
+    TRect iNextSubFrameRect;
+    
+    /**
+     * Background color.
+     * Updated in OfferNextFrameInfo.
+     */
+    TRgb iNextSubFrameBgColor;
+
+    /**
+     * Boolean value indicating if complex blending is needed,
+     * i.e. subframe has alpha channel (instead of just on/off transparency).
+     * Updated in OfferNextFrameInfo.
+     */
+    TBool iNextSubFrameHasAlpha;
+
+    /**
+     * Enumeration for disposal actions
+     */
+    enum TDisposalAction
+        {
+        EUnspecified,
+        ERestoreToPrevious,
+        ERestoreToBackgroundColour,
+        ELeaveInPlace
+        };
+        
+    /**
+     * Disposal action for next frame.
+     * Updated in OfferNextFrameInfo.
+     */
+    TDisposalAction iNextSubFrameDisposalAction;
+                
+    //
+    // Previous frame information
+    //
+    
+    /**
+     * Previous frame.
+     * Own.
+     */
+    CFbsBitmap* iPrevFrame;
+    
+    /**
+     * Previous frame mask.
+     * Own.
+     */
+    CFbsBitmap* iPrevFrameMask;    
+    };
+
+#endif // C_HUITEXTUREANIMATIONSTATE_H
+