uiacceltk/hitchcock/coretoolkit/inc/HuiFxEffectCache.h
changeset 0 15bf7259bb7c
child 3 d8a3531bc6b8
--- /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