/*
* 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 "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:
*
*/
/**
@test
@internalComponent
This contains CT_DataFbsDevice
*/
#include "T_DataFbsDevice.h"
#include "T_GraphicsUtil.h"
/*@{*/
//Commands
_LIT(KCmdcheckPixels, "checkPixels");
_LIT(KCmdcheckLineColor, "checkLineColor");
_LIT(KCmdcheckRectColor, "checkRectColor");
_LIT(KCmdSizeInPixels, "SizeInPixels");
_LIT(KCmdGetFontById, "GetFontById");
_LIT(KCmdGetNearestFontInPixels, "GetNearestFontInPixels");
_LIT(KCmdGetNearestFontInTwips, "GetNearestFontInTwips");
_LIT(KCmdGetNearestFontToDesignHeightInPixels, "GetNearestFontToDesignHeightInPixels");
_LIT(KCmdGetNearestFontToDesignHeightInTwips, "GetNearestFontToDesignHeightInTwips");
_LIT(KCmdGetNearestFontToMaxHeightInPixels, "GetNearestFontToMaxHeightInPixels");
_LIT(KCmdGetNearestFontToMaxHeightInTwips, "GetNearestFontToMaxHeightInTwips");
_LIT(KCmdCreateContext, "CreateContext");
_LIT(KCmdRectCompare, "RectCompare");
_LIT(KCmdSetCustomPalette, "SetCustomPalette");
_LIT(KCmdGraphicsAccelerator, "GraphicsAccelerator");
_LIT(KCmdOrientation, "Orientation");
_LIT(KCmdDisplayMode16M, "DisplayMode16M");
_LIT(KCmdSetScalingFactor, "SetScalingFactor");
_LIT(KCmdGetDrawRect, "GetDrawRect");
_LIT(KCmdSetDrawDeviceOffset, "SetDrawDeviceOffset");
_LIT(KCmdRegisterLinkedTypeface, "RegisterLinkedTypeface");
//Fields
_LIT(KFldAlgStyle, "alg_style");
_LIT(KFldExpected, "expected");
_LIT(KFldFinish, "finish");
_LIT(KFldFormatFieldNumber, "%S%d");
_LIT(KFldFont, "font");
_LIT(KFldFbsFont, "fbsfont");
_LIT(KFldFontUid, "font_uid");
_LIT(KFldMaxHeight, "maxheight");
_LIT(KFldPixel, "pixel");
_LIT(KFldRect, "rect");
_LIT(KFldStart, "start");
_LIT(KFldBitGc, "bitgc");
_LIT(KFldRect1, "rect1");
_LIT(KFldRect2, "rect2");
_LIT(KFldFbsDevice, "fbsdevice");
_LIT(KFldExpectedOrientation, "expectedorientation");
_LIT(KFldPalette, "palette");
_LIT(KFldGraphicsAccelerator, "graphicsaccelerator");
_LIT(KFldExpectedDisplayMode, "expecteddisplaymode");
_LIT(KFldOrigin, "origin");
_LIT(KFldFactorX, "factorx");
_LIT(KFldFactorY, "factory");
_LIT(KFldDivisorX, "divisorx");
_LIT(KFldDivisorY, "divisory");
_LIT(KFldExpectedDrawRect, "expecteddrawrect");
_LIT(KFldOffset, "offset");
_LIT(KFldLinkedTypefaceSpec, "linkedtypefacespec");
_LIT(KFldExpectedUid, "expecteduid");
//Logs
_LIT(KLogColor, "Color Red=%d Green=%d Blue=%d Alpha=%d");
_LIT(KLogPoint, "Point X=%d Y=%d");
_LIT(KLogError, "Error=%d");
_LIT(KLogMissingParameter, "Missing parameter '%S'");
_LIT(KLogMissingWrapper, "Missing wrapper for '%S'");
_LIT(KLogNotExpectedValue, "Not expected value");
/*@}*/
/**
* Constructor. First phase construction
*/
CT_DataFbsDevice::CT_DataFbsDevice()
: CT_DataBitmapDevice()
{
}
/**
* Process a command read from the ini file
*
* @param aDataWrapper test step requiring command to be processed
* @param aCommand the command to process
* @param aSection the entry in the ini file requiring the command to be processed
*
* @return ETrue if the command is processed
*/
TBool CT_DataFbsDevice::DoCommandL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt aAsyncErrorIndex)
{
/* Another work package will implement this */
TBool retVal = ETrue;
if (aCommand == KCmdcheckPixels)
{
DoCmdCheckPixels(aSection);
}
else if (aCommand == KCmdcheckLineColor)
{
DoCmdCheckLineColor(aSection);
}
else if (aCommand == KCmdcheckRectColor)
{
DoCmdCheckRectColor(aSection);
}
else if (aCommand == KCmdSizeInPixels)
{
DoCmdSizeInPixels(aSection);
}
else if (aCommand == KCmdGetFontById)
{
DoCmdGetFontByIdL(aSection);
}
else if (aCommand == KCmdGetNearestFontInPixels)
{
if( !DoCmdGetNearestFontInPixelsL(aSection) )
{
retVal = CT_DataBitmapDevice::DoCommandL(aCommand, aSection, aAsyncErrorIndex);
}
}
else if (aCommand == KCmdGetNearestFontInTwips)
{
if( !DoCmdGetNearestFontInTwipsL(aSection) )
{
retVal = CT_DataBitmapDevice::DoCommandL(aCommand, aSection, aAsyncErrorIndex);
}
}
else if (aCommand == KCmdGetNearestFontToDesignHeightInPixels)
{
if( !DoCmdGetNearestFontToDesignHeightInPixelsL(aSection) )
{
retVal = CT_DataBitmapDevice::DoCommandL(aCommand, aSection, aAsyncErrorIndex);
}
}
else if (aCommand == KCmdGetNearestFontToDesignHeightInTwips)
{
if( !DoCmdGetNearestFontToDesignHeightInTwipsL(aSection) )
{
retVal = CT_DataBitmapDevice::DoCommandL(aCommand, aSection, aAsyncErrorIndex);
}
}
else if (aCommand == KCmdGetNearestFontToMaxHeightInPixels)
{
if( !DoCmdGetNearestFontToMaxHeightInPixelsL(aSection) )
{
retVal = CT_DataBitmapDevice::DoCommandL(aCommand, aSection, aAsyncErrorIndex);
}
}
else if (aCommand == KCmdGetNearestFontToMaxHeightInTwips)
{
if( !DoCmdGetNearestFontToMaxHeightInTwipsL(aSection) )
{
retVal = CT_DataBitmapDevice::DoCommandL(aCommand, aSection, aAsyncErrorIndex);
}
}
else if (aCommand == KCmdCreateContext)
{
if (!DoCmdCreateContextL(aSection))
{
retVal = CT_DataBitmapDevice::DoCommandL(aCommand, aSection, aAsyncErrorIndex);
}
}
else if (aCommand == KCmdRectCompare)
{
DoCmdRectCompareL(aSection);
}
else if (aCommand == KCmdOrientation)
{
DoCmdOrientation(aSection);
}
else if (aCommand == KCmdSetCustomPalette)
{
DoCmdSetCustomPaletteL(aSection);
}
else if (aCommand == KCmdGraphicsAccelerator)
{
DoCmdGraphicsAccelerator();
}
else if (aCommand == KCmdDisplayMode16M)
{
DoCmdDisplayMode16M(aSection);
}
else if (aCommand == KCmdSetScalingFactor)
{
DoCmdSetScalingFactor(aSection);
}
else if (aCommand == KCmdGetDrawRect)
{
DoCmdGetDrawRect(aSection);
}
else if (aCommand == KCmdRegisterLinkedTypeface)
{
DoCmdRegisterLinkedTypefaceL(aSection);
}
else if (aCommand == KCmdSetDrawDeviceOffset)
{
DoCmdSetDrawDeviceOffset(aSection);
}
else
{
retVal = CT_DataBitmapDevice::DoCommandL(aCommand, aSection, aAsyncErrorIndex);
}
return retVal;
}
void CT_DataFbsDevice::DoCmdSizeInPixels(const TDesC& aSection)
{
INFO_PRINTF1(_L("execute SizeInPixels()"));
TSize actualsize;
TInt expectheight = 0;
TInt expectwidth = 0;
TSize expectsize;
if (!GetSizeFromConfig(aSection, KFldExpected, expectsize))
{
ERR_PRINTF2(KLogMissingParameter, &KFldExpected);
SetBlockResult(EFail);
}
else
{
actualsize = GetFbsDevice()->SizeInPixels();
if (actualsize != expectsize)
{
ERR_PRINTF3(_L("The actual size is width=%d, height=%d"), actualsize.iWidth, actualsize.iHeight);
ERR_PRINTF3(_L("The expect size is width=%d, height=%d"), expectsize.iWidth, expectsize.iHeight);
SetBlockResult(EFail);
}
}
}
/**
* DoCmdcheckPixels: to check the color of specified pixels on the screen device, and compare
* with the expected color specidied in the TEF testdata.
* pixel<n>: specify the position of the screen device to check
* expected<n>: specify the expected color to be compared with
*
*/
void CT_DataFbsDevice::DoCmdCheckPixels(const TDesC& aSection)
{
TBuf<KMaxTestExecuteCommandLength> tempStore;
TBool moreData = ETrue;
for (TInt index=1; moreData; ++index)
{
// get the pixel position on the screen to check/verify
tempStore.Format(KFldFormatFieldNumber, &KFldPixel, index);
TPoint point;
if ( !GetPointFromConfig(aSection, tempStore, point) )
{
moreData = EFalse;
}
else
{
TRgb actual;
GetFbsDevice()->GetPixel(actual, point);
tempStore.Format(KFldFormatFieldNumber, &KFldExpected, index);
TRgb expected;
if (GetRgbFromConfig(aSection, tempStore, expected))
{
if (actual != expected)
{
ERR_PRINTF5(KLogColor, actual.Red(), actual.Green(), actual.Blue(), actual.Alpha());
ERR_PRINTF5(KLogColor, expected.Red(), expected.Green(), expected.Blue(), expected.Alpha());
SetBlockResult(EFail);
}
}
}
}
}
/**
* DoCmdcheckLineColor: to check the color of specified lines on the screen device, and compare
* with the expected color specidied in the TEF testdata.
* start<n>: specify the starting position of the line on the screen device to check
* finish<n>: specify the finish position of the line on the screen device to check
* expected<n>: specify the expected color to be compared with
* Note: the straight line (from start to the finish points) is constructed by TLinearDDA
*
*/
void CT_DataFbsDevice::DoCmdCheckLineColor(const TDesC& aSection)
{
TBuf<KMaxTestExecuteCommandLength> tempStore;
CPalette* palette = NULL;
GetFbsDevice()->GetPalette(palette);
TBool moreData = ETrue;
for (TInt index=1; moreData; ++index)
{
// get the the start and finish points of the line to check/verify
tempStore.Format(KFldFormatFieldNumber, &KFldStart, index);
TPoint startPoint;
if (!GetPointFromConfig(aSection, tempStore, startPoint))
{
moreData = EFalse;
}
tempStore.Format(KFldFormatFieldNumber, &KFldFinish, index);
TPoint endPoint;
if (!GetPointFromConfig(aSection, tempStore, endPoint))
{
moreData = EFalse;
}
if (moreData)
{
// get the expected color from testdata
tempStore.Format(KFldFormatFieldNumber, &KFldExpected, index);
TRgb expected;
if (!GetRgbFromConfig(aSection, tempStore, expected))
{
ERR_PRINTF2(KLogMissingParameter, &tempStore);
SetBlockResult(EFail);
}
else
{
if (palette!=NULL)
{
expected = palette->NearestEntry(expected);
}
TLinearDDA lineDDA;
lineDDA.Construct(startPoint, endPoint, TLinearDDA::ECenter);
// for each pixels on the line (from start to finish points), check if its color matches expected
TPoint point;
while (!lineDDA.SingleStep(point))
{
TRgb actual;
GetFbsDevice()->GetPixel(actual, point);
if (actual != expected)
{
ERR_PRINTF5(KLogColor, actual.Red(), actual.Green(), actual.Blue(), actual.Alpha());
ERR_PRINTF5(KLogColor, expected.Red(), expected.Green(), expected.Blue(), expected.Alpha());
ERR_PRINTF3(KLogPoint, point.iX, point.iY);
SetBlockResult(EFail);
}
}
}
}
}
delete palette;
}
/**
* DoCmdcheckRectColor: to check the color of specified rectangle on the screen device, and
* compare with the expected color specidied in the TEF testdata.
* rect<n>: specify the rectangle area on the screen device to check
* expected<n>: specify the expected color to be compared with
*
*/
void CT_DataFbsDevice::DoCmdCheckRectColor(const TDesC& aSection)
{
TBuf<KMaxTestExecuteCommandLength> tempStore;
CPalette* palette=NULL;
GetFbsDevice()->GetPalette(palette);
TBool moreData = ETrue;
for (TInt index=1; moreData; ++index)
{
// get the the rectangle to check/verify
tempStore.Format(KFldFormatFieldNumber, &KFldRect, index);
TRect rect;
if (!GetRectFromConfig(aSection, tempStore, rect))
{
moreData = EFalse;
}
else
{
// get the expected color from testdata
tempStore.Format(KFldFormatFieldNumber, &KFldExpected, index);
TRgb expected;
if (!GetRgbFromConfig(aSection, tempStore, expected))
{
ERR_PRINTF2(KLogMissingParameter, &tempStore);
SetBlockResult(EFail);
}
else
{
if (palette!=NULL)
{
expected = palette->NearestEntry(expected);
}
TPoint point;
for (point.iX=rect.iTl.iX; point.iX<rect.iBr.iX; ++point.iX)
{
for (point.iY=rect.iTl.iY; point.iY<rect.iBr.iY; ++point.iY)
{
TRgb actual;
GetFbsDevice()->GetPixel(actual, point);
if (actual!=expected)
{
ERR_PRINTF5(KLogColor, actual.Red(), actual.Green(), actual.Blue(), actual.Alpha());
ERR_PRINTF5(KLogColor, expected.Red(), expected.Green(), expected.Blue(), expected.Alpha());
ERR_PRINTF3(KLogPoint, point.iX, point.iY);
SetBlockResult(EFail);
}
}
}
}
}
}
delete palette;
}
void CT_DataFbsDevice::DoCmdGetFontByIdL(const TDesC& aSection)
{
TBool dataOk=ETrue;
// get font uid
TInt fontUid;
if( !GetIntFromConfig(aSection, KFldFontUid(), fontUid) )
{
dataOk = EFalse;
ERR_PRINTF2(KLogMissingParameter, &KFldFontUid());
SetBlockResult(EFail);
}
// get algorithmic style
TAlgStyle* algStyle = NULL;
CT_GraphicsUtil::GetAlgStyleL(*this, aSection, KFldAlgStyle(), algStyle);
if (NULL == algStyle)
{
dataOk = EFalse;
ERR_PRINTF2(KLogMissingParameter, &KFldAlgStyle());
SetBlockResult(EFail);
}
TPtrC wrapperName;
if( GetStringFromConfig(aSection, KFldFbsFont, wrapperName) )
{
// "CFbsFont*&" type
if ( dataOk )
{
CFbsFont* fbsFont = NULL;
INFO_PRINTF1(_L("execute GetFontById(CFbsFont *&aFont, TUid aFileId, const TAlgStyle &aAlgStyle)"));
TInt err = GetFbsDevice()->GetFontById(fbsFont, TUid::Uid(fontUid), *algStyle);
if (KErrNone != err)
{
ERR_PRINTF2(KLogError, err);
SetError(err);
}
else
{
SetDataObjectL(wrapperName, fbsFont);
}
}
}
else if( GetStringFromConfig(aSection, KFldFont, wrapperName) )
{
// "CFont*&" type
if( dataOk )
{
CFont* font = NULL;
INFO_PRINTF1(_L("execute GetFontById(CFont *&aFont, TUid aFileId, const TAlgStyle &aAlgStyle)"));
TInt err = GetFbsDevice()->GetFontById(font, TUid::Uid(fontUid), *algStyle);
if (KErrNone != err)
{
ERR_PRINTF2(KLogError, err);
SetError(err);
}
else
{
SetDataObjectL(wrapperName, font);
}
}
}
else
{
ERR_PRINTF2(KLogMissingParameter, &KFldFont());
SetBlockResult(EFail);
}
}
TBool CT_DataFbsDevice::DoCmdGetNearestFontInPixelsL(const TDesC& aSection)
{
TBool dataOk = ETrue;
// get font specification
TFontSpec fontSpec;
if ( !GetFontSpecFromConfig(aSection, KFldFont, fontSpec) )
{
dataOk = EFalse;
ERR_PRINTF2(KLogMissingParameter, &KFldFont());
SetBlockResult(EFail);
}
TPtrC wrapperName;
if ( GetStringFromConfig(aSection, KFldFbsFont, wrapperName) )
{
// "CFbsFont*&" type
if(dataOk)
{
CFbsFont* fbsFont = NULL;
INFO_PRINTF1(_L("execute GetNearestFontInPixels(CFbsFont*&, TFontSpec)"));
TInt err = GetFbsDevice()->GetNearestFontInPixels(fbsFont, fontSpec);
if (KErrNone != err)
{
ERR_PRINTF2(KLogError, err);
SetError(err);
}
else
{
SetDataObjectL(wrapperName, fbsFont);
}
}
}
else if( GetStringFromConfig(aSection, KFldFont, wrapperName) )
{
// "CFont*&" type
// hand over the ownership to parent class
return EFalse;
}
else
{
ERR_PRINTF2(KLogMissingParameter, &KFldFont());
SetBlockResult(EFail);
}
return ETrue;
}
TBool CT_DataFbsDevice::DoCmdGetNearestFontInTwipsL(const TDesC& aSection)
{
TBool dataOk = ETrue;
// get font specification
TFontSpec fontSpec;
if ( !GetFontSpecFromConfig(aSection, KFldFont, fontSpec) )
{
dataOk = EFalse;
ERR_PRINTF2(KLogMissingParameter, &KFldFont());
SetBlockResult(EFail);
}
TPtrC wrapperName;
if ( GetStringFromConfig(aSection, KFldFbsFont, wrapperName) )
{
// "CFbsFont*&" type
if(dataOk)
{
CFbsFont* fbsFont = NULL;
INFO_PRINTF1(_L("execute GetNearestFontInTwips(CFbsFont*&, TFontSpec)"));
TInt err = GetFbsDevice()->GetNearestFontInTwips(fbsFont, fontSpec);
if (KErrNone != err)
{
ERR_PRINTF2(KLogError, err);
SetError(err);
}
else
{
SetDataObjectL(wrapperName, fbsFont);
}
}
}
else if( GetStringFromConfig(aSection, KFldFont, wrapperName) )
{
// "CFont*&" type
// hand over the ownership to parent class
return EFalse;
}
else
{
ERR_PRINTF2(KLogMissingParameter, &KFldFont());
SetBlockResult(EFail);
}
return ETrue;
}
TBool CT_DataFbsDevice::DoCmdGetNearestFontToDesignHeightInPixelsL(const TDesC& aSection)
{
TBool dataOk = ETrue;
// get font specification
TFontSpec fontSpec;
if ( !GetFontSpecFromConfig(aSection, KFldFont, fontSpec) )
{
dataOk = EFalse;
ERR_PRINTF2(KLogMissingParameter, &KFldFont());
SetBlockResult(EFail);
}
TPtrC wrapperName;
if ( GetStringFromConfig(aSection, KFldFbsFont, wrapperName) )
{
// "CFbsFont*&" type
if(dataOk)
{
CFbsFont* fbsFont = NULL;
INFO_PRINTF1(_L("execute DoCmdGetNearestFontToDesignHeightInPixels(CFbsFont*&, TFontSpec)"));
TInt err = GetFbsDevice()->GetNearestFontToDesignHeightInPixels(fbsFont, fontSpec);
if (KErrNone != err)
{
ERR_PRINTF2(KLogError, err);
SetError(err);
}
else
{
SetDataObjectL(wrapperName, fbsFont);
}
}
}
else if( GetStringFromConfig(aSection, KFldFont, wrapperName) )
{
// "CFont*&" type
// hand over the ownership to parent class
return EFalse;
}
else
{
ERR_PRINTF2(KLogMissingParameter, &KFldFont());
SetBlockResult(EFail);
}
return ETrue;
}
TBool CT_DataFbsDevice::DoCmdGetNearestFontToDesignHeightInTwipsL(const TDesC& aSection)
{
TBool dataOk = ETrue;
// get font specification
TFontSpec fontSpec;
if ( !GetFontSpecFromConfig(aSection, KFldFont, fontSpec) )
{
dataOk = EFalse;
ERR_PRINTF2(KLogMissingParameter, &KFldFont());
SetBlockResult(EFail);
}
TPtrC wrapperName;
if ( GetStringFromConfig(aSection, KFldFbsFont, wrapperName) )
{
// "CFbsFont*&" type
if(dataOk)
{
CFbsFont* fbsFont = NULL;
INFO_PRINTF1(_L("execute DoCmdGetNearestFontToDesignHeightInTwips(CFbsFont*&, TFontSpec)"));
TInt err = GetFbsDevice()->GetNearestFontToDesignHeightInTwips(fbsFont, fontSpec);
if (KErrNone != err)
{
ERR_PRINTF2(KLogError, err);
SetError(err);
}
else
{
SetDataObjectL(wrapperName, fbsFont);
}
}
}
else if( GetStringFromConfig(aSection, KFldFont, wrapperName) )
{
// "CFont*&" type
// hand over the ownership to parent class
return EFalse;
}
else
{
ERR_PRINTF2(KLogMissingParameter, &KFldFont());
SetBlockResult(EFail);
}
return ETrue;
}
TBool CT_DataFbsDevice::DoCmdGetNearestFontToMaxHeightInPixelsL(const TDesC& aSection)
{
TBool dataOk = ETrue;
// get font specification
TFontSpec fontSpec;
if ( !GetFontSpecFromConfig(aSection, KFldFont, fontSpec) )
{
dataOk = EFalse;
ERR_PRINTF2(KLogMissingParameter, &KFldFont());
SetBlockResult(EFail);
}
// get maximum height in pixels
TInt maxHeight;
if ( !GetIntFromConfig(aSection, KFldMaxHeight, maxHeight) )
{
dataOk = EFalse;
ERR_PRINTF2(KLogMissingParameter, &KFldMaxHeight());
SetBlockResult(EFail);
}
TPtrC wrapperName;
if ( GetStringFromConfig(aSection, KFldFbsFont, wrapperName) )
{
// "CFbsFont*&" type
if(dataOk)
{
CFbsFont* fbsFont = NULL;
INFO_PRINTF1(_L("execute DoCmdGetNearestFontToMaxHeightInPixels(CFbsFont*&, TFontSpec)"));
TInt err = GetFbsDevice()->GetNearestFontToMaxHeightInPixels(fbsFont, fontSpec, maxHeight);
if (KErrNone != err)
{
ERR_PRINTF2(KLogError, err);
SetError(err);
}
else
{
SetDataObjectL(wrapperName, fbsFont);
}
}
}
else if( GetStringFromConfig(aSection, KFldFont, wrapperName) )
{
// "CFont*&" type
// hand over the ownership to parent class
return EFalse;
}
else
{
ERR_PRINTF2(KLogMissingParameter, &KFldFont());
SetBlockResult(EFail);
}
return ETrue;
}
TBool CT_DataFbsDevice::DoCmdGetNearestFontToMaxHeightInTwipsL(const TDesC& aSection)
{
TBool dataOk = ETrue;
// get font specification
TFontSpec fontSpec;
if ( !GetFontSpecFromConfig(aSection, KFldFont, fontSpec) )
{
dataOk = EFalse;
ERR_PRINTF2(KLogMissingParameter, &KFldFont());
SetBlockResult(EFail);
}
// get maximum height in twips
TInt maxHeight;
if ( !GetIntFromConfig(aSection, KFldMaxHeight, maxHeight) )
{
dataOk = EFalse;
ERR_PRINTF2(KLogMissingParameter, &KFldMaxHeight());
SetBlockResult(EFail);
}
TPtrC wrapperName;
if ( GetStringFromConfig(aSection, KFldFbsFont, wrapperName) )
{
// "CFbsFont*&" type
if(dataOk)
{
CFbsFont* fbsFont = NULL;
INFO_PRINTF1(_L("execute DoCmdGetNearestFontToMaxHeightInTwips(CFbsFont*&, TFontSpec)"));
TInt err = GetFbsDevice()->GetNearestFontToMaxHeightInTwips(fbsFont, fontSpec, maxHeight);
if (KErrNone != err)
{
ERR_PRINTF2(KLogError, err);
SetError(err);
}
else
{
SetDataObjectL(wrapperName, fbsFont);
}
}
}
else if( GetStringFromConfig(aSection, KFldFont, wrapperName) )
{
// "CFont*&" type
// hand over the ownership to parent class
return EFalse;
}
else
{
ERR_PRINTF2(KLogMissingParameter, &KFldFont());
SetBlockResult(EFail);
}
return ETrue;
}
TBool CT_DataFbsDevice::DoCmdCreateContextL(const TDesC& aSection)
{
TPtrC wrapperName;
if (!GetStringFromConfig(aSection, KFldBitGc, wrapperName))
{
return EFalse;
}
else
{
CDataWrapper* wrapper = GetDataWrapperL(wrapperName);
if (wrapper == NULL)
{
ERR_PRINTF2(KLogMissingWrapper, &wrapperName);
SetBlockResult(EFail);
}
else
{
CFbsBitGc* context = NULL;
INFO_PRINTF1(_L("execute CreateContext(CFbsBitGc*&)"));
TInt err = GetFbsDevice()->CreateContext(context);
if (err != KErrNone)
{
ERR_PRINTF2(KLogError, err);
SetError(err);
}
else
{
wrapper->SetObjectL(context);
}
}
return ETrue;
}
}
void CT_DataFbsDevice::DoCmdRectCompareL(const TDesC& aSection)
{
TBool dataOk = ETrue;
// Get test data for command input parameter(s)
TRect datRect1;
if ( !GetRectFromConfig(aSection, KFldRect1, datRect1) )
{
dataOk = EFalse;
ERR_PRINTF2(KLogMissingParameter, &KFldRect1);
SetBlockResult(EFail);
}
TRect datRect2;
if ( !GetRectFromConfig(aSection, KFldRect2, datRect2) )
{
dataOk = EFalse;
ERR_PRINTF2(KLogMissingParameter, &KFldRect2);
SetBlockResult(EFail);
}
TBool expected;
if ( !GetBoolFromConfig(aSection, KFldExpected, expected) )
{
dataOk = EFalse;
ERR_PRINTF2(KLogMissingParameter, &KFldExpected);
SetBlockResult(EFail);
}
if (dataOk)
{
TBool actual;
CFbsDevice* device = NULL;
CFbsDevice* self = GetFbsDevice();
if (!CT_GraphicsUtil::GetFbsDeviceL(*this, aSection, KFldFbsDevice, device) )
{
device = self;
}
actual = self->RectCompare(datRect1, *device, datRect2);
INFO_PRINTF2(_L("execute RectCompare(const TRect&, const CFbsDevice&, const TRect&)=%d"), actual);
if (actual != expected)
{
ERR_PRINTF1(KLogNotExpectedValue);
SetBlockResult(EFail);
}
}
}
void CT_DataFbsDevice::DoCmdSetCustomPaletteL(const TDesC& aSection)
{
CPalette* palette= NULL;
if ( !CT_GraphicsUtil::GetPaletteL(*this, aSection, KFldPalette(), palette) )
{
INFO_PRINTF1(_L("execute SetCustomPalette(NULL)"));
}
else
{
INFO_PRINTF1(_L("execute SetCustomPalette(const CPalette*)"));
}
TInt err = GetFbsDevice()->SetCustomPalette(palette);
if (err != KErrNone)
{
ERR_PRINTF2(KLogError, err);
SetError(err);
}
}
void CT_DataFbsDevice::DoCmdGraphicsAccelerator()
{
CGraphicsAccelerator* ga= NULL;
INFO_PRINTF1(_L("execute GraphicsAccelerator()"));
ga = GetFbsDevice()->GraphicsAccelerator();
if (ga != NULL)
{
INFO_PRINTF1(_L("GraphicsAccelerator Supported"));
}
else
{
INFO_PRINTF1(_L("GraphicsAccelerator Not Supported"));
}
}
void CT_DataFbsDevice::DoCmdOrientation(const TDesC& aSection)
{
CFbsBitGc::TGraphicsOrientation actual = GetFbsDevice()->Orientation();
INFO_PRINTF2(_L("execute Orientation()=%d"), actual);
CFbsBitGc::TGraphicsOrientation expected;
if (!CT_GraphicsUtil::GetGraphicsOrientation(*this, aSection, KFldExpectedOrientation, expected))
{
ERR_PRINTF2(KLogMissingParameter, &KFldExpectedOrientation);
SetBlockResult(EFail);
}
else
{
if (actual != expected)
{
ERR_PRINTF1(KLogNotExpectedValue);
SetBlockResult(EFail);
}
}
}
void CT_DataFbsDevice::DoCmdDisplayMode16M(const TDesC& aSection)
{
TDisplayMode actual = GetFbsDevice()->DisplayMode16M();
INFO_PRINTF2(_L("execute DisplayMode16M()=%d"), actual);
// get display mode from parameters
TDisplayMode expected;
if (CT_GraphicsUtil::ReadDisplayMode(*this, aSection, KFldExpectedDisplayMode(), expected) )
{
if (actual != expected)
{
ERR_PRINTF1(KLogNotExpectedValue);
SetBlockResult(EFail);
}
}
}
void CT_DataFbsDevice::DoCmdSetScalingFactor(const TDesC& aSection)
{
TBool dataOk = ETrue;
TPoint point;
if ( !GetPointFromConfig(aSection, KFldOrigin, point) )
{
dataOk = EFalse;
ERR_PRINTF2(KLogMissingParameter, &KFldOrigin);
SetBlockResult(EFail);
}
TInt factorX;
if ( !GetIntFromConfig(aSection, KFldFactorX, factorX) )
{
dataOk = EFalse;
ERR_PRINTF2(KLogMissingParameter, &KFldFactorX);
SetBlockResult(EFail);
}
TInt factorY;
if ( !GetIntFromConfig(aSection, KFldFactorY, factorY) )
{
dataOk = EFalse;
ERR_PRINTF2(KLogMissingParameter, &KFldFactorY);
SetBlockResult(EFail);
}
TInt divisorX;
if ( !GetIntFromConfig(aSection, KFldDivisorX, divisorX) )
{
dataOk = EFalse;
ERR_PRINTF2(KLogMissingParameter, &KFldDivisorX);
SetBlockResult(EFail);
}
TInt divisorY;
if ( !GetIntFromConfig(aSection, KFldDivisorY, divisorY) )
{
dataOk = EFalse;
ERR_PRINTF2(KLogMissingParameter, &KFldDivisorY);
SetBlockResult(EFail);
}
if (dataOk)
{
INFO_PRINTF1(_L("execute SetScalingFactor(const TPoint&, TInt, TInt, TInt, TInt)"));
TInt err = GetFbsDevice()->SetScalingFactor(point, factorX, factorY, divisorX, divisorY);
if (err != KErrNone)
{
ERR_PRINTF2(KLogError, err);
SetError(err);
}
}
}
void CT_DataFbsDevice::DoCmdGetDrawRect(const TDesC& aSection)
{
TRect actual;
INFO_PRINTF1(_L("execute GetDrawRect(TRect&)"));
GetFbsDevice()->GetDrawRect(actual);
INFO_PRINTF5(_L("DrawRect = (top.x=%d, top.y=%d, bottom.x=%d, bottom.y=%d)"), actual.iTl.iX, actual.iTl.iY, actual.iBr.iX, actual.iBr.iY);
TRect expected;
if ( GetRectFromConfig(aSection, KFldExpectedDrawRect, expected) )
{
if (actual != expected)
{
ERR_PRINTF1(KLogNotExpectedValue);
SetBlockResult(EFail);
}
}
}
void CT_DataFbsDevice::DoCmdRegisterLinkedTypefaceL(const TDesC& aSection)
{
CLinkedTypefaceSpecification* spec = NULL;
if (!CT_GraphicsUtil::GetLinkedTypefaceSpecificationL(*this, aSection, KFldLinkedTypefaceSpec, spec))
{
ERR_PRINTF2(KLogMissingParameter, &KFldLinkedTypefaceSpec);
SetBlockResult(EFail);
}
else
{
TInt actual;
INFO_PRINTF1(_L("execute RegisterLinkedTypeface(const CLinkedTypefaceSpecification&, TInt&)"));
TInt err = GetFbsDevice()->RegisterLinkedTypeface(*spec, actual);
if (err != KErrNone)
{
ERR_PRINTF2(KLogError, err);
SetError(err);
return;
}
TInt expected;
if (GetIntFromConfig(aSection, KFldExpectedUid, expected))
{
if (actual != expected)
{
ERR_PRINTF1(KLogNotExpectedValue);
SetBlockResult(EFail);
}
}
}
}
void CT_DataFbsDevice::DoCmdSetDrawDeviceOffset(const TDesC& aSection)
{
TPoint point;
if ( !GetPointFromConfig(aSection, KFldOffset, point) )
{
ERR_PRINTF2(KLogMissingParameter, &KFldOrigin);
SetBlockResult(EFail);
}
else
{
TInt err = GetFbsDevice()->SetDrawDeviceOffset(point);
if (err != KErrNone)
{
ERR_PRINTF2(KLogError, err);
SetError(err);
}
}
}