s4 should be locksurface2 according to JM's spreadsheet, and the spec indicates 2 is a clarification of 1, so we can't offer both
// Copyright (c) 2004-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:
//
#include <e32math.h>
#include <hal.h>
#include <bitdraw.h>
#include <bitdrawscaling.h>
#include <bitdraworigin.h>
#include <bitdrawinterfaceid.h>
#include <graphics/gdi/gdiconsts.h>
#include "TScdvScaling.h"
//Test line properties:
//[iX, iY] - the starting point of the line
//iLength - line length
struct TLineProps
{
TInt iX;
TInt iY;
TInt iLength;
};
//
//Constants
//
//This structure defines [TDrawMode <-> clear screen color value] relation
//When the test uses KDrawMode[i].iDrawMode, then the screen will be cleared using
//KDrawMode[i].iClearColorVal value
struct TDrawModeProps
{
CGraphicsContext::TDrawMode iDrawMode;
// keep the color value 8-bit in both EColor256 and EColor64K, special care need
// to be done when filling the buffer, e.g color=0x55
// in EColor256 clearing means filling 0x55 0x55 0x55 etc, but
// in EColor64K it has to be 0x0055 0x0055 0x0055 etc
TUint8 iClearColorVal;
};
const TDrawModeProps KDrawMode[] =
{
{CGraphicsContext::EDrawModePEN, 0xFF},
{CGraphicsContext::EDrawModeAND, 0x37},
{CGraphicsContext::EDrawModeXOR, 0x38},
{CGraphicsContext::EDrawModeOR, 0xB1},
{CGraphicsContext::EDrawModeNOTSCREEN, 0xC0},
{CGraphicsContext::EDrawModeNOTPEN, 0x1D}
};
const TInt KDrawModesCnt = sizeof(KDrawMode) / sizeof(KDrawMode[0]);
//Shadow/Fade modes
const CFbsDrawDevice::TShadowMode KShadowMode[] =
{
CFbsDrawDevice::EShadow,
CFbsDrawDevice::EFade,
CFbsDrawDevice::EShadowFade
};
const TInt KShadowModesCnt = sizeof(KShadowMode) / sizeof(KShadowMode[0]);
//Test pixel color value
const TUint8 KTestColorVal = 0x55;
//All possible orientations
const CFbsDrawDevice::TOrientation KOrientation[] =
{
CFbsDrawDevice::EOrientationNormal,
CFbsDrawDevice::EOrientationRotated90,
CFbsDrawDevice::EOrientationRotated180,
CFbsDrawDevice::EOrientationRotated270
};
const TInt KOrientationsCnt = sizeof(KOrientation) / sizeof(KOrientation[0]);
//Width and Height of legacy application screen
const TInt KLegacyAppSizeWidth = 60;
const TInt KLegacyAppSizeHeight = 40;
//Scaling factors: X and Y
const TInt KScalingFactorX = 3;
const TInt KScalingFactorY = 2;
const TInt KMaxScalingFactor = 3; //Max of previous 2 values
//
//Declarations
//
GLDEF_C TInt ByteSize(TDisplayMode aDisplayMode,TInt aWidth)
{
TInt wordSize=aWidth;
switch(aDisplayMode)
{
case EGray2:
wordSize = (wordSize + 31) / 32;
break;
case EGray4:
wordSize = (wordSize + 15) / 16;
break;
case EGray16:
case EColor16:
wordSize = (wordSize + 7) / 8;
break;
case EGray256:
case EColor256:
wordSize = (wordSize + 3) / 4;
break;
case EColor4K:
case EColor64K:
wordSize = (wordSize + 1) / 2;
break;
case EColor16M:
wordSize = ((wordSize + 3) / 4) * 3;
break;
case EColor16MU:
case EColor16MA:
//Doesn't need changing
break;
default:
break;
};
return wordSize * 4;
}
static inline TInt ByteSize(TDisplayMode aDisplayMode, TSize aSize)
{
return ByteSize(aDisplayMode,aSize.iWidth) * aSize.iHeight;
}
template <class TPixelType>
inline void MemFill(TPixelType* aBuffer, TInt aSize, TPixelType aValue)
{
TPixelType* p = aBuffer;
TInt i = 0;
while (i++<aSize)
*p++ = aValue;
}
//Generic test class for both Color256 and Color64K
template <class TPixelType> class CTScaling: public CTGraphicsBase
{
public:
CTScaling(CTestStep *aTest, TDisplayMode aDisplayMode);
~CTScaling();
void RunTestCaseL(TInt aCurTestCase);
private:
void ConstructL();
void CreateScreenDeviceL();
void SetScalingSettings(const TPoint& aOrigin, TInt aFx, TInt aFy, TInt aDivX, TInt aDivY);
void CheckLine(const TLineProps& aLineProps, const TPoint& aOrg, const TDrawModeProps& aDrawModeProps, TPixelType aClearColorValue);
void CheckWriteRgbMulti(const TRect& aRcProps, const TPoint& aOrg, const TDrawModeProps& aDrawModeProps, TPixelType aClearColorValue);
void CheckRgbAlphaLine(const TLineProps& aLineProps, const TPoint& aOrg, TPixelType aClearColorValue);
void CheckRect(const TRect& aRc, const TPoint& aOrg, TPixelType aClearColorValue);
void WriteLine();
void ClearScreen(const TDrawModeProps& aDrawModeProps);
void SetTestData();
void CheckChangedPixels(TInt aChangedPixelsCnt, TPixelType aClearColorVal);
void CheckWriteBinary(const TPoint& aPt, const TPoint& aOrg, TPixelType aClearColorValue, TInt aLength, TInt aHeight);
void CheckVertLine(const TLineProps& aLineProps, const TPoint& aOrg, TPixelType aClearColorValue);
void WriteRgb();
void WriteRgbMulti();
void WriteRgbAlphaLine();
void WriteBinary();
void WriteBinaryLineVertical();
void WriteBinaryLine();
void WriteRgbAlphaMulti();
void ShadowArea();
void WriteRgbAlphaLine2();
void TestScalingSettingsInterface();
void PerformanceTest();
private:
//Test data array
TPixelType iTestData[KLegacyAppSizeWidth];
//The device used in the tests
CFbsDrawDevice* iDrawDevice;
//Width and Height of the screen
TSize iPhysSize;
//The test allocates block of memory for a screen with PhysSize size
//mode. iBits will point to the allocated memory block.
TPixelType* iBits;
TDisplayMode iDisplayMode;
//The scaling interface
MScalingSettings* iScalingSettings;
//The origin interface
MDrawDeviceOrigin* iOriginInterface;
TInt iCurOrientation;
TInt iScalingFactorX;
TInt iScalingFactorY;
};
typedef CTScaling<TUint8> CTestNone;
typedef CTScaling<TUint8> CTestColor256;
typedef CTScaling<TUint16> CTestColor64K;
//
//Test code
//
/*template <class TPixelType>
CTScaling<TPixelType>* CTScaling<TPixelType>::NewL(TDisplayMode aDisplayMode)
{
CTScaling<TPixelType>* self = new (ELeave) CTScaling<TPixelType>;
CleanupStack::PushL(self);
self->ConstructL(aDisplayMode);
CleanupStack::Pop(self);
return self;
}
*/
template <class TPixelType>
CTScaling<TPixelType>::CTScaling(CTestStep *aTest, TDisplayMode aDisplayMode) :
CTGraphicsBase(aTest),
iDisplayMode(aDisplayMode)
{
INFO_PRINTF1(_L("Scaling tests"));
}
template <class TPixelType>
void CTScaling<TPixelType>::ConstructL()
{
CreateScreenDeviceL();
}
template <class TPixelType>
CTScaling<TPixelType>::~CTScaling()
{
((CTScalingStep*)iStep)->CloseTMSGraphicsStep();
delete[] iBits;
delete iDrawDevice;
}
template <class TPixelType>
void CTScaling<TPixelType>::SetScalingSettings(const TPoint& aOrigin, TInt aFx, TInt aFy, TInt aDivX, TInt aDivY)
{
TEST(iDrawDevice != NULL);
if(!iScalingSettings)
{
TInt err = iDrawDevice->GetInterface(KScalingSettingsInterfaceID,
reinterpret_cast <TAny*&> (iScalingSettings));
TEST2(err, KErrNone);
}
TEST(iScalingSettings != NULL);
TInt err = iScalingSettings->Set(aFx, aFy, aDivX, aDivY);
TEST2(err, KErrNone);
if(!iOriginInterface)
{
TInt err = iDrawDevice->GetInterface(KDrawDeviceOriginInterfaceID,
reinterpret_cast <TAny*&> (iOriginInterface));
TEST2(err, KErrNone);
}
TEST(iOriginInterface != NULL);
err = iOriginInterface->Set(aOrigin);
TEST2(err, KErrNone);
}
//Clears the screen initializing each screen pixel with aDrawModeProps.iClearColorVal value
template <class TPixelType>
void CTScaling<TPixelType>::ClearScreen(const TDrawModeProps& aDrawModeProps)
{
::MemFill(iBits, ::ByteSize(EColor256, iPhysSize), TPixelType(aDrawModeProps.iClearColorVal));
}
//Initializes iTestData array with KTestColorVal value
template <class TPixelType>
void CTScaling<TPixelType>::SetTestData()
{
::MemFill(iTestData, KLegacyAppSizeWidth, TPixelType(KTestColorVal));
}
template <class TPixelType>
void CTScaling<TPixelType>::CheckChangedPixels(TInt aChangedPixelsCnt, TPixelType aClearColorVal)
{
const TInt KByteSize = ::ByteSize(EColor256, iPhysSize);
TInt changedPixelsCnt = 0;
for(TInt ii=0;ii<KByteSize;++ii)
{
if(iBits[ii]!=aClearColorVal)
{
++changedPixelsCnt;
}
}
TEST(changedPixelsCnt == aChangedPixelsCnt);
if (changedPixelsCnt!=aChangedPixelsCnt)
{
_LIT(KLog,"Wrong number of changed pixels, expected=%d, actual=%d, color=0x%x");
INFO_PRINTF4(KLog,aChangedPixelsCnt,changedPixelsCnt,aClearColorVal);
}
}
//Checks a set of horisontal lines , which starting point is
//[aOrg.iX + aLineProps.iX * iScalingFactorX, aOrg.iY + aLineProps.iY * iScalingFactorY]
//and length is aLineProps.iLength * iScalingFactorX. For each nexh line y-coordinate
//is incremented by 1.
//The screen lines pixel values are tested against aClearColorValue value.
//Then the screen is testsed pixel by pixel that nothing is written outside the tested lines.
template <class TPixelType>
void CTScaling<TPixelType>::CheckLine(const TLineProps& aLineProps,
const TPoint& aOrg,
const TDrawModeProps& aDrawModeProps,
TPixelType aClearColorValue)
{
TPixelType data[KLegacyAppSizeWidth * KMaxScalingFactor];
TInt ii;
for(ii=0;ii<iScalingFactorY;++ii)
{
Mem::Fill(data, sizeof(data), 0x00);
iDrawDevice->ReadLine(aOrg.iX + aLineProps.iX * iScalingFactorX,
aOrg.iY + aLineProps.iY * iScalingFactorY + ii,
aLineProps.iLength * iScalingFactorX,
data,
iDisplayMode);
const TInt length=aLineProps.iLength*iScalingFactorX;
TInt firstErr=length;
TInt numErrs=0;
for(TInt jj=0;jj<length;++jj)
{
//TEST(data[jj]!=aClearColorValue);
if (data[jj]==aClearColorValue)
{
++numErrs;
if (jj<firstErr)
firstErr=jj;
}
}
TEST(numErrs==0);
if (numErrs>0)
{
_LIT(KLog,"Line %d (of %d) of length %d has %d errors first one at %d, ClearCol=0x%x");
INFO_PRINTF7(KLog,ii,iScalingFactorY,length,numErrs,firstErr,aClearColorValue);
}
}
TInt changedPixelsCnt = iScalingFactorY * aLineProps.iLength * iScalingFactorX;
CheckChangedPixels(changedPixelsCnt, aDrawModeProps.iClearColorVal);
}
//Checks the rectangle filled using CFbsScreenDevice::WriteRgbMulti.
//The screen lines pixel values are tested against aClearColorValue value.
//Then the screen is testsed pixel by pixel that nothing is written outside the tested rectangle.
template <class TPixelType>
void CTScaling<TPixelType>::CheckWriteRgbMulti(const TRect& aRcProps,
const TPoint& aOrg,
const TDrawModeProps& aDrawModeProps,
TPixelType aClearColorValue)
{
TPixelType data[KLegacyAppSizeWidth * KMaxScalingFactor];
TInt ii;
TInt xx = aOrg.iX + aRcProps.iTl.iX * iScalingFactorX;
TInt yy = aOrg.iY + aRcProps.iTl.iY * iScalingFactorY;
for(ii=0;ii<(iScalingFactorY * aRcProps.Height());++ii)
{
Mem::Fill(data, sizeof(data), 0x00);
iDrawDevice->ReadLine(xx, yy+ii, aRcProps.Width()*iScalingFactorX, data, iDisplayMode);
const TInt width=aRcProps.Width()*iScalingFactorX;
TInt firstErr=width;
TInt numErrs=0;
for(TInt jj=0;jj<width;++jj)
{
//TEST(data[jj]!=aClearColorValue);
if (data[jj]==aClearColorValue)
{
++numErrs;
if (jj<firstErr)
firstErr=jj;
}
}
TEST(numErrs==0);
if (numErrs>0)
{
_LIT(KLog,"Line %d of width %d has %d errors first one at %d, ClearCol=0x%x");
INFO_PRINTF6(KLog,ii,width,numErrs,firstErr,aClearColorValue);
}
}
TInt changedPixelsCnt = iScalingFactorY * aRcProps.Width() * aRcProps.Height() * iScalingFactorX;
CheckChangedPixels(changedPixelsCnt, aDrawModeProps.iClearColorVal);
}
//Checks a set of horisontal lines , which starting point is
//[aOrg.iX + aLineProps.iX * iScalingFactorX, aOrg.iY + aLineProps.iY * iScalingFactorY]
//and length is aLineProps.iLength * iScalingFactorX. For each nexh line y-coordinate
//is incremented by 1.
//The screen lines pixel values are tested against aClearColorValue value.
//Then the screen is testsed pixel by pixel that nothing is written outside the tested lines.
template <class TPixelType>
void CTScaling<TPixelType>::CheckRgbAlphaLine(const TLineProps& aLineProps,
const TPoint& aOrg,
TPixelType aClearColorValue)
{
TPixelType data[KLegacyAppSizeWidth * KMaxScalingFactor];
for(TInt ii=0;ii<iScalingFactorY;++ii)
{
Mem::Fill(data, sizeof(data), 0x00);
iDrawDevice->ReadLine(aOrg.iX + aLineProps.iX * iScalingFactorX,
aOrg.iY + aLineProps.iY * iScalingFactorY + ii,
aLineProps.iLength * iScalingFactorX,
data,
iDisplayMode);
const TInt length=aLineProps.iLength*iScalingFactorX;
TInt firstErr=length;
TInt numErrs=0;
for(TInt jj=0;jj<(aLineProps.iLength * iScalingFactorX);++jj)
{
//TEST(data[jj]!=aClearColorValue);
if (data[jj]==aClearColorValue)
{
++numErrs;
if (jj<firstErr)
firstErr=jj;
}
}
TEST(numErrs==0);
if (numErrs>0)
{
_LIT(KLog,"Line %d of length %d has %d errors first one at %d, ClearCol=0x%x");
INFO_PRINTF6(KLog,ii,length,numErrs,firstErr,aClearColorValue);
}
}
TInt changedPixelsCnt = iScalingFactorY * aLineProps.iLength * iScalingFactorX;
CheckChangedPixels(changedPixelsCnt, aClearColorValue);
}
//Checks the rectangle filled using CFbsScreenDevice::WriteBinary.
//The screen lines pixel values are tested against aClearColorValue value.
//Then the screen is testsed pixel by pixel that nothing is written outside the tested rectangle.
template <class TPixelType>
void CTScaling<TPixelType>::CheckWriteBinary(const TPoint& aPt,
const TPoint& aOrg,
TPixelType aClearColorValue,
TInt aLength, TInt aHeight)
{
TPixelType data[KLegacyAppSizeWidth * KMaxScalingFactor];
TInt ii;
TInt xx = aOrg.iX + aPt.iX * iScalingFactorX;
TInt yy = aOrg.iY + aPt.iY * iScalingFactorY;
for(ii=0;ii<(iScalingFactorY * aHeight);++ii)
{
Mem::Fill(data, sizeof(data), 0x00);
iDrawDevice->ReadLine(xx, yy + ii, aLength * iScalingFactorX, data, iDisplayMode);
const TInt length=aLength*iScalingFactorX;
TInt firstErr=length;
TInt numErrs=0;
for(TInt jj=0;jj<length;++jj)
{
//TEST(data[jj] != aClearColorValue);
if (data[jj]==aClearColorValue)
{
++numErrs;
if (jj<firstErr)
firstErr=jj;
}
}
TEST(numErrs==0);
if (numErrs>0)
{
_LIT(KLog,"Line %d of length %d has %d errors first one at %d, ClearCol=0x%x");
INFO_PRINTF6(KLog,ii,length,numErrs,firstErr,aClearColorValue);
}
}
TInt changedPixelsCnt = iScalingFactorY * aLength * aHeight * iScalingFactorX;
CheckChangedPixels(changedPixelsCnt, aClearColorValue);
}
//Checks a set of vertical lines , which starting point is
//[aOrg.iX + aLineProps.iX * iScalingFactorX, aOrg.iY + aLineProps.iY * iScalingFactorY]
//and length is aLineProps.iLength * iScalingFactorX. For each nexh line y-coordinate
//is incremented by 1.
//The screen lines pixel values are tested against aClearColorValue value.
//Then the screen is testsed pixel by pixel that nothing is written outside the tested lines.
template <class TPixelType>
void CTScaling<TPixelType>::CheckVertLine(const TLineProps& aLineProps, const TPoint& aOrg, TPixelType aClearColorValue)
{
TInt x = aOrg.iX + aLineProps.iX * iScalingFactorX;
TInt y = aOrg.iY + aLineProps.iY * iScalingFactorY;
for(TInt i=0;i<iScalingFactorX;++i)
{
for(TInt j=0;j<(aLineProps.iLength * iScalingFactorY);++j)
{
TRgb val = iDrawDevice->ReadPixel(x + i, y + j);
switch (iDisplayMode)
{
case EColor64K:
TEST(val.Color64K() != aClearColorValue);
break;
case EColor256:
TEST(val.Color256() != aClearColorValue);
break;
default:
TEST(EFalse);
}
}
}
TInt changedPixelsCnt = iScalingFactorX * aLineProps.iLength * iScalingFactorY;
CheckChangedPixels(changedPixelsCnt, aClearColorValue);
}
//Checks the rectangle filled using CFbsScreenDevice::ShadowArea
//The screen lines pixel values are tested against aClearColorValue value.
//Then the screen is testsed pixel by pixel that nothing is written outside the tested rectangle.
template <class TPixelType>
void CTScaling<TPixelType>::CheckRect(const TRect& aRc, const TPoint& aOrg, TPixelType aClearColorValue)
{
TPixelType data[KLegacyAppSizeWidth * KMaxScalingFactor];
TInt i;
TInt x = aOrg.iX + aRc.iTl.iX * iScalingFactorX;
TInt y = aOrg.iY + aRc.iTl.iY * iScalingFactorY;
for(i=0;i<(iScalingFactorY * aRc.Height());++i)
{
Mem::Fill(data, sizeof(data), 0x00);
iDrawDevice->ReadLine(x, y + i, aRc.Width() * iScalingFactorX, data, iDisplayMode);
for(TInt j=0;j<(aRc.Width() * iScalingFactorX);++j)
{
TEST(data[j] != aClearColorValue);
}
}
TInt changedPixelsCnt = iScalingFactorY * aRc.Width() * aRc.Height() * iScalingFactorX;
CheckChangedPixels(changedPixelsCnt, aClearColorValue);
}
//CFbsScreenDevice::WriteLine() and CFbsScreenDevice::ReadLine() test.
//(Set of test lines) X (Set of origins) X (Set of drawing modes) number of test cases.
template <class TPixelType>
void CTScaling<TPixelType>::WriteLine()
{
INFO_PRINTF1(_L("CFbsDrawDevice::WriteLine"));
TLineProps lineProps[] =
{
{0, 0, KLegacyAppSizeWidth - 1},
{0, KLegacyAppSizeHeight - 1, KLegacyAppSizeWidth - 1},
{10, 20, KLegacyAppSizeWidth / 2},
{-2, -5, 20},
{-3, 1, 21},
{2, -2, 11},
{0, -4, 31},
{-1, 11, 11}
};
const TInt KLinesCnt = sizeof(lineProps) / sizeof(lineProps[0]);
TPoint ptOrg[] =
{
TPoint(13, 21),
TPoint(10, 17)
};
const TInt KOriginsCnt = sizeof(ptOrg) / sizeof(ptOrg[0]);
for(TInt ll=0;ll<KOriginsCnt;++ll)
{
for(TInt line=0;line<KLinesCnt;++line)
{
for(TInt kk=0;kk<KDrawModesCnt;++kk)
{
ClearScreen(KDrawMode[kk]);
SetTestData();
SetScalingSettings(ptOrg[ll], KScalingFactorX, KScalingFactorY, 1, 1);
iDrawDevice->WriteLine(lineProps[line].iX, lineProps[line].iY,
lineProps[line].iLength,
reinterpret_cast <TUint32*> (iTestData),
KDrawMode[kk].iDrawMode);
if(KDrawMode[kk].iDrawMode == CGraphicsContext::EDrawModePEN)
{
TPixelType writtenData[KLegacyAppSizeWidth];
Mem::FillZ(writtenData, sizeof(writtenData));
iDrawDevice->ReadLine(lineProps[line].iX, lineProps[line].iY,
lineProps[line].iLength,
writtenData, iDisplayMode);
for(TInt ii=0;ii<lineProps[line].iLength;++ii)
{
TEST(writtenData[ii] == iTestData[ii]);
}
}
SetScalingSettings(TPoint(), 1, 1, 1, 1);
CheckLine(lineProps[line], ptOrg[ll], KDrawMode[kk], KDrawMode[kk].iClearColorVal);
}
}
}
}
//CFbsScreenDevice::WriteRgb() and CFbsScreenDevice::ReadPixel() test.
//(Set of test points) X (Set of origins) X (Set of drawing modes) number of test cases.
template <class TPixelType>
void CTScaling<TPixelType>::WriteRgb()
{
INFO_PRINTF1(_L("CFbsDrawDevice::WriteRgb"));
TPoint pt[] =
{
TPoint(0, 0),
TPoint(KLegacyAppSizeWidth - 1, 0),
TPoint(0, KLegacyAppSizeHeight - 1),
TPoint(KLegacyAppSizeWidth - 1, KLegacyAppSizeHeight - 1),
TPoint(KLegacyAppSizeWidth / 2, KLegacyAppSizeHeight / 2),
TPoint(-2, -3),
TPoint(0, -1),
TPoint(-3, 0)
};
const TInt KPointsCnt = sizeof(pt) / sizeof(pt[0]);
TPoint ptOrg[] =
{
TPoint(9, 22),
TPoint(17, 11)
};
const TInt KOriginsCnt = sizeof(ptOrg) / sizeof(ptOrg[0]);
for(TInt l=0;l<KOriginsCnt;++l)
{
for(TInt i=0;i<KPointsCnt;++i)
{
for(TInt k=0;k<KDrawModesCnt;++k)
{
ClearScreen(KDrawMode[k]);
SetScalingSettings(ptOrg[l], KScalingFactorX, KScalingFactorY, 1, 1);
TRgb val(KTestColorVal);
iDrawDevice->WriteRgb(pt[i].iX, pt[i].iY, val, KDrawMode[k].iDrawMode);
if(KDrawMode[k].iDrawMode == CGraphicsContext::EDrawModePEN)
{
TRgb writtenVal = iDrawDevice->ReadPixel(pt[i].iX, pt[i].iY);
switch (iDisplayMode)
{
case EColor64K:
TEST(writtenVal == TRgb::Color64K(val.Color64K()));
break;
case EColor256:
TEST(writtenVal == val);
break;
default:
TEST(EFalse);
}
}
SetScalingSettings(TPoint(0, 0), 1, 1, 1, 1);
TLineProps props;
props.iX = pt[i].iX;
props.iY = pt[i].iY;
props.iLength = 1;
CheckLine(props, ptOrg[l], KDrawMode[k], KDrawMode[k].iClearColorVal);
}
}
}
}
//CFbsScreenDevice::WriteRgbMulti() test.
template <class TPixelType>
void CTScaling<TPixelType>::WriteRgbMulti()
{
INFO_PRINTF1(_L("CFbsDrawDevice::WriteRgbMulti"));
TRect rcProps[] =
{
TRect(TPoint(0, 0), TSize(KLegacyAppSizeWidth - 1, KLegacyAppSizeHeight - 1)),
TRect(TPoint(17, 11), TSize(KLegacyAppSizeWidth / 2, KLegacyAppSizeHeight / 2)),
TRect(TPoint(-1, -4), TSize(31, 12)),
TRect(TPoint(-3, -1), TSize(11, 11)),
TRect(TPoint(0, -2), TSize(6, 17))
};
const TInt KRcCnt = sizeof(rcProps) / sizeof(rcProps[0]);
TPoint ptOrg[] =
{
TPoint(21, 29),
TPoint(12, 14)
};
const TInt KOriginsCnt = sizeof(ptOrg) / sizeof(ptOrg[0]);
for(TInt l=0;l<KOriginsCnt;++l)
{
for(TInt i=0;i<KRcCnt;++i)
{
for(TInt k=0;k<KDrawModesCnt;++k)
{
ClearScreen(KDrawMode[k]);
SetTestData();
SetScalingSettings(ptOrg[l], KScalingFactorX, KScalingFactorY, 1, 1);
TRgb val(KTestColorVal);
iDrawDevice->WriteRgbMulti(rcProps[i].iTl.iX, rcProps[i].iTl.iY,
rcProps[i].Width(), rcProps[i].Height(),
val,
KDrawMode[k].iDrawMode);
SetScalingSettings(TPoint(0, 0), 1, 1, 1, 1);
CheckWriteRgbMulti(rcProps[i], ptOrg[l], KDrawMode[k], KDrawMode[k].iClearColorVal);
}
}
}
}
//CFbsScreenDevice::WriteRgbAlphaLine() test.
//(Set of test lines) X (Set of origins) X (Set of drawing modes) number of test cases.
template <class TPixelType>
void CTScaling<TPixelType>::WriteRgbAlphaLine()
{
INFO_PRINTF1(_L("CFbsDrawDevice::WriteRgbAlphaLine"));
TLineProps lineProps[] =
{
{0, 0, KLegacyAppSizeWidth - 1},
{0, KLegacyAppSizeHeight - 1, KLegacyAppSizeWidth - 1},
{17, 3, KLegacyAppSizeWidth / 2},
{-1, -2, 11},
{-4, -5, 1},
{0, -1, 3},
{1, -3, 7}
};
const TInt KLinesCnt = sizeof(lineProps) / sizeof(lineProps[0]);
TPoint ptOrg[] =
{
TPoint(19, 17),
TPoint(29, 25)
};
const TInt KOriginsCnt = sizeof(ptOrg) / sizeof(ptOrg[0]);
for(TInt l=0;l<KOriginsCnt;++l)
{
for(TInt i=0;i<KLinesCnt;++i)
{
for(TInt k=0;k<KDrawModesCnt;++k)
{
ClearScreen(KDrawMode[k]);
SetScalingSettings(ptOrg[l], KScalingFactorX, KScalingFactorY, 1, 1);
TUint8 rgbBuff[KLegacyAppSizeWidth * 3];
Mem::Fill(rgbBuff, sizeof(rgbBuff), KTestColorVal);
TUint8 maskBuff[KLegacyAppSizeWidth];
TUint8 maskChar = 0xF1;
Mem::Fill(maskBuff, sizeof(maskBuff), maskChar);
iDrawDevice->WriteRgbAlphaLine(lineProps[i].iX, lineProps[i].iY,
lineProps[i].iLength, rgbBuff, maskBuff, CGraphicsContext::EDrawModePEN);
SetScalingSettings(TPoint(0, 0), 1, 1, 1, 1);
CheckRgbAlphaLine(lineProps[i], ptOrg[l], KDrawMode[k].iClearColorVal);
}
}
}
}
//CFbsScreenDevice::WriteBinary() test.
template <class TPixelType>
void CTScaling<TPixelType>::WriteBinary()
{
INFO_PRINTF1(_L("CFbsDrawDevice::WriteBinary"));
TPoint pt[] =
{
TPoint(0, 0),
TPoint(27, 19),
TPoint(-4, -4),
TPoint(-1, -2),
TPoint(-1, -2),
TPoint(5, -5),
TPoint(-5, 0)
};
const TInt KPtCnt = sizeof(pt) / sizeof(pt[0]);
TPoint ptOrg[] =
{
TPoint(19, 24),
TPoint(29, 26)
};
const TInt KOriginsCnt = sizeof(ptOrg) / sizeof(ptOrg[0]);
for(TInt l=0;l<KOriginsCnt;++l)
{
for(TInt i=0;i<KPtCnt;++i)
{
for(TInt k=0;k<KDrawModesCnt;++k)
{
ClearScreen(KDrawMode[k]);
SetTestData();
SetScalingSettings(ptOrg[l], KScalingFactorX, KScalingFactorY, 1, 1);
const TInt KHeight = 5;
const TInt KLength = 11;
TUint32 buff[KHeight];
TUint32 buffChar = 0xFFFFFFFF;
for(TInt ooo=0;ooo<KHeight;++ooo)
{
buff[ooo] = buffChar;
}
TRgb val(KTestColorVal);
iDrawDevice->WriteBinary(pt[i].iX, pt[i].iY, buff, KLength, KHeight,
val, KDrawMode[k].iDrawMode);
SetScalingSettings(TPoint(0, 0), 1, 1, 1, 1);
CheckWriteBinary(pt[i], ptOrg[l], KDrawMode[k].iClearColorVal, KLength, KHeight);
}
}
}
}
//CFbsScreenDevice::WriteBinaryLineVertical() test.
template <class TPixelType>
void CTScaling<TPixelType>::WriteBinaryLineVertical()
{
INFO_PRINTF1(_L("CFbsDrawDevice::WriteBinaryLineVertical"));
TLineProps lineProps[] =
{
{0, 0, KLegacyAppSizeHeight - 1},
{KLegacyAppSizeWidth - 1, 0, KLegacyAppSizeHeight - 1},
{17, 3, 23},
{-2, -5, 10},
{-6, 24, 11},
{18, -6, 12},
{0, -3, 13},
{-1, 0, 14}
};
const TInt KLinesCnt = sizeof(lineProps) / sizeof(lineProps[0]);
TPoint ptOrg[] =
{
TPoint(22, 22),
TPoint(19, 20)
};
const TInt KOriginsCnt = sizeof(ptOrg) / sizeof(ptOrg[0]);
for(TInt l=0;l<KOriginsCnt;++l)
{
for(TInt i=0;i<KLinesCnt;++i)
{
for(TInt k=0;k<KDrawModesCnt;++k)
{
ClearScreen(KDrawMode[k]);
SetTestData();
SetScalingSettings(ptOrg[l], KScalingFactorX, KScalingFactorY, 1, 1);
const TInt KLength = 30;
TUint32 buff[KLength];
TUint32 buffChar = 0xFFFFFFFF;
for(TInt ooo=0;ooo<KLength;++ooo)
{
buff[ooo] = buffChar;
}
TRgb val(KTestColorVal);
iDrawDevice->WriteBinaryLineVertical(lineProps[i].iX, lineProps[i].iY,
buff, lineProps[i].iLength, val,
KDrawMode[k].iDrawMode, EFalse);
SetScalingSettings(TPoint(0, 0), 1, 1, 1, 1);
CheckVertLine(lineProps[i], ptOrg[l], KDrawMode[k].iClearColorVal);
}
}
}
}
//CFbsScreenDevice::WriteBinaryLine() test.
template <class TPixelType>
void CTScaling<TPixelType>::WriteBinaryLine()
{
INFO_PRINTF1(_L("CFbsDrawDevice::WriteBinaryLiine"));
TPoint pt[] =
{
TPoint(0, 0),
TPoint(1, 7),
TPoint(18, -8),
TPoint(-7, 26),
TPoint(-4, -7),
TPoint(0, -2),
TPoint(34, -1),
TPoint(-1, 17)
};
const TInt KPtCnt = sizeof(pt) / sizeof(pt[0]);
TPoint ptOrg[] =
{
TPoint(21, 35),
TPoint(40, 28)
};
const TInt KOriginsCnt = sizeof(ptOrg) / sizeof(ptOrg[0]);
for(TInt l=0;l<KOriginsCnt;++l)
{
for(TInt i=0;i<KPtCnt;++i)
{
for(TInt k=0;k<KDrawModesCnt;++k)
{
ClearScreen(KDrawMode[k]);
SetTestData();
SetScalingSettings(ptOrg[l], KScalingFactorX, KScalingFactorY, 1, 1);
const TInt KHeight = 1;
const TInt KLength = 11;
TUint32 buff[KHeight];
TUint32 buffChar = 0xFFFFFFFF;
for(TInt ooo=0;ooo<KHeight;++ooo)
{
buff[ooo] = buffChar;
}
TRgb val(KTestColorVal);
iDrawDevice->WriteBinaryLine(pt[i].iX, pt[i].iY, buff, KLength,
val, KDrawMode[k].iDrawMode);
SetScalingSettings(TPoint(0, 0), 1, 1, 1, 1);
CheckWriteBinary(pt[i], ptOrg[l], KDrawMode[k].iClearColorVal, KLength, KHeight);
}
}
}
}
//CFbsScreenDevice::WriteRgbAlphaMulti() test.
template <class TPixelType>
void CTScaling<TPixelType>::WriteRgbAlphaMulti()
{
INFO_PRINTF1(_L("CFbsDrawDevice::WriteRgbAlphaMulti"));
TLineProps lineProps[] =
{
{0, 0, KLegacyAppSizeWidth - 1},
{0, KLegacyAppSizeHeight - 1, KLegacyAppSizeWidth - 1},
{17, 3, KLegacyAppSizeWidth / 2},
{-8, -8, 11},
{-3, 15, 12},
{29, -4, 13},
{0, -3, 14},
{-5, 0, 15}
};
const TInt KLinesCnt = sizeof(lineProps) / sizeof(lineProps[0]);
TPoint ptOrg[] =
{
TPoint(24, 17),
TPoint(27, 20)
};
const TInt KOriginsCnt = sizeof(ptOrg) / sizeof(ptOrg[0]);
for(TInt l=0;l<KOriginsCnt;++l)
{
for(TInt i=0;i<KLinesCnt;++i)
{
for(TInt k=0;k<KDrawModesCnt;++k)
{
ClearScreen(KDrawMode[k]);
SetTestData();
SetScalingSettings(ptOrg[l], KScalingFactorX, KScalingFactorY, 1, 1);
TUint8 maskBuff[KLegacyAppSizeWidth];
TUint8 maskChar = 0xF1;
Mem::Fill(maskBuff, sizeof(maskBuff), maskChar);
TRgb val(KTestColorVal);
iDrawDevice->WriteRgbAlphaMulti(lineProps[i].iX, lineProps[i].iY,
lineProps[i].iLength, val, maskBuff);
SetScalingSettings(TPoint(0, 0), 1, 1, 1, 1);
CheckRgbAlphaLine(lineProps[i], ptOrg[l], KDrawMode[k].iClearColorVal);
}
}
}
}
//CFbsScreenDevice::ShadowArea() test.
template <class TPixelType>
void CTScaling<TPixelType>::ShadowArea()
{
INFO_PRINTF1(_L("CFbsDrawDevice::ShadowArea"));
TRect rcProps[] =
{
TRect(TPoint(0, 0), TSize(KLegacyAppSizeWidth - 1, KLegacyAppSizeHeight - 1)),
TRect(TPoint(17, 11), TSize(KLegacyAppSizeWidth / 2, KLegacyAppSizeHeight / 2)),
TRect(TPoint(-1, -1), TSize(1, 1)),
TRect(TPoint(-4, -5), TSize(11, 8)),
TRect(TPoint(0, -6), TSize(3, 23)),
TRect(TPoint(-7, 0), TSize(24, 2)),
TRect(TPoint(5, -2), TSize(8, 9)),
TRect(TPoint(-4, 16), TSize(11, 8))
};
const TInt KRcCnt = sizeof(rcProps) / sizeof(rcProps[0]);
TPoint ptOrg[] =
{
TPoint(25, 24),
TPoint(31, 29)
};
const TInt KOriginsCnt = sizeof(ptOrg) / sizeof(ptOrg[0]);
for(TInt l=0;l<KOriginsCnt;++l)
{
for(TInt i=0;i<KRcCnt;++i)
{
for(TInt k=0;k<KDrawModesCnt;++k)
{
TDrawModeProps drawModeProps(KDrawMode[k]);
--drawModeProps.iClearColorVal;//I want to avoid "255" clear color value.
for(TInt m=0;m<KShadowModesCnt;++m)
{
iDrawDevice->SetShadowMode(KShadowMode[m]);
ClearScreen(drawModeProps);
SetTestData();
SetScalingSettings(ptOrg[l], KScalingFactorX, KScalingFactorY, 1, 1);
iDrawDevice->ShadowArea(rcProps[i]);
SetScalingSettings(TPoint(0, 0), 1, 1, 1, 1);
CheckRect(rcProps[i], ptOrg[l], drawModeProps.iClearColorVal);
}
}
}
}
iDrawDevice->SetShadowMode(CFbsDrawDevice::ENoShadow);
}
//CFbsScreenDevice::WriteRgbAlphaLine() test.
template <class TPixelType>
void CTScaling<TPixelType>::WriteRgbAlphaLine2()
{
INFO_PRINTF1(_L("CFbsDrawDevice::WriteRgbAlphaLine-2"));
TLineProps lineProps[] =
{
{0, 0, KLegacyAppSizeWidth - 1},
{0, KLegacyAppSizeHeight - 1, KLegacyAppSizeWidth - 1},
{17, 3, KLegacyAppSizeWidth / 2},
{-1, -7, 11},
{0, -5, 12},
{-3, 0, 13},
{15, -7, 14},
{-1, -7, 15},
{-1, -7, 16}
};
const TInt KLinesCnt = sizeof(lineProps) / sizeof(lineProps[0]);
TPoint ptOrg[] =
{
TPoint(18, 28),
TPoint(15, 15)
};
const TInt KOriginsCnt = sizeof(ptOrg) / sizeof(ptOrg[0]);
for(TInt l=0;l<KOriginsCnt;++l)
{
for(TInt i=0;i<KLinesCnt;++i)
{
for(TInt k=0;k<KDrawModesCnt;++k)
{
ClearScreen(KDrawMode[k]);
SetTestData();
SetScalingSettings(ptOrg[l], KScalingFactorX, KScalingFactorY, 1, 1);
TUint8 rgbBuff1[KLegacyAppSizeWidth * 3];
TUint8 rgbBuff2[KLegacyAppSizeWidth * 3];
Mem::Fill(rgbBuff1, sizeof(rgbBuff1), KTestColorVal - 15);
Mem::Fill(rgbBuff2, sizeof(rgbBuff2), KTestColorVal + 22);
TUint8 maskBuff[KLegacyAppSizeWidth];
TUint8 maskChar = 0xF1;
Mem::Fill(maskBuff, sizeof(maskBuff), maskChar);
iDrawDevice->WriteRgbAlphaLine(lineProps[i].iX, lineProps[i].iY,
lineProps[i].iLength, rgbBuff1, rgbBuff2, maskBuff,
KDrawMode[k].iDrawMode);
SetScalingSettings(TPoint(0, 0), 1, 1, 1, 1);
CheckRgbAlphaLine(lineProps[i], ptOrg[l], KDrawMode[k].iClearColorVal);
}
}
}
}
template <class TPixelType>
void CTScaling<TPixelType>::TestScalingSettingsInterface()
{
INFO_PRINTF1(_L("MScalingSettings functionality test"));
TEST(iDrawDevice != NULL);
MScalingSettings* scalingSettings = NULL;
TInt err = iDrawDevice->GetInterface(KScalingSettingsInterfaceID,
reinterpret_cast <TAny*&> (scalingSettings));
TEST2(err, KErrNone);
TEST(scalingSettings != NULL);
TEST(scalingSettings->IsScalingOff());
const TInt factorXIn = 10, factorYIn = 13, divisorXIn = 1, divisorYIn = 1;
TInt factorXOut = -1, factorYOut = -1, divisorXOut = -1, divisorYOut = -1;
err = scalingSettings->Set(factorXIn, factorYIn, divisorXIn, divisorYIn);
TEST2(err, KErrNone);
TEST(!scalingSettings->IsScalingOff());
scalingSettings->Get(factorXOut, factorYOut, divisorXOut, divisorYOut);
TEST(factorXOut == factorXOut);
TEST(factorYIn == factorYOut);
TEST(divisorXIn == divisorXOut);
TEST(divisorYIn == divisorYOut);
MDrawDeviceOrigin* originInterface = NULL;
err = iDrawDevice->GetInterface(KDrawDeviceOriginInterfaceID,
reinterpret_cast <TAny*&> (originInterface));
TEST2(err, KErrNone);
TEST(originInterface != NULL);
const TPoint ptOriginIn(20, 45);
TPoint ptOriginOut;
err = originInterface->Set(ptOriginIn);
TEST2(err, KErrNone);
originInterface->Get(ptOriginOut);
TEST(ptOriginIn == ptOriginOut);
SetScalingSettings(TPoint(0, 0), 1, 1, 1, 1);
}
//Creates screen device and initializes ::DrawDevice global variable.
template <class TPixelType>
void CTScaling<TPixelType>::CreateScreenDeviceL()
{
if (iDisplayMode == ENone)
return;
TInt address = NULL;
User::LeaveIfError(HAL::Get(KDefaultScreenNo, HALData::EDisplayMemoryAddress,address));
User::LeaveIfError(HAL::Get(KDefaultScreenNo, HALData::EDisplayXPixels, iPhysSize.iWidth));
User::LeaveIfError(HAL::Get(KDefaultScreenNo, HALData::EDisplayYPixels, iPhysSize.iHeight));
__ASSERT_DEBUG(iPhysSize.iWidth > 0 && iPhysSize.iHeight > 0 && address != NULL, User::Invariant());
TPckgBuf<TScreenInfoV01> info;
info().iScreenAddressValid = ETrue;
info().iScreenAddress = reinterpret_cast <void*> (address);
info().iScreenSize = iPhysSize;
iDrawDevice = CFbsDrawDevice::NewScreenDeviceL(info(), iDisplayMode);
TestScalingSettingsInterface();
iBits = new (ELeave) TPixelType[::ByteSize(EColor256, iPhysSize)];
iDrawDevice->SetUserDisplayMode(iDisplayMode);
iDrawDevice->SetAutoUpdate(EFalse);
iDrawDevice->SetBits(iBits);
}
template <class TPixelType>
void CTScaling<TPixelType>::PerformanceTest()
{
INFO_PRINTF1(_L("CFbsDrawDevice, scaling - WriteRgb() performance test"));
const TInt KDrawingsCnt = 1000000;
TInt i, x, y;
TUint time1 = User::TickCount();
x = y = 0;
for(i=0;i<KDrawingsCnt;i++)
{
if(++x > 50)
{
x = 0;
if(++y > 50)
{
y = 0;
}
}
TRgb val(0x11, 0x12, i);
iDrawDevice->WriteRgb(x, y, val, CGraphicsContext::EDrawModePEN);
}
time1 = User::TickCount() - time1;
TPoint ptOrigin(5, 3);
SetScalingSettings(ptOrigin, KScalingFactorX, KScalingFactorY, 1, 1);
TUint time2 = User::TickCount();
x = y = 0;
for(i=0;i<KDrawingsCnt;i++)
{
if(++x > 50)
{
x = 0;
if(++y > 50)
{
y = 0;
}
}
TRgb val(0x11, 0x12, i);
iDrawDevice->WriteRgb(x, y, val, CGraphicsContext::EDrawModePEN);
}
time2 = User::TickCount() - time2;
SetScalingSettings(TPoint(0, 0), 1, 1, 1, 1);
RDebug::Print(_L("Non-scaled device, time=%d\r\n"), time1);
RDebug::Print(_L("Scaled device, time=%d\r\n"), time2);
}
template <class TPixelType>
void CTScaling<TPixelType>::RunTestCaseL(TInt aCurTestCase)
{
// EColor64K and EColor256 is not supported, stop the test
if (iDisplayMode == ENone)
{
INFO_PRINTF1(_L("EColor64K and EColor256 are not supported, The test is not run"));
TestComplete();
}
else
{
((CTScalingStep*)iStep)->SetTestStepID(KUnknownSYMTestCaseIDName);
switch(aCurTestCase)
{
case 1:
{
if(iCurOrientation >= KOrientationsCnt)
{
((CTScalingStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName);
TestComplete();
}
else
{
((CTScalingStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName);
if (iCurOrientation==CFbsDrawDevice::EOrientationRotated90 || iCurOrientation==CFbsDrawDevice::EOrientationRotated270)
{
iScalingFactorX=KScalingFactorY;
iScalingFactorY=KScalingFactorX;
}
else
{
iScalingFactorX=KScalingFactorX;
iScalingFactorY=KScalingFactorY;
}
INFO_PRINTF3(_L("Set scalling %d,%d"),iScalingFactorX,iScalingFactorY);
if(iDrawDevice->SetOrientation(KOrientation[iCurOrientation]))
{
INFO_PRINTF2(_L("Set orientation: ===EOrientation%S==="),&RotationName(iCurOrientation));
}
else
{
INFO_PRINTF2(_L("Failed to set orientation: ===EOrientation%S==="),&RotationName(iCurOrientation));
ResetCounter();
}
iCurOrientation++;
}
}
break;
case 2:
/**
@SYMTestCaseID GRAPHICS-SCREENDRIVER-0022
*/
((CTScalingStep*)iStep)->SetTestStepID(_L("GRAPHICS-SCREENDRIVER-0022"));
WriteLine();
break;
case 3:
/**
@SYMTestCaseID GRAPHICS-SCREENDRIVER-0023
*/
((CTScalingStep*)iStep)->SetTestStepID(_L("GRAPHICS-SCREENDRIVER-0023"));
WriteRgb();
break;
case 4:
/**
@SYMTestCaseID GRAPHICS-SCREENDRIVER-0024
*/
((CTScalingStep*)iStep)->SetTestStepID(_L("GRAPHICS-SCREENDRIVER-0024"));
WriteRgbMulti();
break;
case 5:
/**
@SYMTestCaseID GRAPHICS-SCREENDRIVER-0025
*/
((CTScalingStep*)iStep)->SetTestStepID(_L("GRAPHICS-SCREENDRIVER-0025"));
WriteRgbAlphaLine();
break;
case 6:
/**
@SYMTestCaseID GRAPHICS-SCREENDRIVER-0026
*/
((CTScalingStep*)iStep)->SetTestStepID(_L("GRAPHICS-SCREENDRIVER-0026"));
WriteBinary();
break;
case 7:
/**
@SYMTestCaseID GRAPHICS-SCREENDRIVER-0027
*/
((CTScalingStep*)iStep)->SetTestStepID(_L("GRAPHICS-SCREENDRIVER-0027"));
WriteBinaryLineVertical();
break;
case 8:
/**
@SYMTestCaseID GRAPHICS-SCREENDRIVER-0028
*/
((CTScalingStep*)iStep)->SetTestStepID(_L("GRAPHICS-SCREENDRIVER-0028"));
WriteBinaryLine();
break;
case 9:
/**
@SYMTestCaseID GRAPHICS-SCREENDRIVER-0029
*/
((CTScalingStep*)iStep)->SetTestStepID(_L("GRAPHICS-SCREENDRIVER-0029"));
WriteRgbAlphaMulti();
break;
case 10:
/**
@SYMTestCaseID GRAPHICS-SCREENDRIVER-0030
*/
((CTScalingStep*)iStep)->SetTestStepID(_L("GRAPHICS-SCREENDRIVER-0030"));
ShadowArea();
break;
case 11:
/**
@SYMTestCaseID GRAPHICS-SCREENDRIVER-0031
*/
((CTScalingStep*)iStep)->SetTestStepID(_L("GRAPHICS-SCREENDRIVER-0031"));
WriteRgbAlphaLine2();
break;
case 12:
/**
@SYMTestCaseID GRAPHICS-SCREENDRIVER-0032
*/
((CTScalingStep*)iStep)->SetTestStepID(_L("GRAPHICS-SCREENDRIVER-0032"));
PerformanceTest();
break;
case 13:
((CTScalingStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName);
ResetCounter();
break;
}
((CTScalingStep*)iStep)->RecordTestResultL();
}
}
static TDisplayMode GetDisplayModeL()
{
TDisplayMode mode = EColor64K;
CFbsDrawDevice* device = NULL;
TRAPD(err, device = CFbsDrawDevice::NewScreenDeviceL(KDefaultScreenNo, mode));
if (err!=KErrNone)
{
mode = EColor256;
TRAPD(err, device = CFbsDrawDevice::NewScreenDeviceL(KDefaultScreenNo, mode));
if (err == KErrNotSupported)
{
return ENone;
}
}
delete device;
return mode;
}
//---------------
CTScalingStep::CTScalingStep()
{
SetTestStepName(KTScalingStep);
}
CTGraphicsBase* CTScalingStep::CreateTestL()
{
CTGraphicsBase* theTest = NULL;
switch (GetDisplayModeL())
{
case EColor64K:
{
INFO_PRINTF1(_L("Scaling - EColor64K"));
theTest = new (ELeave) CTestColor64K(this, EColor64K);
}
break;
case EColor256:
{
INFO_PRINTF1(_L("Scaling - EColor256"));
theTest = new (ELeave) CTestColor256(this, EColor256);
}
break;
default:
INFO_PRINTF1(_L("EColor64K and EColor256 are not supported"));
theTest = new (ELeave) CTestNone(this, ENone);
}
return theTest;
}
void CTScalingStep::TestSetupL()
{
TInt temp = 0;
HAL::Get(KDefaultScreenNo, HALData::EDisplayColors, temp);//force HAL memory allocation
}