uiacceltk/hitchcock/ServerCore/Inc/alfhierarchymodel.h
changeset 0 15bf7259bb7c
child 5 433cbbb6a04b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uiacceltk/hitchcock/ServerCore/Inc/alfhierarchymodel.h	Tue Feb 02 07:56:43 2010 +0200
@@ -0,0 +1,261 @@
+/*
+* 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:   Mapping function handlers
+*
+*/
+
+
+#ifndef __ALFHIERARCHYMODEL_H__
+#define __ALFHIERARCHYMODEL_H__
+
+#include <s32mem.h>
+#include <e32base.h>
+#include <e32hashtab.h>
+#include <gdi.h>
+#include <alfwindowstructs.h>
+#include "alfstreamerbridge.h"
+#include <uiacceltk/HuiUtil.h>  // USER_INVARIANT
+
+// forward declarations
+class CAlfStreamerServer;
+class CFbsBitmap;
+class TPoint;
+class TRect;
+class CAlfWindow;
+class TRgb;
+class CFbsBitGc;
+class CAlfNodeRoot;
+class CAlfNode;
+
+#include <graphics/wsgraphicdrawer.h>
+#include <graphics/wsgraphicscontext.h>
+
+/*
+ * Helper class for hash array
+ */
+NONSHARABLE_CLASS(CNodeHashStruct)
+        {
+    public:
+        CNodeHashStruct( CAlfNode* aNode ) : iNode( aNode ) { };
+        
+        CAlfNode* iNode;
+        };
+
+NONSHARABLE_CLASS(CAlfHierarchyModel) : public CBase, public MAlfBatchObs
+    {
+
+
+public:
+    static CAlfHierarchyModel* NewL(CAlfStreamerServer& aServer);
+    
+    CAlfStreamerServer& Server()
+        {
+        return iServer;
+        }
+     
+    virtual ~CAlfHierarchyModel();
+
+    void HandleMessageL( const RMessage2& aMessage );
+    
+    void ShareChunkL( const RMessage2& aMessage );
+    
+    void CloseChunk( TInt32 aChunkId );
+    
+    void OpenChunkL( const RMessage2& aMessage );
+
+    // utils
+    void DoReleaseSemaphor();
+    
+    void RequestPacketEndCallback( TInt aOffset );
+    
+    void RequestFrameEndCallback();
+
+    RHashMap<TUint32,CNodeHashStruct> iNodeHashArray;
+    
+    CAlfNode* FindNode( TUint32 aWindowId );
+
+    TInt InsertNode( TUint32 aWindowId, CAlfNode* aNode );
+
+    TBool RemoveNode( TUint32 aWindowId );
+    
+    void RemoveAllNodes();
+    
+private:
+    
+    CAlfHierarchyModel(CAlfStreamerServer& aServer):iServer(aServer){};
+
+    void AppendScreen( TInt aScreenNumber );
+    
+    void RemoveScreen( TInt aScreenNumber );
+    
+    void ConstructL();
+    
+	void ProcessUnknownNodeDrawingL( RMemReadStream& aStream );
+    
+protected:
+
+    void ReadEndMarkerL();
+        
+    
+private:
+    
+    /**
+     * ReadRectL
+     * Convinience function for reading a TRect from stream
+     *
+     * @since S60 ?S60_version
+     * @param TRect
+     */
+public:
+    void ReadRectL(TRect& aRect, RMemReadStream* aStream );
+    
+//    static TInt DoSignal( TAny* aObject );
+    
+private:
+
+    /**
+     * ReadRegionL
+     * Convinience function for reading a RRegion from stream
+     *
+     * @since S60 ?S60_version
+     * @param Region  
+     */
+    void ReadRegionL( RMemReadStream* aStream, RRegion& aRegion, TPoint aWindowPos = TPoint(0,0) );
+     
+    void ExecuteDrawCommandsL( CAlfWindow** aWindow, TAny* aPtr, TInt aSize );
+    /**
+     * ExecuteCommandsL
+     * Internalizes the streamed data.
+     *
+     * @since S60 ?S60_version
+     */
+    void ExecuteCommandsL();
+    
+    // Commands from window tree oberver at renderstage
+    void DoNodeCreatedL();
+    void DoNodeReleasedL();
+    void DoNodeActivatedL();
+    void DoNodeExtentChangedL();
+    void DoNodeSiblingOrderChangedL();
+    void DoNodeFlagChangedL();    
+	void DoNodeFadeCountChangedL();
+	void DoNodeTransparentRegionChangedL();
+	void DoNodeLayerAddedL();
+	void DoNodeLayerExtentChangedL();
+	void DoNodeLayerUsesAlphaFlagChangedL();
+	void DoNodeMovedToWindowGroupL();
+	void DoNodeWindowGroupChainedL();
+	void DoNodeWindowGroupChainBrokenAfterL();
+	void DoNodeAttributeChangedL();
+	void DoNodeDebugTrackL();
+	void DoNodeFadeAllChildrenL();
+private: // from bridge
+    
+    virtual void BridgerCallback( TInt aOp, TInt aInt );
+    virtual void BridgerCanceled()
+        {
+        }
+
+    void SetSynchMessage(const RMessage2* aMsg)
+        {
+        iMessage = *aMsg;
+        }
+public:
+    
+    /*
+     * Shared chunk handle. Owned by CAlfRenderStage's CAlfSendBuffer
+     */
+
+	TUint8* ChunkBase( TUint32 aChunkIndex = 0)
+		{
+		if ( aChunkIndex == 0 )
+		    {
+		    return iChunk.Base() +  sizeof( TChunkHeader);
+		    }
+		else
+		    {
+		    return iCacheChunks.Find( aChunkIndex )->Base() +  sizeof( TChunkHeader);
+		    }
+		
+		}
+    
+	   CAlfNodeRoot* iRootNode;
+    
+private: // variables
+
+    RChunk iChunk;
+    
+    RHashMap<TUint32,RChunk> iCacheChunks;
+    
+    TInt32 iChunkInUse;
+        
+
+    CAlfStreamerServer& iServer;
+
+    /*
+     * Readstream for the above chunk.
+     */
+    RMemReadStream* iStream;
+
+    // Todo: debug only
+    TInt iUsedCommands[100];
+
+    RRegion iUpdateRegion;
+    
+    RMessagePtr2 iMessage;
+    
+    RMessagePtr2 iSpaceNotificationMessage;
+    
+    TBool iWaitingBridgerToComplete;
+    
+    RCriticalSection iSema;
+
+    CAlfNode* iPreviouslySearchedNode;
+    
+    /*
+     * For debugging the amount of drawn frames
+     */
+    TInt iFrame;
+    
+    TChunkHeader* iChunkHeader;
+    
+    CFbsBitGc* iGc;
+    
+    RArray<RMessagePtr2> iPendingAlfWindowDataMessages;
+    
+    TPoint	iWindowPos;
+    
+    friend class CAlfNode;
+    
+    TInt iScreenNumber;
+    
+    CPeriodic*  iPeriodic;
+    
+    TInt iSpaceNotificationCounter;
+    
+    TBool iBatchAlreadyCommited;
+    
+	TBool iSpaceNotificationMessageOrphean;
+	
+	TInt iPreviousCallbackOffset;
+	
+	TInt iSearchNode;
+	
+#ifdef ALF_DEBUG_TRACK_DRAWING 
+	CAlfCommandDebug* iCommandDebugger;
+#endif	
+    TBool iDidForcedComplete;
+    };
+
+#endif