mmlibs/mmfw/tsrc/mmfintegrationtest/vclntavi/inc/graphicsurface.h
changeset 24 2672ba96448e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmlibs/mmfw/tsrc/mmfintegrationtest/vclntavi/inc/graphicsurface.h	Fri Jun 11 15:13:33 2010 +0300
@@ -0,0 +1,198 @@
+// 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:
+// Reference sample client-side "provider" interface CWsGraphic plugin using GCE Surfaces
+// Copied from common/generic/graphics/wserv/nga/samplegraphicsurfacedrawer
+// if the CRP tests suddenly starts to break or fail to build it might be due to this file has changed in CBR
+// 
+//
+
+#ifndef __GRAPHICSURFACE_H__
+#define __GRAPHICSURFACE_H__
+
+#include <w32std.h>
+#include <w32stdgraphic.h>
+#include <graphics/surface.h>
+#include <graphics/surfaceconfiguration.h>
+
+enum TDrawWsGraphicArgumentFlags
+	{
+	EDrawWsAllScreens							=0x00000001,
+	EDrawWsTSurfaceIdIgnored 					=0x00000002,	//<Indicates that the client should NOT supply
+	EDrawWsNotifyProviderTSurfaceIdChanged		=0x00000100,
+	EDrawWsNotifyProviderConfigChanged			=0x00000200,
+	EDrawWsNotifyProviderPlayControlsChanged	=0x00000400,
+	EDrawWsNotifyProviderSurfaceUnreferenced	=0x00000800,
+	EDrawWsNotifyProviderConfigRereferenced		=0x00001000,	//<Triggers a one-shot config notification when drawn after an unreference
+	EDrawWsNotifyProviderConfigNextReref		=0x00002000,	//<Automatic one-shot set after unreferenced if 
+	EDrawWsNotifyError							=0x00010000,
+	EDrawWsNotifyProviderAll					=0x000FFF00,
+	EDrawWsUpdateTSurfaceId						=0x00100000,
+	EDrawWsUpdateConfiguration					=0x00200000,
+	EDrawWsUpdatePlayerControls					=0x00400000,
+	EDrawWsUpdateAll							=0x0FF00000,
+	};
+
+//KUidGraphicMsgSurface=  0x10285C57 	  To    0x10285C5B
+class TWsSurfaceConfiguration: public TWsGraphicMsgFixedBase
+/** data attached to a CWindowGc::DrawWsGraphic to allow the artwork to understand surface configuration commands.
+Also use to notify owner client of config change.
+
+@publishedAll
+@released
+*/	{
+public:
+	enum
+		{
+		ETypeId = 0x10285C57
+		};
+		TWsSurfaceConfiguration()
+		:	TWsGraphicMsgFixedBase(TUid::Uid(ETypeId),sizeof(*this))
+		{	}
+		TWsSurfaceConfiguration(const TSurfaceConfiguration& aConfig)
+		:	TWsGraphicMsgFixedBase(TUid::Uid(ETypeId),sizeof(*this)),
+			iConfig(aConfig)
+			
+		{	}
+	TSurfaceConfiguration iConfig;
+	};
+
+class TWsDebugResultCode: public TWsGraphicMsgFixedBase
+/** Data attached to a message to the artwork provider notifying it of a command result code
+This code is always followed by the command that caused it (TSurfaceConfig)
+*/
+	{
+public:
+	enum
+		{
+		ETypeId = 0x10285C5A
+		};
+	TWsDebugResultCode():	TWsGraphicMsgFixedBase(TUid::Uid(ETypeId),sizeof(*this))
+		{	}
+	TInt iResult;
+	TInt iExtra;
+	TInt iLineNum;
+	};
+
+
+class TWsSurfaceUnreferenced: public TWsGraphicMsgFixedBase
+/** data attached to a message to the artwork provider to allow it to react if a surface is no longer drawn
+play-stop-pause commands.
+
+@publishedAll
+@released
+*/	{
+public:
+	enum
+		{
+		ETypeId = 0x10285C58
+		};
+	TWsSurfaceUnreferenced():	TWsGraphicMsgFixedBase(TUid::Uid(ETypeId),sizeof(*this))
+		{	}
+	TSurfaceId iId;
+	};
+class CWsGraphicDrawerSurface;
+class TWsDebugResultCode;
+class CWsGraphicSurface: public CWsGraphic
+/** Client representation of a window-server-side CFbsBitmap owned by this Client
+
+@publishedAll
+@released
+*/
+	{
+	friend class CWsGraphicDrawerSurface;
+public:
+	IMPORT_C static CWsGraphicSurface* NewL(const TSurfaceConfiguration& aSurface, TUint aDrawWsGraphicArgumentFlags, const TArray<TUint>*  aScreensMap=NULL);
+	IMPORT_C static CWsGraphicSurface* NewL(TUid aUid,const TSurfaceConfiguration& aSurface, TUint aDrawWsGraphicArgumentFlags, const TArray<TUint>*  aScreensMap=NULL);
+	IMPORT_C static CWsGraphicSurface* NewL(const TWsGraphicId& aReplace,const TSurfaceConfiguration& aSurface, TUint aDrawWsGraphicArgumentFlags, const TArray<TUint>*  aScreensMap=NULL);
+	IMPORT_C  void ConstructL(const TSurfaceConfiguration& aSurface, TUint aDrawWsGraphicArgumentFlags, const TArray<TUint>*  aScreensMap=NULL);
+	IMPORT_C  void ConstructL(TUid aUid,const TSurfaceConfiguration& aSurface, TUint aDrawWsGraphicArgumentFlags, const TArray<TUint>*  aScreensMap=NULL);
+	IMPORT_C  void ConstructL(const TWsGraphicId& aReplace,const TSurfaceConfiguration& aSurface, TUint aDrawWsGraphicArgumentFlags, const TArray<TUint>*  aScreensMap=NULL);
+	IMPORT_C ~CWsGraphicSurface();
+protected: 
+	IMPORT_C TInt ShareGlobally();
+	IMPORT_C TInt UnShareGlobally();
+	IMPORT_C TInt Share(TSecureId aClientId);
+	IMPORT_C TInt UnShare(TSecureId aClientId);
+	IMPORT_C TInt SendMessage(const TSurfaceConfiguration&);
+	IMPORT_C TInt SendMessage(const TWsGraphicAnimation&);
+
+	virtual void HandleMessage(const TSurfaceConfiguration&)		{}
+	virtual void HandleMessage(const TWsGraphicAnimation&)			{}
+	virtual void HandleMessage(const TWsSurfaceUnreferenced&)		{}
+	virtual void HandleMessage(const TWsDebugResultCode&)		{}
+	virtual void HandleOtherMessage(const TWsGraphicMsgFixedBase&)	{}
+	IMPORT_C virtual TInt CWsGraphicSurface_Reserved1();
+	IMPORT_C virtual TInt CWsGraphicSurface_Reserved2();
+	IMPORT_C virtual TInt CWsGraphicSurface_Reserved3();
+protected:
+	class TConstructParams;
+	IMPORT_C TConstructParams* MakeParamsLC(const TSurfaceConfiguration& aSurface, TUint aDrawWsGraphicArgumentFlags, const TArray<TUint>*  aScreensMap=NULL);
+	IMPORT_C CWsGraphicSurface();		//Derivers should implement NewL to call ConstructL
+	IMPORT_C void RegisterScreens(const TSurfaceConfiguration& aSurface,const TArray<TUint>*  aScreensMap=NULL);
+	IMPORT_C void UnRegisterScreens();
+private:
+	void HandleMessage(const TDesC8& aData);
+	void OnReplace();
+
+private: //data
+	TSurfaceId		iRegisteredId;
+	RArray<TUint>	iRegisteredScreens;
+	};
+
+/** Used as the parameter payload to construct the drawer
+*/
+class CWsGraphicSurface::TConstructParams
+	{
+public:
+	TInt Size()
+		{	return iParamFlags.Size()+iConfig.Size()+2*sizeof(TWsGraphicMsgFixedBase);	}
+	void* operator new(TUint size,TInt aNumExtras)
+		{
+		return ::operator new(size+((aNumExtras>=0)?aNumExtras*sizeof(TInt):0));
+		}
+	void operator delete(void* aObj,TInt /*aNumExtras*/)
+		{
+		::operator delete(aObj);
+		}
+	void operator delete(void* aObj)
+		{
+		::operator delete(aObj);
+		}
+	TWsSurfaceConfiguration iConfig;
+	class TParamFlags:public TWsGraphicMsgFixedBase
+		{
+		public:
+		enum
+			{
+			ETypeId = 0x10285C59
+			};
+
+		TParamFlags(): TWsGraphicMsgFixedBase(TUid::Uid(ETypeId),sizeof(*this))
+			{}
+		TParamFlags(TInt aNumExtras): TWsGraphicMsgFixedBase(TUid::Uid(ETypeId),sizeof(*this)+aNumExtras*sizeof(TInt))
+			{}
+		TUint iDrawWsGraphicArgumentFlags;
+		TUint iScreensMap[1];	//THIS MUST BE THE LAST FIELD!!!
+		} iParamFlags;
+	TConstructParams()	
+	{	}
+	TConstructParams(const TSurfaceConfiguration& aConfig,TInt aNumExtras=0)
+	:	iConfig(aConfig),iParamFlags(aNumExtras)
+	{	}
+	TCleanupItem	CleanupItem()	{ return TCleanupItem(Cleanup,this);	}
+	static void Cleanup(void* p)	{	delete(TConstructParams*)p;	}	
+	};
+
+#endif //__GRAPHICSURFACE_H__
+