diff -r 000000000000 -r 15bf7259bb7c uiacceltk/hitchcock/AlfRenderStage/inc/alfrenderstage.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uiacceltk/hitchcock/AlfRenderStage/inc/alfrenderstage.h Tue Feb 02 07:56:43 2010 +0200 @@ -0,0 +1,301 @@ +/* +* 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: AlfRenderStage provides a method for redirect avkon drawing to a graphics accelerator +* +*/ + + + +#ifndef __ALFRENDERSTAGE_H__ +#define __ALFRENDERSTAGE_H__ + +#include +#include +#include "alfrsgc.h" +#include + +#include +#include +#include +#include "alfrssendbuffer.h" +#include "alfrenderstageutils.h" + +class CAlfFader; +class CFbsBitGc; +class MWsGraphicDrawerEnvironment; +class CAlfRenderStage; +class CAlfAsynchGoomSession; + + +/** + * This is the implementation of CAlfRenderStage which is created by a CAlfRenderStageFactory + * + * This class provides interface for applications to draw and manipulate the screen. It listenes + * window events and draw commands (passed via CAlfGraphicsContext) and serializes the data. After frame + * draw is complete, the serialized data is passed to AlfStreamerServer for further processing. + * + * @lib alfrenderstage.lib + * @since S60 v5.2 + */ + +class CAlfRenderStage : + public CWsRenderStage, + public MWsEventHandler, + public MWsTextCursor, + public MAlfCompositionAgnosticWindowTreeObserver, + public MAlfHintObserver, + public MWsDrawAnnotationObserver + { +public: + + /** + * NewL + * + * Constructor + * + * @param aEnv + * @param aScreen + * @param aScreenNumber + * @return New instance of the class + */ + static CAlfRenderStage* NewL(MWsGraphicDrawerEnvironment* aEnv, MWsScreen* aScreen, TInt aScreenNumber, CWsRenderStage* aNext); + + /** + * C++ destructor + */ + ~CAlfRenderStage(); + +public: // New methods + + /** + * EndCallBack + * + * Asynchronous SendBuffer + * + * @param aFinished + */ + void EndCallBack( TRequestStatus* aFinished ); + + /** + * WsGraphicsContext + * + * Getter function + * + * @return Graphics context + */ + CAlfGraphicsContext* WsGraphicsContext(); + + /** + * AlfSendBuffer + * + * Getter function + * + * @return Send buffer + */ + CAlfRsSendBuffer* AlfSendBuffer(); + + /** + * ScreenNumber + * + * Getter function + * + * @return Screen number + */ + TInt ScreenNumber() const; + +public: // From CWsRenderStage + + TAny* ResolveObjectInterface(TUint aTypeId); + void Begin(const TRegion* aRegion); + void End(TRequestStatus* aFinished); +public: // from MWsEventHandler + + /** + * @note This will be soon obsolete. + */ + void DoHandleEvent(const TWservCrEvent& aEvent); + +public: // from MWsTextCursor + + void DrawTextCursor(const TTextCursorInfo& aTextCursorInfo); + +public: // from MAlfCompositionWsWindowTreeObserver + + void NodeCreated(const MWsWindowTreeNode& aWindowTreeNode, MWsWindowTreeNode const* aParent); + void NodeReleased(const MWsWindowTreeNode& aWindowTreeNode); + void NodeActivated(const MWsWindowTreeNode& aWindowTreeNode); + void NodeExtentChanged(const MWsWindowTreeNode& aWindowTreeNode, const TRect& aRect ); + void SiblingOrderChanged(const MWsWindowTreeNode& aWindowTreeNode, TInt aNewPos); + void FlagChanged(const MWsWindowTreeNode& aWindowTreeNode, TInt aFlags, TBool aNewValue); + void AttributeChanged(const MWsWindowTreeNode& aWindowTreeNode, TInt aAttribute ); + void FadeCountChanged(const MWsWindowTreeNode& aWindowTreeNode, TInt aFadeCount); + void TransparentRegionChanged(const MWsWindowTreeNode& aWindowTreeNode, const TRegion& aNewTransparentRegion, const TRegion* aNewOpaqueRegion); + void MovedToWindowGroup(const MWsWindowTreeNode& aWindowTreeNode, const MWsWindowTreeNode& aNewWindowGroupNode); + void WindowGroupChained(const MWsWindowTreeNode& aParent, const MWsWindowTreeNode& aChild); + void WindowGroupChainBrokenAfter(const MWsWindowTreeNode& aWindowGroupNode); + void FadeAllChildren(const MWsWindowTreeNode& aWindowTreeNode, TBool aFaded); + +public: // from MWsDrawAnnotationObserver + void WindowRedrawStart(const MWsWindowTreeNode& aWindowTreeNode, const TRegion& aRegion); + void WindowRedrawEnd(const MWsWindowTreeNode& aWindowTreeNode); + void WindowAnimRedrawStart(const MWsWindowTreeNode& aWindowTreeNode, const TRegion& aRegion); + void WindowAnimRedrawEnd(const MWsWindowTreeNode& aWindowTreeNode); + void SpriteRedrawStart(const MWsWindowTreeNode& aWindowTreeNode, const TRegion& aRegion); + void SpriteRedrawEnd(const MWsWindowTreeNode& aWindowTreeNode); + void SpriteFlash(const MWsWindowTreeNode& aWindowTreeNode, TBool aFlashOn); + void SegmentRedrawStart( const TRegion& /*aRegion */); + void SegmentRedrawEnd( ); + +public: // from MAlfHintObserver + + void InsertTagL( TInt aTag, TInt32 aParameter = 0 ); + void InsertTagL( TInt aTag, TRect aBoundingRect, TInt aLayerId ); + +protected: // New methods + + /** + * C++ constructor + */ + CAlfRenderStage(CWsRenderStage* aNext); + + /** + * ConstructL + * + * @param aEnv + * @param aScreen + * @param aScreenNumber + */ + virtual void ConstructL(MWsGraphicDrawerEnvironment* aEnv, MWsScreen* aScreen, TInt aScreenNumber); + + /** + * InitL + */ + virtual void InitL(); + + /** + * HasWindowRectChanged + * + * Temporary function until WServ can provide the same information. + * + * @param aId + * @param aRect + * @return + */ + TBool HasWindowRectChanged( TUint32 aId, TRect& aRect ); + + /** + * DoHandleRedraw + * + * Handles window drawing related events. + * + * @param aEvent Event to be handled + */ + void DoHandleRedrawL( const TWservCrEvent& aEvent ); + + /** + * Draws standard text cursor. Client is expected to call commit. + * @param aWindowTreeNode window tree node. + * @param aExtent extent. + * @param aClipRect clip rect. + * @param aCursorRect cursor rect. + */ + void DoDrawTextCursor( + const MWsWindowTreeNode& aWindowTreeNode, + const TRect& aExtent, + const TRect& aClipRect, + const TRect& aCursorRect ); + +protected: + + //TTimeStamp iTimeStamp; + + const TRegion* iUpdateRegion; + + /** + * Own. + */ + MWsScreen* iScreen; + + /** + * Own. + */ + CAlfGraphicsContext* iWsGraphicsContext; // MWsGraphicsContext + + /** + * Own. + */ + CAlfRsSendBuffer* iAlfSendBuffer; + + /** + * Not own. + */ + MWsGraphicDrawerEnvironment* iEnv; + + /** + * Returns the stream size + */ + TInt iWindowBufferIndex; + + /** + * @todo + * @note This is temporary structure for figuring out, if window size or position has changed since previous update. + * WServ will provide event about these in the future. + */ + RHashMap iWindowData; + + /** + * Fader interface + * Own. + */ + CAlfFader* iFader; + + TInt iScreenNumber; + + TBool iDrawingActive; + + RArray iWindowIds; + + /** + * @note Remove this when there is screen device for hw and correct sizes can be asked from there + */ + TBool iNormalOrientation; + + /** For keeping track of segmentredraws inside windowredraws **/ + const MWsWindowTreeNode* iWindowDrawingNode; + TBool iSegmentRedrawActive; + + CWsRenderStage* iNext; +private: + // Goom connection. Owned. + CAlfAsynchGoomSession* iGoomSession; + + // Current sprite draw node. + const MWsWindowTreeNode* iSpriteRedraw; + + // Enumeration for sprite flash + enum TSpriteFlash + { + // Sprite flash hasn't been set + ESpriteFlashUndefined, + // Sprite flash set with ETrue parameter + ESpriteFlashOn, + // Sprite flash set with EFalse parameter + ESpriteFlashOff + }; + // Sprite flash setting for iSpriteRedraw + TSpriteFlash iSpriteRedrawFlash; + + }; + +#endif //__ALFRENDERSTAGE_H__