diff -r e8c1ea2c6496 -r 8758140453c0 graphics/wserv/src/T_DataWindowGc.cpp --- /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 (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 + } + } + +