diff -r 000000000000 -r 15bf7259bb7c uiacceltk/hitchcock/plugins/openwfcrs/inc/displayrenderstage.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uiacceltk/hitchcock/plugins/openwfcrs/inc/displayrenderstage.h Tue Feb 02 07:56:43 2010 +0200 @@ -0,0 +1,210 @@ +// Copyright (c) 2007-2009 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 __DISPLAYRENDERSTAGE_H__ +#define __DISPLAYRENDERSTAGE_H__ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "alfstreamerconsts.h" +#include "alfrenderstageutils.h" + +class RSgImageCollection; +class CDisplayPolicy; +class CRsDisplayChangeNotifier; +class CRsConfigChangeNotifier; +class COpenWfcWrapper; +class CScreenCaptureUtil; +class CElementWrapper; + + + +/** +This is the implementation of CWsRenderStage which is created by a CDisplayRenderStageFactory +*/ +class CDisplayRenderStage : + public CWsRenderStage, + public MWsScreenDevice, + public MWsDisplayControl, + public MWsDisplayMapping, + public MWsDisplayPolicy, + public MWsScene, + public MWsWindowTreeObserver, + public MAlfCompositionController + { +friend class COpenWfcWrapper; + +public: + static CDisplayRenderStage* NewL(MWsGraphicDrawerEnvironment* aEnv, MWsScreen* aScreen, TInt aScreenNumber); + ~CDisplayRenderStage(); + +public: //from CWsRenderStage + TAny* ResolveObjectInterface(TUint aTypeId); + void Begin(const TRegion* aRegion); + void End(TRequestStatus* aFinished); + +public: //from MWsScreenDevice + TInt ScreenNumber() const; + TDisplayMode DisplayMode() const; + TSize SizeInPixels() const; + TSize SizeInTwips() const; + TRect PointerRect() const; + void GetPixel(TRgb& aColor, const TPoint& aPixel) const; + void GetScanLine(TDes8& aScanLine, const TPoint& aStartPixel, TInt aPixelLength, TDisplayMode aDispMode) const; + TBool RectCompare(const TRect& aRect1, const TRect& aRect2) const; + void CopyScreenToBitmapL(CFbsBitmap* aBitmap, const TRect &aRect) const; + void ClearDisplay(TRgb aBackColor); + +public: //from MWsScene + TInt SetSceneRotation(const MWsScene::TSceneRotation aSceneRotation); + MWsScene::TSceneRotation SceneRotation() const; + MWsElement* CreateSceneElementL(); + void DestroySceneElement(MWsElement* aElement); + TInt InsertSceneElement(MWsElement* aInsertElement, MWsElement* aSubordinateElement); + TInt RemoveSceneElement(MWsElement* aRemoveElement); + void ComposePendingScene(TSurfaceId& aOffScreenTarget, TRequestStatus* aCompleted); + TInt RegisterSurface(const TSurfaceId& aSurface); + TInt UnregisterSurface(const TSurfaceId& aSurface); + +public: // from MWsDisplayControl/MDisplayControlBase + void NotifyOnDisplayChange(TRequestStatus& aStatus); + void NotifyOnDisplayChangeCancel(); + void NotifyOnConfigChange(TRequestStatus& aStatus); + void NotifyOnConfigChangeCancel(); + TInt NumberOfResolutions() const; + TInt GetResolutions(RArray& aResolutions) const; + void GetConfiguration(TDisplayConfiguration& aConfig) const; + TInt SetConfigurationAndBuffer(const TDisplayConfiguration& aConfig,const TSize* aUiSize); + TInt SetConfiguration(const TDisplayConfiguration& aConfig); + TInt PreferredDisplayVersion() const; + +public: //from MWsDisplayMapping/MDisplayMapping + virtual TInt MapCoordinates(TCoordinateSpace aSourceSpace, const TRect& aSource, TCoordinateSpace aTargetSpace, TRect& aTarget) const; + void SetSizeModeExtent(TRect& aExtent, TBitFlags32 aContext); + +public://from MWsDisplayPolicy + virtual void NewAppModesAvailable(); + TInt GetSizeModeConfiguration(TInt aScreenSizeMode, TDisplayConfiguration& aConfig, TRect& aSizeModePosition) const; + TInt SuitableAppMode(TDisplayStatus aSituation); + void SetLastAppMode(TInt aMode); + +public: + + void NodeCreated(const MWsWindowTreeNode& aWindowTreeNode, const MWsWindowTreeNode* aParent) { if (iWindowTreeObserver) iWindowTreeObserver->NodeCreated(aWindowTreeNode, aParent);} + void NodeReleased(const MWsWindowTreeNode& aWindowTreeNode) { if (iWindowTreeObserver) iWindowTreeObserver->NodeReleased(aWindowTreeNode);} + void NodeActivated(const MWsWindowTreeNode& aWindowTreeNode) { if (iWindowTreeObserver) iWindowTreeObserver->NodeActivated(aWindowTreeNode);} + void NodeExtentChanged(const MWsWindowTreeNode& aWindowTreeNode, const TRect& aRect) { if (iWindowTreeObserver) iWindowTreeObserver->NodeExtentChanged(aWindowTreeNode, aRect);} + void SiblingOrderChanged(const MWsWindowTreeNode& aWindowTreeNode, TInt aNewPos) { if (iWindowTreeObserver) iWindowTreeObserver->SiblingOrderChanged(aWindowTreeNode, aNewPos);} + void FlagChanged(const MWsWindowTreeNode& aWindowTreeNode, TFlags aFlag, TBool aNewValue) { if (iWindowTreeObserver) iWindowTreeObserver->FlagChanged(aWindowTreeNode,aFlag, aNewValue);} + void AttributeChanged(const MWsWindowTreeNode& aWindowTreeNode, TAttributes aAttribute) { if (iWindowTreeObserver) iWindowTreeObserver->AttributeChanged(aWindowTreeNode, aAttribute);} + void FadeCountChanged(const MWsWindowTreeNode& aWindowTreeNode, TInt aFadeCount) { if (iWindowTreeObserver) iWindowTreeObserver->FadeCountChanged(aWindowTreeNode, aFadeCount);} + void TransparentRegionChanged(const MWsWindowTreeNode& aWindowTreeNode, const TRegion& aNewTransparentRegion, const TRegion* aNewOpaqueRegion) { if (iWindowTreeObserver) iWindowTreeObserver->TransparentRegionChanged(aWindowTreeNode, aNewTransparentRegion, aNewOpaqueRegion);} + void ElementAdded(const MWsWindowTreeNode& aWindowTreeNode, const MWsElement& aElement); + void MovedToWindowGroup(const MWsWindowTreeNode& aWindowTreeNode, const MWsWindowTreeNode& aNewWindowGroupNode) { if (iWindowTreeObserver) iWindowTreeObserver->MovedToWindowGroup(aWindowTreeNode, aNewWindowGroupNode);} + void WindowGroupChained(const MWsWindowTreeNode& aParent, const MWsWindowTreeNode& aChild) { if (iWindowTreeObserver) iWindowTreeObserver->WindowGroupChained(aParent, aChild);} + void WindowGroupChainBrokenAfter(const MWsWindowTreeNode& aWindowGroupNode) { if (iWindowTreeObserver) iWindowTreeObserver->WindowGroupChainBrokenAfter(aWindowGroupNode);} + void FadeAllChildren(const MWsWindowTreeNode& aWindowTreeNode, TBool aFaded) { if (iWindowTreeObserver) iWindowTreeObserver->FadeAllChildren(aWindowTreeNode, aFaded);} + +public: //MAlfCompositionController + TInt EnableAlpha(TBool aEnable = ETrue); + TInt SetOpacity(TReal32 aOpacity) __SOFTFP; + TInt SetRotation(TInt aRotationInDegrees); + TInt SetExtent(const TRect& aRect, TInt aScreen); + void SetIsBackgroundAnim(TBool ETrue); + TInt SetSourceRect(const TRect& aRect); + TInt CreateTargetL(TInt aTarget, TInt aClientHandle, TInt aGrpHandle); + void SetTargetL(TInt aTarget); + void SetExtentSurfaceId(const TSurfaceId& aSurfaceId); + TInt SetOrder(TInt aTarget, TInt aTop, TBool aAbove, TBool aCombineTargets); + void DeleteTarget(TInt aTarget); + void LowOnGraphicsMemory(); + void GraphicsMemoryGood(); + void AlfBridgeCallback(TInt aEvent, TAny* aData); + +public: + +private: + CDisplayRenderStage(TInt aScreenNumber); + void ConstructL(MWsGraphicDrawerEnvironment* aEnv, MWsScreen* aScreen, TInt aScreenNumber); + void ElementUseAlphaFlagChangedL(MWsElement& aElement, TBool aEnabled); + MWsElement* FindElement(TInt aWindowGroupId, TInt aWindowHandle); + CElementWrapper* FindElementTarget(TInt aTarget); + void AlfWindowListenerCallback( TAlfNativeWindowData* aData ); + void SetTarget(MWsElement* aElement); +private: + TInt iScreenNumber; + TTimeStamp iTimeStamp; + RSurfaceUpdateSession iSurfaceUpdateSession; + const TRegion* iUpdateRegion; + //CDirectGdiDriver* iDGdiDriver; + //CRenderTarget* iRenderTarget; + COpenWfcWrapper* iOpenWfcWrapper; + MWsDisplayControl* iOpenWfcWrapperDisplayControl; + + CDisplayPolicy* iDisplayPolicy; + TBool iDisplayPolicyEnabled; + + //required for display and config change notification + CRsDisplayChangeNotifier* iDispNotifier; + CRsConfigChangeNotifier* iConfigNotifier; + + TBool iRunningOnLowMem; + MAlfBridge* iAlfBridge; + MWsElement* iAlfElement; + MWsElement* iUiElement; + CElementWrapper* iTargetElement; + MAlfCompositionAgnosticWindowTreeObserver* iWindowTreeObserver; + + struct TElementData + { + MWsElement* iElement; + TSurfaceId iSurfaceId; + TUint32 iWindowGrpId; + TUint32 iWindowHandle; + TUint32 iWindowTreeNodeId; + + TElementData(MWsElement* aElement, TSurfaceId aSurfaceId, TInt aWindowGrpId, TUint32 aWindowHandle, TUint32 aWindowTreeNodeId) + { + iElement = aElement; + iSurfaceId = aSurfaceId; + iWindowGrpId = aWindowGrpId; + iWindowHandle = aWindowHandle; + iWindowTreeNodeId = aWindowTreeNodeId; + } + }; + + RArray iElementArray; + + struct SElementTarget + { + TInt iTarget; + CElementWrapper* iElement; + }; + + TSurfaceId iExtentSurfaceId; + + RArray iElementTargets; +public: + mutable CScreenCaptureUtil* iScreenCaptureUtil; + }; + +#endif //__DISPLAYRENDERSTAGE_H__