--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/windowing/windowserverplugins/openwfc/inc/fbrenderstage.h Tue Feb 02 01:47:50 2010 +0200
@@ -0,0 +1,136 @@
+// 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 __FBRENDERSTAGE_H__
+#define __FBRENDERSTAGE_H__
+
+#include <graphics/wsrenderstage.h>
+#include <graphics/wsscene.h>
+#include <graphics/wsdisplaycontrol.h>
+#include <graphics/wsdisplaymapping.h>
+#include "rendertarget.h"
+
+class CRenderTarget;
+class MWsScreenDevice;
+class MWsDrawableSourceProvider;
+class CDisplayPolicy;
+class CFbRenderStage;
+
+// An animation throttle to ensure that WSERV is not always busy animating.
+class CAnimationThrottle : public CTimer
+ {
+public:
+ static CAnimationThrottle* NewL (CFbRenderStage* aRenderStage);
+ ~CAnimationThrottle ();
+private:
+ CAnimationThrottle (CFbRenderStage* aRenderStage);
+ void ConstructL ();
+ void RunL();
+private:
+ CFbRenderStage* iRenderStage;
+ };
+
+/**
+Active object to receive downstream pipeline signals (if the upstream uses signalling).
+*/
+class CRenderStageController : public CActive
+ {
+public:
+ static CRenderStageController* NewL(CFbRenderStage* aRenderStage);
+
+ ~CRenderStageController();
+ void SetActive();
+ TBool IsActive();
+
+private:
+ CRenderStageController(CFbRenderStage* aRenderStage);
+ void ConstructL();
+ void DoCancel();
+ void RunL();
+
+private:
+ CFbRenderStage* iRenderStage;
+ CAnimationThrottle* iAnimationThrottle;
+ };
+
+/**
+This is the implementation of CWsRenderStage which is created by a CFbRenderStageFactory
+*/
+class CFbRenderStage :
+ public CWsRenderStage,
+ public MWsDisplayControl,
+ public MWsDisplayMapping,
+ public MWsScene
+ {
+public:
+ static CFbRenderStage* NewL(MWsGraphicDrawerEnvironment* aEnv, MWsScreen* aScreen, MWsScreenRedraw* aScreenRedraw, CWsRenderStage* aNextStage);
+ ~CFbRenderStage();
+
+public: //from CWsRenderStage
+ TAny* ResolveObjectInterface(TUint aTypeId);
+ void Begin(const TRegion* aRegion);
+ void End(TRequestStatus* aFinished);
+
+public: //from MWsScene
+ TInt SetSceneRotation(const 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:
+ void DoEnd();
+
+public: // from MWsDisplayControl/MDisplayControlBase
+ void NotifyOnDisplayChange(TRequestStatus& aStatus);
+ void NotifyOnDisplayChangeCancel();
+ void NotifyOnConfigChange(TRequestStatus& aStatus);
+ void NotifyOnConfigChangeCancel();
+ TInt NumberOfResolutions() const;
+ TInt GetResolutions(RArray<TResolution>& aResolutions) const;
+ void GetConfiguration(TDisplayConfiguration& aConfig) const;
+ 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);
+
+private:
+ CFbRenderStage();
+ void ConstructL(MWsGraphicDrawerEnvironment* aEnv, MWsScreen* aScreen, MWsScreenRedraw* aScreenRedraw, CWsRenderStage* aNextStage);
+
+private:
+ CRenderStageController* iController;
+ TRequestStatus* iUpstreamRequestStatus;
+ TBool iRequestPending;
+ MWsScreenDevice* iNextScreenDevice;
+ MWsScene* iNextScene;
+ RRegion* iUpdateRegion;
+ CRenderTarget* iRenderTarget;
+ MWsDisplayControl* iDisplayControl;
+ CDisplayPolicy* iDisplayPolicy;
+ MWsDisplayMapping* iDisplayMapping;
+
+ MWsDrawableSourceProvider* iDrawableSourceProvider;
+ /** Drawable sources for copying iRenderTarget to the next render stage */
+ TAny* iDrawableSources[CRenderTarget::EAspectRatioCount];
+ };
+
+#endif //__FBRENDERSTAGE_H__