--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/common/tools/ats/smoketest/graphics/bitgdi/src/T_DataFbsDevice.cpp Fri Dec 18 14:46:04 2009 +0000
@@ -0,0 +1,1058 @@
+//
+// 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_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(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
+ {
+ 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);
+ }
+ }
+ }
+ }
+