graphics/wserv/src/T_DataWindowGc.cpp
branchSymbian2
changeset 1 8758140453c0
child 6 c108117318cb
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphics/wserv/src/T_DataWindowGc.cpp	Thu Jan 21 12:53:44 2010 +0000
@@ -0,0 +1,437 @@
+/*
+* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#include "T_DataWindowGc.h"
+#include "T_GraphicsUtil.h"
+
+/*@{*/
+_LIT(KDataClassname,	"CWindowGc");
+
+//Commands
+_LIT(KCmdnew,						"new");
+_LIT(KCmdDestructor,				"~CWindowGc");
+_LIT(KCmdDestructorGeneral,			"~");
+_LIT(KCmdConstruct,					"Construct");
+_LIT(KCmdActivate,					"Activate");
+_LIT(KCmdDeactivate,				"Deactivate");
+_LIT(KCmdBitBlt,					"BitBlt");
+_LIT(KCmdBitBltMasked,				"BitBltMasked");
+_LIT(KCmdSetDitherOrigin,			"SetDitherOrigin");
+_LIT(KCmdSetOpaque,					"SetOpaque");
+_LIT(KCmdDrawWsGraphic,				"DrawWsGraphic");
+
+// Fields
+_LIT(KFldData,						"data");
+_LIT(KFldWsga,						"wsga");
+_LIT(KFldDestRect,					"destrect");
+_LIT(KFldDestination,				"destination");
+_LIT(KFldDevice,					"device");
+_LIT(KFldId,						"id");
+_LIT(KFldInvertMask,				"invertmask");
+_LIT(KFldMaskBitmap,				"maskbitmap");
+_LIT(KFldPoint,						"point");
+_LIT(KFldSource,					"source");
+_LIT(KFldSourceRect,				"sourcerect");
+_LIT(KFldWsBitmap,					"wsbitmap");
+_LIT(KFldDrawOpaque,				"drawOpaque");
+
+///	Logging
+_LIT(KLogError,						"Error=%d");
+_LIT(KLogMissingParameter,			"Missing parameter '%S'");
+/*@}*/
+
+//////////////////////////////////////////////////////////////////////
+// Construction/Destruction
+//////////////////////////////////////////////////////////////////////
+
+CT_DataWindowGc* CT_DataWindowGc::NewL()
+	{
+	CT_DataWindowGc*	ret=new (ELeave) CT_DataWindowGc();
+	CleanupStack::PushL(ret);
+	ret->ConstructL();
+	CleanupStack::Pop(ret);
+	return ret;
+	}
+
+CT_DataWindowGc::CT_DataWindowGc()
+:	CT_DataBitmapContext()
+,	iWindowGc(NULL)
+	{
+	}
+
+void CT_DataWindowGc::ConstructL()
+	{
+	}
+
+CT_DataWindowGc::~CT_DataWindowGc()
+	{
+	DestroyData();
+	}
+
+void CT_DataWindowGc::SetObjectL(TAny* aAny)
+	{
+	DestroyData();
+	iWindowGc = static_cast<CWindowGc*> (aAny);
+	}
+
+void CT_DataWindowGc::DisownObjectL()
+	{
+	iWindowGc = NULL;
+	}
+
+void CT_DataWindowGc::DestroyData()
+	{
+	delete iWindowGc;
+	iWindowGc=NULL;
+	}
+
+MWsClientClass* CT_DataWindowGc::GetClientClass() const
+	{
+	return iWindowGc;
+	}
+
+CBitmapContext* CT_DataWindowGc::GetBitmapContext() const
+	{
+	return iWindowGc;
+	}
+
+CGraphicsContext* CT_DataWindowGc::GetGraphicsContext() const
+	{
+	return iWindowGc;
+	}
+
+
+
+/**
+* Process a command read from the ini file
+*
+* @param aCommand			the command to process
+* @param aSection			the entry in the ini file requiring the command to be processed
+* @param aAsyncErrorIndex	index of command. used for async calls
+*
+* @return ETrue if the command is processed
+*/
+TBool CT_DataWindowGc::DoCommandL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt aAsyncErrorIndex)
+	{
+	TBool	ret = ETrue;
+
+	if ( aCommand==KCmdDestructor || aCommand==KCmdDestructorGeneral )
+		{
+		DoCmdDestructor();
+		}
+	else if ( aCommand==KCmdnew || aCommand==KDataClassname )
+		{
+		DoCmdnewL(aSection);
+		}
+	else if ( aCommand==KCmdConstruct )
+		{
+		DoCmdConstruct();
+		}
+	else if ( aCommand==KCmdActivate )
+		{
+		DoCmdActivateL(aSection);
+		}
+	else if ( aCommand==KCmdDeactivate )
+		{
+		DoCmdDeactivate();
+		}
+	else if ( aCommand==KCmdBitBlt )
+		{
+		DoCmdBitBltL(aCommand, aSection, aAsyncErrorIndex);
+		}
+	else if ( aCommand==KCmdBitBltMasked )
+		{
+		DoCmdBitBltMaskedL(aCommand, aSection, aAsyncErrorIndex);
+		}
+	else if ( aCommand==KCmdSetDitherOrigin )
+		{
+		DoCmdSetDitherOrigin(aSection);
+		}
+	else if ( aCommand==KCmdSetOpaque )
+		{
+		DoCmdSetOpaque(aSection);
+		}
+	else if ( aCommand==KCmdDrawWsGraphic )
+		{
+		DoCmdDrawWsGraphicL(aSection);
+		}
+	else if ( CT_DataBitmapContext::DoCommandL(aCommand, aSection, aAsyncErrorIndex) )
+		{
+		}
+	else
+		{
+		ret=CT_DataWsClientClass::DoCommandL(*this, aCommand, aSection, aAsyncErrorIndex);
+		}
+
+	return ret;
+	}
+
+
+void CT_DataWindowGc::DoCmdnewL(const TDesC& aSection)
+	{
+	DestroyData();
+
+	// Get test data for command input parameter(s)
+	CWsScreenDevice*	device = NULL;
+	if ( !CT_GraphicsUtil::GetWsScreenDeviceL(*this, aSection, KFldDevice, device) )
+		{
+		ERR_PRINTF2(KLogMissingParameter, &KFldDevice);
+		SetBlockResult(EFail);
+		}
+	else
+		{
+		INFO_PRINTF1(_L("execute new CWindowGc(CWsScreenDevice)"));
+		TRAPD( err, iWindowGc = new (ELeave) CWindowGc(device) );
+		if ( err != KErrNone )
+			{
+			ERR_PRINTF2(KLogError, err);
+			SetError(err);
+			}
+		}
+	}
+
+void CT_DataWindowGc::DoCmdDestructor()
+	{
+	// Execute command and log parameters
+	INFO_PRINTF1(_L("execute ~CWindowGc()"));
+	delete iWindowGc;
+	iWindowGc=NULL;
+	}
+
+
+void CT_DataWindowGc::DoCmdConstruct()
+	{
+	// Execute command and log parameters
+	INFO_PRINTF1(_L("execute Construct()"));
+	TInt	returnCode = iWindowGc->Construct();
+
+	// Check the command return code, if !=KErrNone then stop this command
+	if ( returnCode!=KErrNone )
+		{
+		ERR_PRINTF2(KLogError, returnCode);
+		SetError(returnCode);
+		}
+	}
+
+
+void CT_DataWindowGc::DoCmdActivateL(const TDesC& aSection)
+	{
+	// Get test data for command input parameter(s)
+	RDrawableWindow	*device = NULL;
+
+	if ( !CT_GraphicsUtil::GetDrawableWindowL(*this, aSection, KFldDevice, device) )
+		{
+		ERR_PRINTF2(KLogMissingParameter, &KFldDevice);
+		SetBlockResult(EFail);
+		}
+	else
+		{
+		// Execute command and log parameters
+		INFO_PRINTF1(_L("execute Activate(RDrawableWindow)"));
+		iWindowGc->Activate(*device);
+
+		// No command return value and output parameter to display and check
+		}
+	}
+
+
+void CT_DataWindowGc::DoCmdDeactivate()
+	{
+	// No command input parameter to process
+
+	// Execute command and log parameters
+	INFO_PRINTF1(_L("execute Deactivate()"));
+	iWindowGc->Deactivate();
+
+	// No command return value and output parameter to display and check
+	}
+
+void CT_DataWindowGc::DoCmdBitBltL(const TDesC& aCommand, const TDesC& aSection, const TInt aAsyncErrorIndex)
+	{
+	TBool	dataOk=ETrue;
+
+	CWsBitmap*	wsBitmap=NULL;
+	if ( !CT_GraphicsUtil::GetWsBitmapL(*this, aSection, KFldWsBitmap, wsBitmap) )
+		{
+		CT_DataBitmapContext::DoCommandL(aCommand, aSection, aAsyncErrorIndex);
+		}
+	else
+		{
+		TPoint		point;
+		if ( GetPointFromConfig(aSection, KFldPoint, point) )
+			{
+			if ( dataOk )
+				{
+				// Execute command and log parameters
+				INFO_PRINTF1(_L("execute BitBlt(TPoint, CWsBitmap*)"));
+				iWindowGc->BitBlt(point, wsBitmap);
+				}
+			}
+		else
+			{
+			TPoint	destination;
+			if ( !GetPointFromConfig(aSection, KFldDestination, destination) )
+				{
+				dataOk=EFalse;
+				ERR_PRINTF2(KLogMissingParameter, &KFldDestination());
+				SetBlockResult(EFail);
+				}
+    	
+			TRect	source;
+			if ( !GetRectFromConfig(aSection, KFldSource, source) )
+				{
+				dataOk=EFalse;
+				ERR_PRINTF2(KLogMissingParameter, &KFldSource());
+				SetBlockResult(EFail);
+				}
+    	
+			if ( dataOk )
+				{
+				// Execute command and log parameters
+				INFO_PRINTF1(_L("execute BitBlt(TRect, CWsBitmap*, TRect)"));
+				iWindowGc->BitBlt(destination, wsBitmap, source);
+				}
+			}
+		}
+	}
+
+
+void CT_DataWindowGc::DoCmdBitBltMaskedL(const TDesC& aCommand, const TDesC& aSection, const TInt aAsyncErrorIndex)
+	{
+	TBool	dataOk=ETrue;
+
+	CWsBitmap*	wsBitmap=NULL;
+	if ( !CT_GraphicsUtil::GetWsBitmapL(*this, aSection, KFldWsBitmap, wsBitmap) )
+		{
+		CT_DataBitmapContext::DoCommandL(aCommand, aSection, aAsyncErrorIndex);
+		}
+	else
+		{
+		// Get test data for command input parameter(s)
+		TPoint	point;
+		if ( !GetPointFromConfig(aSection, KFldPoint, point) )
+			{
+			dataOk=EFalse;
+			ERR_PRINTF2(KLogMissingParameter, &KFldPoint());
+			SetBlockResult(EFail);
+			}
+    	
+		TRect	sourceRect;
+		if ( !GetRectFromConfig(aSection, KFldSourceRect, sourceRect) )
+			{
+			dataOk=EFalse;
+			ERR_PRINTF2(KLogMissingParameter, &KFldSourceRect());
+			SetBlockResult(EFail);
+			}
+    	
+		TBool	invertMask;
+		if ( !GetBoolFromConfig(aSection, KFldInvertMask, invertMask) )
+			{
+			dataOk=EFalse;
+			ERR_PRINTF2(KLogMissingParameter, &KFldInvertMask());
+			SetBlockResult(EFail);
+			}
+    	
+		if ( dataOk )
+			{
+			CWsBitmap*	maskBitmap=NULL;
+			CT_GraphicsUtil::GetWsBitmapL(*this, aSection, KFldMaskBitmap, maskBitmap);
+    	
+			// Execute command and log parameters
+			INFO_PRINTF1(_L("execute BitBltMasked(TPoint, CWsBitmap*, TRect, CWsBitmap*, TBool)"));
+			iWindowGc->BitBltMasked(point, wsBitmap, sourceRect, maskBitmap, invertMask);
+			}
+		}
+	}
+
+void CT_DataWindowGc::DoCmdSetDitherOrigin(const TDesC& aSection)
+	{
+	TPoint	point;
+	if ( GetPointFromConfig(aSection, KFldPoint, point) )
+		{
+		INFO_PRINTF1(_L("CWindowGc::SetDitherOrigin"));
+		iWindowGc->SetDitherOrigin(point);
+		}
+	else
+		{
+		ERR_PRINTF2(_L("Missing parameter %S"), &KFldPoint());
+		SetBlockResult(EFail);
+		}
+	}
+
+void CT_DataWindowGc::DoCmdSetOpaque(const TDesC& aSection)
+	{
+	TBool	drawOpaque=ETrue;
+	if(	GetBoolFromConfig(aSection, KFldDrawOpaque(), drawOpaque))
+		{
+		INFO_PRINTF1(_L("CWindowGc::SetOpaque"));
+		iWindowGc->SetOpaque(drawOpaque);
+		}
+	else
+		{
+		ERR_PRINTF2(_L("Missing parameter %S"), &KFldDrawOpaque());
+		SetBlockResult(EFail);
+		}
+	}
+
+void CT_DataWindowGc::DoCmdDrawWsGraphicL(const TDesC& aSection)
+	{
+	TBool	dataOk=ETrue;
+
+	// Get test data for command input parameter(s)
+	TWsGraphicId	datId(0);
+	if ( !GetWsGraphicIdFromConfigL(aSection, KFldId, datId) )
+		{
+		dataOk=EFalse;
+		ERR_PRINTF2(KLogMissingParameter, &KFldId);
+		SetBlockResult(EFail);
+		}
+
+	TRect	datDestRect;
+	if ( !GetRectFromConfig(aSection, KFldDestRect, datDestRect) )
+		{
+		dataOk=EFalse;
+		ERR_PRINTF2(KLogMissingParameter, &KFldDestRect);
+		SetBlockResult(EFail);
+		}
+
+	if ( dataOk )
+		{
+		RWsGraphicMsgBuf*	pData = NULL;
+		TWsGraphicAnimation* pWsga = NULL;
+		if ( CT_GraphicsUtil::GetWsGraphicMsgBufL(*this, aSection, KFldData, pData) )
+			{
+			// Execute command and log parameters
+			INFO_PRINTF1(_L("execute DrawWsGraphic(TWsGraphicId, TRect, TDesC8)"));
+			iWindowGc->DrawWsGraphic(datId, datDestRect, pData->Pckg());
+			}
+		else if( CT_GraphicsUtil::GetWsGraphicAnimationL(*this, aSection, KFldWsga, pWsga) )
+			{
+			INFO_PRINTF1(_L("execute DrawWsGraphic(TWsGraphicId, TRect, TDesC8)"));
+			iWindowGc->DrawWsGraphic(datId, datDestRect, pWsga->Pckg());
+			}
+		else
+			{
+			// Execute command and log parameters
+			INFO_PRINTF1(_L("execute DrawWsGraphic(TWsGraphicId, TRect)"));
+			iWindowGc->DrawWsGraphic(datId, datDestRect);
+			}
+		// No command return value and output parameter to display and check
+		}
+	}
+
+