diff -r 000000000000 -r 15bf7259bb7c uiacceltk/hitchcock/ServerCore/Inc/alfhierarchymodel.h --- /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 +#include +#include +#include +#include +#include "alfstreamerbridge.h" +#include // USER_INVARIANT + +// forward declarations +class CAlfStreamerServer; +class CFbsBitmap; +class TPoint; +class TRect; +class CAlfWindow; +class TRgb; +class CFbsBitGc; +class CAlfNodeRoot; +class CAlfNode; + +#include +#include + +/* + * 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 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 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 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