diff -r 000000000000 -r 15bf7259bb7c uiacceltk/hitchcock/coretoolkit/inc/HuiFxEffectCache.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uiacceltk/hitchcock/coretoolkit/inc/HuiFxEffectCache.h Tue Feb 02 07:56:43 2010 +0200 @@ -0,0 +1,122 @@ +/* +* 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: +* +*/ + +#ifndef HUIFXEFFECTCACHE_H_ +#define HUIFXEFFECTCACHE_H_ + +#include +#include +#include +#include "HuiFxEffectParser.h" +#include "huieffectable.h" + +class MHuiFxParsingEndedObserver; +class MAlfGfxEffectObserver; + + +class MHuiFxEffectCacheNode +{ +public: + virtual ~MHuiFxEffectCacheNode() { } + virtual TPtrC Id()=0; // how to regognize this instance + virtual MHuiFxEffectCacheNode *CloneL()=0; // from this instance to cache + virtual void LightOperationL(MHuiFxEffectCacheNode *aCached)=0; // from cache to this instance + virtual void HeavyOperationL(MHuiFxParsingEndedObserver *aObserver, TInt aIndex)=0; // from nothing to this instance + virtual TInt Ref(TInt aCount)=0; // increase count by aCount and return count. + virtual void ParsingEndedBefore()=0; + virtual void ParsingEndedAfter(MHuiFxEffectCacheNode *aCached)=0; + virtual TBool FxmlUsesInput1()=0; +}; + +class CHuiFxEffectCache : public CBase, public MHuiFxParsingEndedObserver +{ +public: + IMPORT_C static CHuiFxEffectCache* NewL(); + void CreateL(MHuiFxEffectCacheNode *aNode); // moves ownership + IMPORT_C void FindOrCreateL(MHuiFxEffectCacheNode *aNode); // moves ownership + MHuiFxEffectCacheNode *FindDup(const TDesC &aId); + IMPORT_C void UnUse(MHuiFxEffectCacheNode *aNode); + IMPORT_C ~CHuiFxEffectCache(); + void ParsingEnded(TInt aHandle); + MHuiFxEffectCacheNode *FindCached(const TDesC &aId); + TBool FxmlUsesInput1(const TDesC &aFileName); +private: + struct IDNode + { + TInt iId; + MHuiFxEffectCacheNode *iNode; + }; + + MHuiFxEffectCacheNode *Find(MHuiFxEffectCacheNode *aNode); + static bool Compare(MHuiFxEffectCacheNode *aNode1, MHuiFxEffectCacheNode *aNode2); + void Remove(RPointerArray &aEffects, MHuiFxEffectCacheNode *aNode); + void Remove(RHashMap &aMap, MHuiFxEffectCacheNode *aNode); + void Remove(RArray &aMap, MHuiFxEffectCacheNode *aNode); + TInt FindById(TInt aId); + TInt UniqueId(); +private: + RPointerArray iCachedEffects; + //RPointerArray iDuplicateEffects; // array can have null pointers in it + //RHashMap iDuplicateEffects; + RArray iDuplicateEffects; + TInt iUniqueId; +}; + +class CHuiFxEffect; +class TRect; +class CHuiVisual; +class CHuiFxEngine; + +// This class has all dependencies to outside objects. +class CHuiFxEffectCacheEffectNode : public CBase, public MHuiFxEffectCacheNode +{ +public: + IMPORT_C CHuiFxEffectCacheEffectNode(const TDesC &aFileName, CHuiFxEffect *&aEffect, MHuiEffectable *aVisual, TRect *extRect, CHuiFxEngine *aEngine) + : iFileName(aFileName.AllocL()), iEffect(aEffect), iVisual(aVisual), iExtRect(extRect), iEffectCached(0), iEngine(aEngine), iRefCount(0), iParser(0) { } + IMPORT_C ~CHuiFxEffectCacheEffectNode(); + void SetEffectEndObserver( MAlfGfxEffectObserver* aEffectEndObserver, TInt aHandle ); + void SetEffectFlags( TInt aFlags ); + void SetEffectGroup( TInt aGroup); +private: + CHuiFxEffectCacheEffectNode(const TDesC &aFileName, CHuiFxEffect *aEffect) : iFileName(aFileName.AllocL()), iEffect(iEffectCached), iVisual(0), iExtRect(0), iEffectCached(aEffect), iRefCount(0), iParser(0), iEffectEndObserver(0), iHandle(0) { } +public: // from MHuiFxEffectCacheNode + TPtrC Id(); + MHuiFxEffectCacheNode *CloneL(); + void LightOperationL(MHuiFxEffectCacheNode *aCached); + void HeavyOperationL(MHuiFxParsingEndedObserver *aObserver, TInt aIndex); + TInt Ref(TInt aCount); + void ParsingEndedBefore(); + void ParsingEndedAfter(MHuiFxEffectCacheNode *aCached); + TBool FxmlUsesInput1(); + +private: + const TDesC *iFileName; + CHuiFxEffect *iEffect; + MHuiEffectable *iVisual; + TRect *iExtRect; + CHuiFxEffect *iEffectCached; + CHuiFxEngine *iEngine; + TInt iRefCount; + CHuiFxEffectParser *iParser; + MAlfGfxEffectObserver* iEffectEndObserver; + TInt iHandle; + TInt iFlags; + TInt iGroup; +}; + + +#endif