diff -r 000000000000 -r 15bf7259bb7c uiacceltk/hitchcock/plugins/openwfcrs/inc/openwfcwrapper.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uiacceltk/hitchcock/plugins/openwfcrs/inc/openwfcwrapper.h Tue Feb 02 07:56:43 2010 +0200 @@ -0,0 +1,204 @@ +// Copyright (c) 2008-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 OPENWFCWRAPPER_H_ +#define OPENWFCWRAPPER_H_ + +#include +#include +#include +#include +#include "displaypolicy.h" + +// +//OpenWFC stuff + +#include +#include +#include //for RHashMap +#include +#include +#include +#include + +// + +class COpenWfcJobManger; + +class TDisplayConfiguration; +class CElementWrapper; + +class COpenWfcWrapper : public CBase, public MWsDisplayControl + { +friend class CElementWrapper; + +public: + static COpenWfcWrapper* NewL(TInt aScreenNo, CDisplayPolicy* aDisplayPolicy); + TInt SetUiSurface(const TSurfaceId& aNewUiSurface); + ~COpenWfcWrapper(); + + MWsElement* CreateElementL(); + void DestroyElement(MWsElement* aElement); + void Compose(const TSurfaceId& aOffScreenTarget, const TPoint& aOrigin, + MWsElement* aStart, MWsElement* aEnd, TRequestStatus* aCompleted); + TInt AddElement(MWsElement* aElement, MWsElement* aAbove); + void RemoveElement(MWsElement* aElement); + void PauseCompositorIfNeeded(); + void ResumeCompositorIfPaused(); + void SetScreenRotation(MWsScene::TSceneRotation aRotation); + MWsScene::TSceneRotation ScreenRotation() const; + TSize ScreenSize() const; + void Begin(const TRegion* aRegion); + void End(); + TBool CompositionDue (); + void Compose(TRequestStatus* aCompleted); + TInt FlushedSetConfiguration(const TDisplayConfiguration& aConfig); + TBool WithinBeginEnd() { return iWithinBeginEnd; }; + CDisplayPolicy* DisplayPolicy(); + void FlushSceneElementChanges (); + void RemoveElementFromSceneList(CElementWrapper* aElement); + + /*-------------------------------------------------------------------*//* + * CBase interface implementation functions + *//*-------------------------------------------------------------------*/ + //Standard symbian interface extension mechanism + virtual TInt Extension_ (TUint aExtensionId, TAny*& a0, TAny* a1); + + enum TInternalExtensionGuids + { //These debug object interfaces need not be supported at runtime or on all platforms + EExtensionDebugBackendGuid = 0x1028589A, + EExtensionDebugContextGuid = 0x1028589B, + EExtensionDebugDeviceGuid = 0x1028589C, + EExtensionDebugElementGuid = 0x1028589D, + EExtensionDebugSourceGuid = 0x1028589E, //F still spare when this was written... + }; + + /** Get Extension Interface. + * Implemented using the CBase::Extension_() mechanism + * @param aExtensionId The GUID/ Well-known ID of the interface + * @return pointer to the interface or NULL if not available + **/ + inline TAny* GetInterface(TUint aExtensionId); + + /** Get Extension Interface - templated helper. + * Resolves the ID and returned pointer based on the class name. + * Class name should support ETypeId intergral value, else use non-template version. + * @param MClass The class of the interface with embedded GUID / Well known ID + * @return pointer to the interface or NULL if not available + **/ + template MClass* GetInterface() + { + return static_cast(GetInterface(MClass::ETypeId)); + } + + TInt RegisterSurface(const TSurfaceId& aSurface); + TInt UnregisterSurface(const TSurfaceId& aSurface); + void Compose(const TSurfaceId& aOffScreenTarget, TRequestStatus* aCompleted); + virtual TBitFlags32 SupportedScreenRotations() const; + void PauseComposition(); + void ResumeComposition (); + /*-------------------------------------------------------------------*//* + * MWsDisplayControl/MDisplayControlBase interface implementation functions + *//*-------------------------------------------------------------------*/ + + virtual TInt NumberOfResolutions()const ; + virtual TInt GetResolutions(RArray& aResolutions)const ; + virtual void GetConfiguration(TDisplayConfiguration& aConfig)const ; + virtual TInt SetConfiguration(const TDisplayConfiguration& aConfig) ; + virtual TInt PreferredDisplayVersion()const ; + + virtual void NotifyOnDisplayChange(TRequestStatus& aStatus); + virtual void NotifyOnDisplayChangeCancel(); + virtual void NotifyOnConfigChange(TRequestStatus& aStatus); + virtual void NotifyOnConfigChangeCancel(); + + //"secret" methods available to element + WFCDevice Device(){return iDevice;} + WFCContext OnScreenContext() {return iOnScreenContext;} + WFCSource IncEltRefRegSource(const TSurfaceId& aHashKey); //<@return registered source handle or NULL if not registered + TInt DecEltRefRegSource(const TSurfaceId& aHashKey); //<@return 0=destroyed, +ve count left, -ve error + + static TInt TranslateOpenWfcError(WFCErrorCode error); + static void DestroyAllContextElements(WFCDevice dev, WFCContext ctx); + RSurfaceManager& SurfaceManager(){return iSurfaceManager;} + EGLDisplay Display(){return iEGLDisplay;} + +private: + COpenWfcWrapper(CDisplayPolicy* aDisplayPolicy); + void ConstructL(TInt aScreenId); + TInt AttachSurfaceToUiElement(CElementWrapper* aNewUiElement); + void SetCompositionModified(); + + static TUint32 HashFunction(const TSurfaceId& aHashKey); + void ComposeInternal(const TSurfaceId& aOffScreenTarget, + const TPoint& aOrigin, + MWsElement* aStart, + MWsElement* aEnd, + TRequestStatus* aCompleted); + TBool IsValidSurface(const TSurfaceId& aSurface); + +private: + TBool iPaused; + TBool iWithinBeginEnd; + TBool iCompositionModified; + TBool iAllowCompositorPause; + + CElementWrapper* iUiElement1; + CElementWrapper* iUiElement2; + + TSurfaceId iUiSurface; + CDisplayPolicy* iDisplayPolicy; + +private: + class OffScreenComposeGuard; + + struct SourceAndRef + { + WFCSource source; + TInt sourceRef; + TInt elementRef; + }; + RHashMap iSourceMap; + + WFCDevice iDevice; + WFCContext iOnScreenContext; + EGLDisplay iEGLDisplay; + WFCint iScreenNumber; + static const TInt iInitialSourceMapSize = 0x0; + CElementWrapper* iSceneElementList; //all elements visible in the scene hierarchy + CElementWrapper* iRemoveElementList; //all elements removed from the scene hierarchy + CElementWrapper* iCleanupElementList; //all elements currently allocated are destroyed on cleanup + COpenWfcJobManger* iJobManager; + MWsScene::TSceneRotation iRotation; + TBool iAutonomousCompositionInitiated; + MDisplayControlBase* iContextDisplayControl; + RSurfaceManager iSurfaceManager; + }; + +inline TAny* COpenWfcWrapper::GetInterface(TUint aExtensionId) + { + TAny* retVal=NULL; + //Note that extension is intentionally not overloaded in CCompositionBackend + if (this->Extension_(aExtensionId,retVal,NULL)