--- /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 <e32cmn.h>
+#include <e32base.h>
+#include <e32hashtab.h>
+#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<MHuiFxEffectCacheNode> &aEffects, MHuiFxEffectCacheNode *aNode);
+ void Remove(RHashMap<TInt, MHuiFxEffectCacheNode*> &aMap, MHuiFxEffectCacheNode *aNode);
+ void Remove(RArray<IDNode> &aMap, MHuiFxEffectCacheNode *aNode);
+ TInt FindById(TInt aId);
+ TInt UniqueId();
+private:
+ RPointerArray<MHuiFxEffectCacheNode> iCachedEffects;
+ //RPointerArray<MHuiFxEffectCacheNode> iDuplicateEffects; // array can have null pointers in it
+ //RHashMap<TInt, MHuiFxEffectCacheNode*> iDuplicateEffects;
+ RArray<IDNode> 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