diff -r 000000000000 -r 15bf7259bb7c uiacceltk/hitchcock/coretoolkit/inc/huitextureanimationstate.h --- /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 +#include +#include + +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 +