--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsdeviceinterface/bitgdi/tbit/toutlineandshadowfonts.cpp Tue Feb 02 01:47:50 2010 +0200
@@ -0,0 +1,1075 @@
+// Copyright (c) 2006-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:
+//
+
+/**
+ @file
+ @test
+ @internalComponent - Internal Symbian test code
+*/
+
+#include "toutlineandshadowfonts.h"
+#include <test/testexecutestepbase.h>
+#include <openfont.h>
+#include <test/thashreferenceimages.h>
+#include <graphics/fbsdefs.h>
+#include "fbsmessage.h"
+
+//Note: This test should run with a rasterizer which supports EFourColourBlendGlyphBitmap (e.g. iType)
+//otherwise the tests will fail.
+
+//Path where reference mbm files get created, these reference bitmaps are useful when debugging.
+_LIT(KPath, "c:\\bitgditest\\%S.mbm");
+
+// Constructor
+CTOutlineAndShadowFonts::CTOutlineAndShadowFonts(CTestStep* aStep):CTGraphicsBase(aStep),iStep(aStep) { }
+
+void CTOutlineAndShadowFonts::ConstructL()
+ {
+ if (RFbsSession::Connect() != KErrNone)
+ {
+ FbsStartup();
+ TInt conret = RFbsSession::Connect();
+ TEST2(conret, KErrNone);
+ }
+ iFbs = RFbsSession::GetSession();
+ iHashUtil = CTHashReferenceImages::NewL(iStep,iFbs,&KPath);
+ }
+
+// Destructor
+CTOutlineAndShadowFonts::~CTOutlineAndShadowFonts()
+ {
+ FreeScreenDevice();
+ RFbsSession::Disconnect();
+ delete iHashUtil;
+ }
+
+
+/**
+Creates screen device for the given display mode if supported
+@param aMode display mode for which device has to be created
+*/
+void CTOutlineAndShadowFonts::CreateScreenDeviceL(TDisplayMode aMode)
+ {
+ iBitmap = new(ELeave) CFbsBitmap;
+ //Considering the intersection of the screen size for both hw and emulator so that same
+ //baselined hash can be used to test for both
+ iBitmap->Create(TSize(KScreenWidth, KScreenHeight), aMode);
+ iBitmapDevice = CFbsBitmapDevice::NewL(iBitmap);
+ User::LeaveIfError(iBitmapDevice->CreateContext((CGraphicsContext*&)iGc));
+ iHashUtil->SetScreenDeviceAndBitmap(iBitmapDevice,iBitmap,iGc);
+ }
+
+/**
+Delete the devices created and gc.
+*/
+void CTOutlineAndShadowFonts::FreeScreenDevice()
+ {
+ delete iBitmapDevice;
+ delete iBitmap;
+ delete iGc;
+ iBitmapDevice = NULL;
+ iBitmap = NULL;
+ iGc = NULL;
+ }
+
+
+/**
+Auxilary function will be called in case of a leave to release the font
+@param aCleanFont font to be released
+*/
+void CleanUpFont(TAny* aCleanFont)
+ {
+ SCleanFont* cleanFont= static_cast<SCleanFont*>(aCleanFont);
+ (cleanFont->device)->ReleaseFont(cleanFont->font);
+ }
+
+TBool CTOutlineAndShadowFonts::CheckMonoTypeInstalledL()
+ {
+ CreateScreenDeviceL(EColor16MU);
+//
+ TFontSpec fontSpec;
+ fontSpec.iTypeface.iName = KFontFace[0];
+ fontSpec.iHeight = KHeight;
+ fontSpec.iFontStyle.SetBitmapType(EAntiAliasedGlyphBitmap);
+ fontSpec.iFontStyle.SetEffects(FontEffect::EDropShadow, EDropShadowOn);
+ fontSpec.iFontStyle.SetEffects(FontEffect::EOutline, EOutlineOn);
+ CFont* font;
+ User::LeaveIfError(iBitmapDevice->GetNearestFontToDesignHeightInPixels((CFont*&)font,fontSpec));
+ TBool monoTypeInstalled=font->FontSpecInTwips().iFontStyle.BitmapType()==EFourColourBlendGlyphBitmap;
+ iBitmapDevice->ReleaseFont(font);
+ if (!monoTypeInstalled)
+ {
+ INFO_PRINTF1(_L("Monotype fonts not installed, Run iType\\binaries\\ityperast.cmd to install them"));
+ TEST(EFalse);
+ TestComplete();
+ }
+ return(monoTypeInstalled);
+ }
+
+/**
+@SYMTestCaseID GRAPHICS-BITGDI-OUTLINESHA-0008
+
+@SYMPREQ PREQ1543
+
+@SYMTestCaseDesc Checks the fonts metrics. Tests the metrics with and without outline and shadow effects
+for different typefaces and screen modes
+
+@SYMTestPriority Critical
+
+@SYMTestStatus Implemented
+
+@SYMTestActions Create two fonts, one with and without shadow and outline effects on.
+Get the font metrics using GetNearestFontToDesignHeightInPixels
+Compare the different font metrics for both the fonts.
+API Calls:
+CTOutlineAndShadowFonts::DoOutlineandShadowFontsMetrics()
+
+@SYMTestExpectedResults font metrics with and without outline and shadow effects should not vary by more than 3.
+*/
+void CTOutlineAndShadowFonts::TestOutlineandShadowFontsMetricsL()
+ {
+ INFO_PRINTF1(_L("TestOutlineandShadowFontsMetricsL()"));
+ FreeScreenDevice();
+ CreateScreenDeviceL(EColor16MU); //Create device for EColor16MU
+ for (TInt fontFaceIndex = 0; fontFaceIndex < KNumOfFontFaces; fontFaceIndex++)
+ {
+ for (TInt numOfSubTests = 0; numOfSubTests < KNumberOfSubTestsInTest0008; numOfSubTests++)
+ {
+ DoOutlineandShadowFontsMetrics(KTestSettingsToTestFontMetrics[numOfSubTests], fontFaceIndex);
+ }
+ }
+ }
+
+/**
+Utility function to determine whether a specified value lies within a defined range of values.
+@param aMin The lower value of the range.
+@param aValue The value to be compared.
+@param aMax The higher value of the range.
+@return ETrue, if the specified value lies within the range; EFalse, otherwise.
+*/
+TBool CTOutlineAndShadowFonts::TestRange(TInt aMin, TInt aValue, TInt aMax)
+ {
+ if (Rng(aMin, aValue, aMax))
+ {
+ return ETrue;
+ }
+ else
+ {
+ INFO_PRINTF4(_L("TestRange: !(%i !<= %i !<= %i)"), aMin, aValue, aMax);
+ return EFalse;
+ }
+ }
+
+/**
+Utility function to determine whether a specified value is below a certain value.
+@param aValue The value to be compared.
+@param aMax The highest permitted value.
+@return ETrue, if the specified value is below the maximum; EFalse, otherwise.
+*/
+TBool CTOutlineAndShadowFonts::TestLessThanOrEqual(TInt aValue, TInt aMax)
+ {
+ if (aValue <= aMax)
+ {
+ return ETrue;
+ }
+ else
+ {
+ INFO_PRINTF3(_L("TestLessThanOrEqual: !(%i !<= %i)"), aValue, aMax);
+ return EFalse;
+ }
+ }
+
+/**
+Auxilary function called from TestOutlineandShadowFontsMetricsL
+@param aSettings holds the effects settings (outline, shadow etc...)
+@param aFontIndex holds the font index
+*/
+void CTOutlineAndShadowFonts::DoOutlineandShadowFontsMetrics(const STestFontParameters &aSettings, TInt aFontIndex)
+ {
+ TFontSpec fontSpecWithOutEffects;
+ //Create fontspec without shadow and outline effects on
+ PrepareTestEnvironment(fontSpecWithOutEffects, aSettings , aFontIndex, EFalse, EFalse);
+ CFbsFont* font1 = NULL;
+ TEST(iBitmapDevice->GetNearestFontToDesignHeightInPixels((CFont*&)font1,fontSpecWithOutEffects) == KErrNone);
+ TEST(font1 != NULL);
+
+ TFontSpec fontSpecWithEffects;
+ //Create fontspec with shadow and outline effects on if asked for
+ PrepareTestEnvironment(fontSpecWithEffects, aSettings, aFontIndex, ETrue, EFalse);
+ CFbsFont* font2 = NULL;
+ TEST(iBitmapDevice->GetNearestFontToDesignHeightInPixels((CFont*&)font2,fontSpecWithEffects) == KErrNone);
+ TEST(font2 != NULL);
+
+ //get the name of the fonts
+ TOpenFontFaceAttrib font1Attrib;
+ TBool haveFont1Attrib;
+ haveFont1Attrib = font1->GetFaceAttrib(font1Attrib);
+ INFO_PRINTF1(_L("Font names"));
+ if (haveFont1Attrib)
+ {
+ INFO_PRINTF1(font1Attrib.FullName());
+ }
+ TOpenFontFaceAttrib font2Attrib;
+ TBool haveFont2Attrib;
+ haveFont2Attrib = font2->GetFaceAttrib(font2Attrib);
+ if (haveFont2Attrib)
+ {
+ INFO_PRINTF1(font2Attrib.FullName());
+ }
+
+ //Check different font metrics with and without outline and shadow effects
+ TUid uid1 = font1->TypeUid();
+ TUid uid2 = font2->TypeUid();
+ ASSERT_EQUALS(KCFbsFontUid, uid1);
+ ASSERT_EQUALS(KCFbsFontUid, uid2);
+ TInt valueFontWithoutEffects = font1->AscentInPixels();
+ TInt valueFontWithEffects = font2->AscentInPixels();
+ TEST(valueFontWithoutEffects == valueFontWithEffects);
+
+ valueFontWithoutEffects = font1->BaselineOffsetInPixels();
+ valueFontWithEffects = font2->BaselineOffsetInPixels();
+ TEST(valueFontWithoutEffects == valueFontWithEffects);
+ for (TInt c=0;c<256;c++)
+ {
+ valueFontWithoutEffects = font1->CharWidthInPixels(c);
+ valueFontWithEffects = font2->CharWidthInPixels(c);
+ TEST(valueFontWithoutEffects == valueFontWithEffects);
+ }
+ //CharactersJoin
+ valueFontWithoutEffects = font1->DescentInPixels();
+ valueFontWithEffects = font2->DescentInPixels();
+ TEST(valueFontWithoutEffects == valueFontWithEffects);
+
+ //Extended function
+ valueFontWithoutEffects = font1->FontCapitalAscent();
+ valueFontWithEffects = font2->FontCapitalAscent();
+ TEST(valueFontWithoutEffects == valueFontWithEffects);
+
+ valueFontWithoutEffects = font1->FontLineGap();
+ valueFontWithEffects = font2->FontLineGap();
+ TEST(valueFontWithoutEffects == valueFontWithEffects);
+
+ valueFontWithoutEffects = font1->FontMaxAscent();
+ valueFontWithEffects = font2->FontMaxAscent();
+ TEST(valueFontWithoutEffects == valueFontWithEffects);
+
+ valueFontWithoutEffects = font1->FontMaxDescent();
+ valueFontWithEffects = font2->FontMaxDescent();
+ TEST(valueFontWithoutEffects == valueFontWithEffects);
+
+ valueFontWithoutEffects = font1->FontMaxHeight();
+ valueFontWithEffects = font2->FontMaxHeight();
+ TEST(valueFontWithoutEffects == valueFontWithEffects);
+
+ //FontSpecInTwips - will be different
+ TFontSpec spec = font1->FontSpecInTwips();
+ TFontSpec spec2 = font2->FontSpecInTwips();
+ TEST(spec.iHeight == spec2.iHeight);
+ valueFontWithoutEffects = font1->FontStandardDescent();
+ valueFontWithEffects = font2->FontStandardDescent();
+ TEST(valueFontWithoutEffects+KDifferByOne >= valueFontWithEffects);
+
+ valueFontWithoutEffects = font1->HeightInPixels();
+ valueFontWithEffects = font2->HeightInPixels();
+ TEST(valueFontWithoutEffects == valueFontWithEffects);
+
+ valueFontWithoutEffects = font1->MaxCharWidthInPixels();
+ valueFontWithEffects = font2->MaxCharWidthInPixels();
+ TEST(valueFontWithoutEffects == valueFontWithEffects);
+
+ valueFontWithoutEffects = font1->MaxNormalCharWidthInPixels();
+ valueFontWithEffects = font2->MaxNormalCharWidthInPixels();
+ TEST(valueFontWithoutEffects == valueFontWithEffects);
+
+ _LIT(KMeasureText,"ABCdef456");
+ CFont::TMeasureTextOutput out1;
+ CFont::TMeasureTextOutput out2;
+ valueFontWithoutEffects = font1->MeasureText(KMeasureText,NULL,&out1);
+ valueFontWithEffects = font2->MeasureText(KMeasureText,NULL,&out2);
+ TEST(valueFontWithoutEffects == valueFontWithEffects);
+ TEST(out1.iChars == out2.iChars);
+ TEST(out1.iGlyphs == out2.iGlyphs);
+ TEST(out1.iGroups == out2.iGroups);
+ TEST(out1.iSpaces == out2.iSpaces);
+ TEST(TestLessThanOrEqual(out1.iBounds.iTl.iX-KDifferByOne, out2.iBounds.iTl.iX));
+ TEST(TestLessThanOrEqual(out1.iBounds.iTl.iY-KDifferByOne, out2.iBounds.iTl.iY));
+ TEST(TestLessThanOrEqual(out1.iBounds.iBr.iX-KDifferByOne, out2.iBounds.iBr.iX));
+ TEST(TestLessThanOrEqual(out1.iBounds.iBr.iY-KDifferByOne, out2.iBounds.iBr.iY));
+ TEST(TestLessThanOrEqual(out1.iMaxGlyphSize.iHeight-KDifferByOne, out2.iMaxGlyphSize.iHeight));
+ TEST(TestLessThanOrEqual(out1.iMaxGlyphSize.iWidth-KDifferByOne, out2.iMaxGlyphSize.iWidth));
+ valueFontWithoutEffects = font1->TextCount(KMeasureText, 30);
+ valueFontWithEffects = font2->TextCount(KMeasureText, 30);
+ TEST(valueFontWithoutEffects == valueFontWithEffects);
+ TInt val3;
+ TInt val4;
+ valueFontWithoutEffects = font1->TextCount(KMeasureText, 30, val3);
+ valueFontWithEffects = font2->TextCount(KMeasureText, 30, val4);
+ TEST(val3 == val4);
+ TEST(valueFontWithoutEffects == valueFontWithEffects);
+ valueFontWithoutEffects = font1->TextWidthInPixels(KMeasureText);
+ valueFontWithEffects = font2->TextWidthInPixels(KMeasureText);
+ TEST(TestRange(valueFontWithoutEffects, valueFontWithEffects, valueFontWithoutEffects+KDifferByThree));
+ uid1 = font1->TypeUid();
+ uid2 = font2->TypeUid();
+ TEST(uid1 == uid2);
+ for (TInt c=0;c<256;c++)
+ {
+ const TUint8 *p1 = NULL;
+ const TUint8 *p2 = NULL;
+ TCharacterMetrics m1 = font1->CharacterMetrics(c, p1);
+ TCharacterMetrics m2 = font2->CharacterMetrics(c, p2);
+ TEST(TestLessThanOrEqual(m1.iAscentInPixels-KDifferByOne, m2.iAscentInPixels));
+ TEST(TestLessThanOrEqual(m1.iHeightInPixels-KDifferByOne, m2.iHeightInPixels));
+ TEST(TestLessThanOrEqual(m1.iLeftAdjustInPixels-KDifferByTwo, m2.iLeftAdjustInPixels));
+ TEST(m1.iMoveInPixels == m2.iMoveInPixels);
+ TEST(TestLessThanOrEqual(m1.iRightAdjustInPixels-KDifferByTwo, m2.iRightAdjustInPixels));
+ }
+ TOpenFontMetrics ofm1;
+ TOpenFontMetrics ofm2;
+ TBool r1 = font1->GetFontMetrics(ofm1);
+ TBool r2 = font2->GetFontMetrics(ofm2);
+ TEST(ofm1.Size() == ofm2.Size());
+ TEST(ofm1.Ascent() == ofm2.Ascent());
+ TEST(ofm1.Descent() == ofm2.Descent());
+ TEST(ofm1.MaxHeight() == ofm2.MaxHeight());
+ TEST(ofm1.MaxDepth() == ofm2.MaxDepth());
+ TEST(ofm1.MaxWidth() == ofm2.MaxWidth());
+
+ valueFontWithoutEffects = font1->RawTextWidthInPixels(KMeasureText);
+ valueFontWithEffects = font2->RawTextWidthInPixels(KMeasureText);
+ TEST(valueFontWithoutEffects == valueFontWithEffects);
+
+ valueFontWithoutEffects = font1->TextWidthInPixels(KMeasureText);
+ valueFontWithEffects = font2->TextWidthInPixels(KMeasureText);
+ TEST(TestLessThanOrEqual(valueFontWithoutEffects, valueFontWithEffects));
+
+ SCharWidth scw1;
+ SCharWidth scw2;
+ font1->TextWidthInPixels(KMeasureText,scw1);
+ font2->TextWidthInPixels(KMeasureText,scw2);
+ TEST(TestLessThanOrEqual(scw1.iLeftAdjust-KDifferByOne, scw2.iLeftAdjust));
+ TEST(scw1.iMove == scw2.iMove);
+ TEST(TestLessThanOrEqual(scw1.iRightAdjust-KDifferByTwo, scw2.iRightAdjust));
+ TEST(TestLessThanOrEqual(scw1.iWidth-KDifferByOne, scw2.iWidth));
+ iBitmapDevice->ReleaseFont(font2);
+ iBitmapDevice->ReleaseFont(font1);
+ }
+
+/**
+@SYMTestCaseID GRAPHICS-BITGDI-OUTLINESHA-0009
+
+@SYMPREQ PREQ1543
+
+@SYMTestCaseDesc Test the setter and getters for pen colour, brush colour and shadow colour.
+
+@SYMTestPriority Critical
+
+@SYMTestStatus Implemented
+
+@SYMTestActions Set colors to pen, brush and shadow call SetPenColor(), SetBrushColor(), SetShadowColor() respectively
+Get colors of pen, brush and shadow using PenColor(), BrushColor() and GetShadowColor() respectively
+
+@SYMTestExpectedResults pen, brush and shadow colour should return default colours if not set,
+else should return the colour set using SetPenColor(), SetBrushColor() and SetShadowColor() respectively
+*/
+void CTOutlineAndShadowFonts::TestOutlinePenAndShadowColorL()
+ {
+ INFO_PRINTF1(_L("TestOutlinePenAndShadowColorL()"));
+ for(TInt displayMode = ENone; displayMode < KNumOfDisplayModes; displayMode++)
+ {
+ FreeScreenDevice();
+ CreateScreenDeviceL(KDisplayModes[displayMode]);
+ DoOutlinePenAndShadowColor();
+ }
+ }
+
+/**
+Auxilary function called from TestOutlinePenAndShadowColorL
+API Calls:
+CFbsBitGc::PenColor()
+CFbsBitGc::SetPenColor()
+CFbsBitGc::BrushColor()
+CFbsBitGc::SetBrushColor()
+CFbsBitGc::GetShadowColor()
+CFbsBitGc::SetShadowColor()
+*/
+void CTOutlineAndShadowFonts::DoOutlinePenAndShadowColor()
+ {
+ //iGc->Reset();
+ TRgb color;
+ color = iGc->PenColor();
+
+ //Pen colour is used for drawing outline
+ TEST(color == KDefaultOutlinePenColor);
+ color = iGc->BrushColor();
+
+ //Brush colour is used as fill colour
+ TEST(color == KDefaultFillColor);
+ iGc->GetShadowColor(color);
+ TEST(color == KDefaultShadowColor);
+ iGc->SetShadowColor(KRgbGreen);
+ iGc->GetShadowColor(color);
+ TEST(color == KRgbGreen);
+ iGc->SetPenColor(KRgbYellow);
+ color = iGc->PenColor();
+ TEST(color == KRgbYellow);
+ iGc->SetBrushColor(KRgbRed);
+ color = iGc->BrushColor();
+ TEST(color == KRgbRed);
+ }
+
+/**
+@SYMTestCaseID GRAPHICS-BITGDI-OUTLINESHA-0010
+
+@SYMPREQ PREQ1543
+
+@SYMTestCaseDesc Tests the text drawn using DrawTextVertical and DrawText with shadow and outline effects on
+with different display modes and orientations.
+
+@SYMTestPriority Critical
+
+@SYMTestStatus Implemented
+
+@SYMTestActions Call DrawTextVertical and DrawText with different effect on, display modes and orientations.
+API Calls:
+CFbsBitGc::DrawTextVertical()
+CFbsBitGc::DrawText()
+CTOutlineAndShadowFonts::CompareHashValuesL()
+
+@SYMTestExpectedResults Hash generated for the drawn text should be same with the baselined hash value.
+*/
+void CTOutlineAndShadowFonts::TestDrawTextWithOutlineAndShadowL()
+ {
+ INFO_PRINTF1(_L("TestDrawTextWithOutlineAndShadowL()"));
+ for(TInt displayMode = 0; displayMode < KNumOfDisplayModes; displayMode++)
+ {
+ FreeScreenDevice();
+ CreateScreenDeviceL(KDisplayModes[displayMode]);
+ INFO_PRINTF2(_L("Display mode: %S"), &KDisplayModeNames[displayMode]);
+ for (TInt orient = CFbsBitGc::EGraphicsOrientationNormal; orient <= CFbsBitGc::EGraphicsOrientationRotated270; orient++)
+ {
+ iGc->SetOrientation((CFbsBitGc::TGraphicsOrientation)orient);
+ for (TInt fontFaceIndex = 0; fontFaceIndex < KNumOfFontFaces; fontFaceIndex++)
+ {
+ for (TInt numOfSubTests = 0; numOfSubTests < KNumberOfSubTestsInTest0010; numOfSubTests++)
+ {
+ //Test with only one display mode i.e. EColor16MU for EMonochromeGlyphBitmap to reduce test execution time
+ if ((KTestSettingsToTestOutlineAndShadow[numOfSubTests].fSpecAndGcSettings & ESetMonochromeGlyphBitmap) && (displayMode != EColor16MU))
+ {
+ continue;
+ }
+
+ //Test transparency for display mode EColor64K and above as it is not supported in other display modes
+ if (KTestSettingsToTestOutlineAndShadow[numOfSubTests].penColor.Alpha() < 255 && displayMode < 6)
+ {
+ continue;
+ }
+ HBufC* hashIdString = iHashUtil->GenerateHashIdStringLC(KTestName0010, numOfSubTests, KFontFaceShortName, fontFaceIndex, displayMode, orient);
+ DoDrawTextWithOutlineAndShadowL(KTestSettingsToTestOutlineAndShadow[numOfSubTests], *hashIdString, fontFaceIndex);
+ CleanupStack::PopAndDestroy(hashIdString);
+ }
+ }
+ }
+ }
+ iGc->SetOrientation(CFbsBitGc::EGraphicsOrientationNormal);
+ }
+
+/**
+Auxilary function called TestDrawTextWithOutlineAndShadowL.
+@param aSettings holds the effects settings (Outline, Shadow, Bitmap type etc...)
+@param aHashIdString holds the HashID string
+@param aFontIndex holds the font index
+*/
+void CTOutlineAndShadowFonts::DoDrawTextWithOutlineAndShadowL(const STestFontParameters &aSettings, const TDesC& aHashIdString, const TInt aFontIndex)
+ {
+ TFontSpec fontSpec;
+ PrepareTestEnvironment(fontSpec, aSettings, aFontIndex, ETrue, ETrue);
+ CFont* font;
+ TEST(iBitmapDevice->GetNearestFontToDesignHeightInPixels((CFont*&)font, fontSpec) == KErrNone);
+ SCleanFont cleanupFont = {iBitmapDevice, font};
+ CleanupStack::PushL(TCleanupItem(CleanUpFont, &cleanupFont));
+ iGc->UseFont(font);
+ if(EVerticalDraw & aSettings.fSpecAndGcSettings)
+ {
+ iGc->DrawTextVertical(KTextPhrase, TPoint(20,60), ERotate90Degrees & aSettings.fSpecAndGcSettings);
+ }
+ else
+ {
+ iGc->DrawText(KTextPhrase, KPoint);
+ }
+ iHashUtil->CompareHashValuesL(aHashIdString);
+ CleanupStack::Pop();//font
+ iBitmapDevice->ReleaseFont(font);
+ iGc->DiscardFont();
+ }
+
+/**
+@SYMTestCaseID GRAPHICS-BITGDI-OUTLINESHA-0011
+
+@SYMPREQ PREQ1543
+
+@SYMTestCaseDesc Tests outline and shadow effects with strikethrough, softedge and underLine
+for different orientations.
+
+@SYMTestPriority Critical
+
+@SYMTestStatus Implemented
+
+@SYMTestActions Draw text with different effects on
+Repeat the same with all supported display modes and orientations. Generate hash key for the drawn text.
+API Calls:
+CFbsBitGc::DrawText()
+CTHashReferenceImages::CompareHashValuesL()
+
+@SYMTestExpectedResults Hash generated for the drawn text should be same with the baselined hash value.
+*/
+void CTOutlineAndShadowFonts::TestDrawTextWithStrikeThroughL()
+ {
+ INFO_PRINTF1(_L("TestDrawTextWithStrikeThroughL()"));
+ for(TInt displayMode = 0; displayMode < KNumOfDisplayModes; displayMode++)
+ {
+ INFO_PRINTF2(_L("Display mode: %S"), &KDisplayModeNames[displayMode]);
+ FreeScreenDevice();
+ CreateScreenDeviceL(KDisplayModes[displayMode]);
+
+ for (TInt numOfSubTests = 0; numOfSubTests < KNumberOfSubTestsInTest0011; numOfSubTests++)
+ {
+ HBufC* hashIdString = iHashUtil->GenerateHashIdStringLC(KTestName0011, numOfSubTests, &(KFontFace[0]), 0, displayMode, 0);
+ DoSetStrikeThroughAndDrawTestL(KTestSettingsToTestStrikeAndUnderline[numOfSubTests], *hashIdString);
+ CleanupStack::PopAndDestroy(hashIdString);
+ }
+ }
+ }
+
+/**
+Auxilary function called from TestDrawTextWithStrikeThroughL API
+@SYMTestCaseDesc Tests drawn text with different effects like
+strikethrough, softedge, underLine etc for different orientations.
+@param aSettings holds font settings
+@param aHashIdString holds HashID
+*/
+void CTOutlineAndShadowFonts::DoSetStrikeThroughAndDrawTestL(const STestFontParameters &aSettings, const TDesC& aHashIdString)
+ {
+ TFontSpec fontSpec;
+ //Passing 0 as font index as testing with one typeface is sufficient in this case
+ PrepareTestEnvironment(fontSpec, aSettings, 0, ETrue, EFalse);
+
+ CFont* font;
+ TEST(iBitmapDevice->GetNearestFontToDesignHeightInPixels((CFont*&)font, fontSpec) == KErrNone);
+ SCleanFont cleanupFont = {iBitmapDevice, font};
+ CleanupStack::PushL(TCleanupItem(CleanUpFont, &cleanupFont));
+ iGc->UseFont(font);
+ iGc->DrawText(KTextPhrase,KPoint);
+ iHashUtil->CompareHashValuesL(aHashIdString);
+ CleanupStack::Pop();//font
+ iBitmapDevice->ReleaseFont(font);
+ iGc->DiscardFont();
+ }
+
+/**
+@SYMTestCaseID GRAPHICS-BITGDI-OUTLINESHA-0012
+
+@SYMTestCaseDesc Negative tests.
+
+@SYMTestPriority Critical
+
+@SYMTestStatus Implemented
+
+@SYMTestActions Create font spec with different -ve scenarios.
+Like pass bitmap type other than valid on, -ve pen size etc.
+
+API Calls:
+CFbsBitGc::GetNearestFontToDesignHeightInPixels()
+TFontStyle::SetEffects()
+
+@SYMTestExpectedResults Tests should not panic.
+*/
+void CTOutlineAndShadowFonts::NegativeRastTestL()
+ {
+ INFO_PRINTF1(_L("NegativeRastTestL()"));
+ FreeScreenDevice();
+ CreateScreenDeviceL(KDisplayModes[9]); //Create device for EColor16MU
+
+ TFontSpec fsp;
+ STestFontParameters settings;
+
+ INFO_PRINTF1(_L("Drawing empty text"));
+ settings.fSpecAndGcSettings = EDropShadowOn | EOutlineOn | ESetAntiAliasedGlyphBitmap;
+ PrepareTestEnvironment(fsp, settings, 0);
+ iGc->SetPenSize(TSize(10,10));
+ NegativeRastTestDrawText(fsp);
+
+ INFO_PRINTF1(_L("Drawing empty text with unknown typeface"));
+ fsp.iTypeface.iName=_L("ERROR FONT"); //Typeface which does not exist
+ iGc->SetPenSize(TSize(3,3));
+ NegativeRastTestDrawText(fsp);
+
+ INFO_PRINTF1(_L("Drawing empty text with invalid glyph bitmap type"));
+ fsp.iFontStyle.SetBitmapType((TGlyphBitmapType)KInvalidBitmapType); //Invalid glyph bitmap type
+ CFont* font;
+ TEST(iBitmapDevice->GetNearestFontToDesignHeightInPixels((CFont*&)font, fsp) == KErrNone);
+ iGc->UseFont(font);
+ iGc->DrawText(KTextPhrase,KPoint);
+ TEST(font->FontSpecInTwips().iFontStyle.BitmapType() == EMonochromeGlyphBitmap);
+ iBitmapDevice->ReleaseFont(font);
+ iGc->DiscardFont();
+
+ INFO_PRINTF1(_L("Drawing text with brush style ENullBrush"));
+ iGc->SetBrushStyle(CGraphicsContext::ENullBrush);
+ settings.fSpecAndGcSettings = EDropShadowOn | EOutlineOn | ESetAntiAliasedGlyphBitmap;
+ PrepareTestEnvironment(fsp, settings, 0);
+ NegativeRastTestDrawText(fsp);
+
+ INFO_PRINTF1(_L("Drawing text with brush style ESolidBrush"));
+ iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
+ NegativeRastTestDrawText(fsp);
+
+ INFO_PRINTF1(_L("Drawing text with large pen size"));
+ iGc->SetPenSize(TSize(1000,1000));
+ NegativeRastTestDrawText(fsp);
+
+ INFO_PRINTF1(_L("Drawing text with -ve pen size"));
+ settings.fSpecAndGcSettings = EDropShadowOn | ESetAntiAliasedGlyphBitmap;
+ PrepareTestEnvironment(fsp, settings, 0);
+ iGc->SetPenSize(TSize(-1,-1));
+ NegativeRastTestDrawText(fsp);
+ }
+
+/**
+Auxilary function called from NegativeRastTestL
+@param aFontSpec holds fonts specifications
+*/
+void CTOutlineAndShadowFonts::NegativeRastTestDrawText(const TFontSpec &aFontSpec)
+ {
+ CFont* font;
+ TEST(iBitmapDevice->GetNearestFontToDesignHeightInPixels((CFont*&)font, aFontSpec) == KErrNone);
+ iGc->UseFont(font);
+ iGc->DrawText(KTextPhrase, KPoint);
+ iGc->DrawTextVertical(KTextPhrase, KPoint, EFalse);
+ iGc->DiscardFont();
+ iBitmapDevice->ReleaseFont(font);
+ }
+
+/**
+@SYMTestCaseID GRAPHICS-BITGDI-OUTLINESHA-0013
+
+@SYMPREQ PREQ1543
+
+@SYMTestCaseDesc Test glyph bitmap types with outline and shadow effects on and off
+
+@SYMTestPriority Critical
+
+@SYMTestStatus Implemented
+
+@SYMTestActions Create fonts with and without specifying the bitmap type
+API Calls:
+TFontStyle::BitmapType()
+
+@SYMTestExpectedResults Glyph bitmap type should be EFourColourBlendGlyphBitmap when either of outline or shadow effect on and EAntiAliasedGlyphBitmap set in fontspec
+*/
+void CTOutlineAndShadowFonts::TestCheckBitmapTypesL()
+ {
+ INFO_PRINTF1(_L("TestCheckBitmapTypesL()"));
+ FreeScreenDevice();
+ CreateScreenDeviceL(KDisplayModes[9]); //Create device for EColor16MU
+
+ CFont* font;
+ TFontSpec fontSpec;
+ STestFontParameters settings;
+
+ PrepareTestEnvironment(fontSpec, settings, 0);
+ TEST(iBitmapDevice->GetNearestFontToDesignHeightInPixels((CFont*&)font,fontSpec) == KErrNone);
+ //Check for the bitmap type to be EMonochromeGlyphBitmap when no bitmap type is set.
+ TEST(font->FontSpecInTwips().iFontStyle.BitmapType() == EMonochromeGlyphBitmap);
+ iBitmapDevice->ReleaseFont(font);
+
+ settings.fSpecAndGcSettings = EDropShadowOn | EOutlineOn | ESetAntiAliasedGlyphBitmap;
+ PrepareTestEnvironment(fontSpec, settings, 0);
+ TEST(iBitmapDevice->GetNearestFontToDesignHeightInPixels((CFont*&)font,fontSpec) == KErrNone);
+ //Check for the bitmap type to be EFourColourBlendGlyphBitmap when either or both the
+ //EDropShadow or EOutline effects are on.
+ TEST(font->FontSpecInTwips().iFontStyle.BitmapType() == EFourColourBlendGlyphBitmap);
+ iBitmapDevice->ReleaseFont(font);
+
+ settings.fSpecAndGcSettings = EDropShadowOn | ESetAntiAliasedGlyphBitmap;
+ PrepareTestEnvironment(fontSpec, settings, 0);
+ TEST(iBitmapDevice->GetNearestFontToDesignHeightInPixels((CFont*&)font,fontSpec) == KErrNone);
+ //Check for the bitmap type to be EFourColourBlendGlyphBitmap when either or both the
+ //EDropShadow or EOutline effects are on.
+ TEST(font->FontSpecInTwips().iFontStyle.BitmapType() == EFourColourBlendGlyphBitmap);
+ iBitmapDevice->ReleaseFont(font);
+
+ settings.fSpecAndGcSettings = EOutlineOn | ESetAntiAliasedGlyphBitmap;
+ PrepareTestEnvironment(fontSpec, settings, 0);
+ TEST(iBitmapDevice->GetNearestFontToDesignHeightInPixels((CFont*&)font,fontSpec) == KErrNone);
+ //Check for the bitmap type to be EFourColourBlendGlyphBitmap when either or both the
+ //EDropShadow or EOutline effects are on.
+ TEST(font->FontSpecInTwips().iFontStyle.BitmapType() == EFourColourBlendGlyphBitmap);
+ iBitmapDevice->ReleaseFont(font);
+ }
+
+/**
+@SYMTestCaseID GRAPHICS-BITGDI-OUTLINESHA-0014
+
+@SYMPREQ PREQ1543
+
+@SYMTestCaseDesc OOM tests, checks OOM condition for GetNearestFontToDesignHeightInPixels.
+
+@SYMTestPriority Critical
+
+@SYMTestStatus Implemented
+
+@SYMTestActions
+API Calls:
+CFbsBitGc::GetNearestFontToDesignHeightInPixels()
+TFontStyle::SetEffects()
+
+@SYMTestExpectedResults Checks the OOM condition and finds if it takes care of OOM cases for GetNearestFontToDesignHeightInPixels
+*/
+void CTOutlineAndShadowFonts::TestOOML()
+ {
+ INFO_PRINTF1(_L("TestOOML()"));
+ FreeScreenDevice();
+ CreateScreenDeviceL(KDisplayModes[9]); //Create device for EColor16MU
+
+ //OOM for normal text
+ for(TInt fontFaceIndex = 0; fontFaceIndex < KNumOfFontFaces; fontFaceIndex++)
+ {
+ DoOOM(fontFaceIndex, EFalse);
+ }
+ }
+
+/**
+Auxilary function called from TestOOML API
+@SYMTestCaseDesc checks OOM condition for DrawText() and DrawTextVertical().
+@param aFontSpec holds font specifications
+@param aDrawVerticalText holds bool, if true calls DrawTextVertical else calls DrawText api's
+*/
+void CTOutlineAndShadowFonts::DoOOM(TInt aFontIndex, TBool aDrawVerticalText)
+ {
+ __UHEAP_RESET;
+ TFontSpec fSpec;
+ STestFontParameters settings;
+ settings.fSpecAndGcSettings = EDropShadowOn | EOutlineOn | ESetAntiAliasedGlyphBitmap;
+ PrepareTestEnvironment(fSpec, settings, aFontIndex);
+
+ //GetNearestFontToDesignHeightInPixels
+ iFbs->SendCommand(EFbsMessDefaultAllocFail,0);
+ CFont* font = NULL;
+ TEST(iBitmapDevice->GetNearestFontToDesignHeightInPixels(font,fSpec) == KErrNone);
+ TInt ret;
+ iBitmapDevice->ReleaseFont(font);
+ for (TInt count = 1; ; count++)
+ {
+ __UHEAP_SETFAIL(RHeap::EDeterministic,count);
+ __UHEAP_MARK;
+ font=NULL;
+ ret = iBitmapDevice->GetNearestFontToDesignHeightInPixels(font,fSpec);
+ if (ret == KErrNoMemory)
+ {
+ ASSERT(!font);
+ __UHEAP_MARKEND;
+ }
+ else if (ret == KErrNone)
+ {
+ ASSERT(font);
+ iBitmapDevice->ReleaseFont(font);
+ __UHEAP_MARKEND;
+ break;
+ }
+ else
+ {
+ __UHEAP_MARKEND;
+ TEST(ret == KErrNone);
+ }
+ iBitmapDevice->ReleaseFont(font);
+ }
+
+ //DrawText and DrawTextVertical with EDropShadow effect on and EOutline effect off
+ settings.fSpecAndGcSettings = EDropShadowOn | ESetAntiAliasedGlyphBitmap;
+ settings.brushColor = KRgbBlack;
+ settings.penColor = KRgbGreen;
+ settings.shadowColor = KRgbRed;
+ PrepareTestEnvironment(fSpec, settings, aFontIndex, ETrue, ETrue);
+ GetFontAndDrawOOM(fSpec, aDrawVerticalText);
+
+ //DrawText and DrawTextVertical with EDropShadow effect off and EOutline effect on
+ settings.fSpecAndGcSettings = EOutlineOn | ESetAntiAliasedGlyphBitmap;
+ PrepareTestEnvironment(fSpec, settings, aFontIndex, ETrue, ETrue);
+ GetFontAndDrawOOM(fSpec, aDrawVerticalText);
+
+ //DrawText and DrawTextVertical with EDropShadow effect on and EOutline effect on
+ settings.fSpecAndGcSettings = EDropShadowOn | EOutlineOn | ESetAntiAliasedGlyphBitmap;
+ PrepareTestEnvironment(fSpec, settings, aFontIndex, ETrue, ETrue);
+ GetFontAndDrawOOM(fSpec, aDrawVerticalText);
+
+ __UHEAP_RESET;
+ }
+
+/**
+Auxilary function called from DoOOM API
+@SYMTestCaseDesc checks OOM condition for DrawText() and DrawTextVertical().
+@param aFontSpec holds font specifications
+@param aDrawVerticalText holds bool value, if true calls DrawTextVertical else calls DrawText api's
+*/
+void CTOutlineAndShadowFonts::GetFontAndDrawOOM(TFontSpec aFontSpec, TBool aDrawVerticalText)
+ {
+ __UHEAP_RESET;
+ _LIT(KDRAWME,"Outline and Shadow");
+ CFont* font = NULL;
+ iFbs->SendCommand(EFbsMessDefaultAllocFail,0);
+ TInt ret= iBitmapDevice->GetNearestFontToDesignHeightInPixels((CFont*&)font, aFontSpec);
+ TEST(ret == KErrNone);
+ for (TInt count = 1; ; count++)
+ {
+ __UHEAP_SETFAIL(RHeap::EDeterministic,count);
+ __UHEAP_MARK;
+ iGc->UseFont(font);
+ if (aDrawVerticalText)
+ {
+ iGc->DrawTextVertical(KDRAWME, TPoint(3, 4), EFalse);
+ }
+ else
+ {
+ iGc->DrawText(KDRAWME, TPoint(3, 4));
+ }
+ if (ret == KErrNoMemory)
+ {
+ iGc->DrawTextVertical(KDRAWME, TPoint(3, 4), EFalse);
+ __UHEAP_MARKEND;
+ }
+ else if (ret == KErrNone)
+ {
+ ASSERT(font);
+ iBitmapDevice->ReleaseFont(font);
+ iGc->DiscardFont();
+ __UHEAP_MARKEND;
+ break;
+ }
+ else
+ {
+ __UHEAP_MARKEND;
+ TEST(ret == KErrNone);
+ }
+ }
+ }
+
+/**
+@SYMTestCaseID GRAPHICS-BITGDI-OUTLINESHA-0015
+
+@SYMPREQ PREQ2555
+
+@SYMTestCaseDesc Check bitmaptype EAntiAliasedOrMonochromeGlyphBitmap returns the correct actual
+ bitmap type. This test uses the "Series 60 Sans SemiBold" font.
+ Sizes 0-7:monochrome; 8-16:anti-aliased; 16 and above:monochrome.
+
+@SYMTestPriority Normal
+
+@SYMTestStatus Implemented
+
+@SYMTestActions
+Set the font size of the test font to 6, 12, 20 respectively and the bitmap type to EAntiAliasedOrMonochromeGlyphBitmap.
+Then call CFbsDevice::GetNearestFontToDesignHeightInPixels() to return the font and draw a text string on the left side of
+the bitmap. Draw the same string using the reference font on the right side of the bitmap. Use CFbsDevice::RectCompare()
+to compare the two halves of the bitmap.
+
+@SYMTestExpectedResults The two halves should be the same.
+*/
+void CTOutlineAndShadowFonts::TestAntiAliasedOrMonochromeGlyphBitmapL()
+ {
+ iGc->Reset();
+ FreeScreenDevice();
+ CreateScreenDeviceL(EColor64K);
+ _LIT(KGaspTypefaceName, "Series 60 Sans SemiBold");
+ TFontSpec testFontSpec;
+ testFontSpec.iTypeface.iName = KGaspTypefaceName;
+ testFontSpec.iFontStyle.SetBitmapType(EAntiAliasedOrMonochromeGlyphBitmap);
+ TFontSpec refFontSpec;
+ refFontSpec.iTypeface.iName = KGaspTypefaceName;
+
+ TInt fontsizes[3] = {6, 12, 20};
+ CFont* testFont;
+ CFont* refFont;
+ TPoint leftMidPoint = TPoint(KScreenWidth/4, KScreenHeight/2);
+ TPoint rightMidPoint = TPoint(KScreenWidth*3/4, KScreenHeight/2);
+ _LIT(KTestString, "Abcde");
+
+ //anti-aliased
+ testFontSpec.iHeight = fontsizes[0];
+ refFontSpec.iHeight = fontsizes[0];
+ refFontSpec.iFontStyle.SetBitmapType(EAntiAliasedGlyphBitmap);
+ User::LeaveIfError(iBitmapDevice->GetNearestFontToDesignHeightInPixels((CFont*&)testFont,testFontSpec));
+ iGc->UseFont(testFont);
+ iGc->DrawText(KTestString, leftMidPoint);
+ User::LeaveIfError(iBitmapDevice->GetNearestFontToDesignHeightInPixels((CFont*&)refFont,refFontSpec));
+ iGc->UseFont(refFont);
+ iGc->DrawText(KTestString, rightMidPoint);
+ TEST(iBitmapDevice->RectCompare(TRect(0,0,KScreenWidth>>1,KScreenHeight), *iBitmapDevice, TRect(KScreenWidth>>1,0,KScreenWidth,KScreenHeight)));
+ iBitmapDevice->ReleaseFont(testFont);
+ iBitmapDevice->ReleaseFont(refFont);
+
+ //monochrome
+ iGc->Clear();
+ testFontSpec.iHeight = fontsizes[1];
+ refFontSpec.iHeight = fontsizes[1];
+ refFontSpec.iFontStyle.SetBitmapType(EMonochromeGlyphBitmap);
+ User::LeaveIfError(iBitmapDevice->GetNearestFontToDesignHeightInPixels((CFont*&)testFont,testFontSpec));
+ iGc->UseFont(testFont);
+ iGc->DrawText(KTestString, leftMidPoint);
+ User::LeaveIfError(iBitmapDevice->GetNearestFontToDesignHeightInPixels((CFont*&)refFont,refFontSpec));
+ iGc->UseFont(refFont);
+ iGc->DrawText(KTestString, rightMidPoint);
+ TEST(iBitmapDevice->RectCompare(TRect(0,0,KScreenWidth>>1,KScreenHeight), *iBitmapDevice, TRect(KScreenWidth>>1,0,KScreenWidth,KScreenHeight)));
+ iBitmapDevice->ReleaseFont(testFont);
+ iBitmapDevice->ReleaseFont(refFont);
+
+ //anti-aliased
+ iGc->Clear();
+ testFontSpec.iHeight = fontsizes[2];
+ refFontSpec.iHeight = fontsizes[2];
+ refFontSpec.iFontStyle.SetBitmapType(EAntiAliasedGlyphBitmap);
+ User::LeaveIfError(iBitmapDevice->GetNearestFontToDesignHeightInPixels((CFont*&)testFont,testFontSpec));
+ iGc->UseFont(testFont);
+ iGc->DrawText(KTestString, leftMidPoint);
+ User::LeaveIfError(iBitmapDevice->GetNearestFontToDesignHeightInPixels((CFont*&)refFont,refFontSpec));
+ iGc->UseFont(refFont);
+ iGc->DrawText(KTestString, rightMidPoint);
+ TEST(iBitmapDevice->RectCompare(TRect(0,0,KScreenWidth>>1,KScreenHeight), *iBitmapDevice, TRect(KScreenWidth>>1,0,KScreenWidth,KScreenHeight)));
+ iBitmapDevice->ReleaseFont(testFont);
+ iBitmapDevice->ReleaseFont(refFont);
+ }
+/**
+Sets the fontspec and gc attributes according to the flags set in STestFontParameters for the test.
+Before setting gc attributes it is cleared and reset.
+@param aFontSpec holds all effective font settings
+@param aSettings holds the flags for setting the fontspec and gc
+@param aFontIndex the fonts index of KFontFace to be set as typeface
+@param aSetEffects ETrue will set the effects on in fontspec if their flags are enabled. By default it is ETrue.
+@param aSetColors ETrue will set the colours in gc from STestFontParameters. By default it is EFalse.
+*/
+void CTOutlineAndShadowFonts::PrepareTestEnvironment(TFontSpec &aFontSpec, const STestFontParameters &aSettings, const TInt aFontIndex, TBool aSetEffects, TBool aSetColors)
+ {
+ //Set the typeface from the font face array
+ aFontSpec.iTypeface.iName = KFontFace[aFontIndex];
+ aFontSpec.iHeight = KHeight;
+
+ //Set the effects on if any of flags for the effects are set in aSettings and aSetEffects is ETrue
+ if(aSetEffects)
+ {
+ aFontSpec.iFontStyle.SetEffects(FontEffect::EDropShadow, EDropShadowOn & aSettings.fSpecAndGcSettings);
+ aFontSpec.iFontStyle.SetEffects(FontEffect::EOutline, EOutlineOn & aSettings.fSpecAndGcSettings);
+ aFontSpec.iFontStyle.SetEffects(FontEffect::ESoftEdge, ESoftEdgeOn & aSettings.fSpecAndGcSettings);
+ aFontSpec.iFontStyle.SetEffects(FontEffect::EAlgorithmicBold, EAlgorithmicBoldOn & aSettings.fSpecAndGcSettings);
+ }
+
+ iGc->Reset();
+ iGc->Clear();
+ iGc->SetStrikethroughStyle((EIsStrikethroughOn & aSettings.fSpecAndGcSettings) ? EStrikethroughOn : EStrikethroughOff);
+ iGc->SetUnderlineStyle((EIsUnderlineOn & aSettings.fSpecAndGcSettings) ? EUnderlineOn : EUnderlineOff);
+
+ //Set the glyph bitmap type
+ if(ESetMonochromeGlyphBitmap & aSettings.fSpecAndGcSettings)
+ {
+ aFontSpec.iFontStyle.SetBitmapType(EMonochromeGlyphBitmap);
+ }
+ else if(ESetAntiAliasedGlyphBitmap & aSettings.fSpecAndGcSettings)
+ {
+ aFontSpec.iFontStyle.SetBitmapType(EAntiAliasedGlyphBitmap);
+ }
+
+ //Set the colours in gc if asked for
+ if(aSetColors)
+ {
+ iGc->SetBrushColor(aSettings.brushColor);
+ iGc->SetPenColor(aSettings.penColor);
+ iGc->SetShadowColor(aSettings.shadowColor);
+ }
+ }
+
+void CTOutlineAndShadowFonts::RunTestCaseL(TInt aCurTestCase)
+ {
+ ((CTOutlineAndShadowFontsStep*)iStep)->SetTestStepID(KUnknownSYMTestCaseIDName);
+ switch (aCurTestCase)
+ {
+ case 1:
+ {
+/**
+@SYMTestCaseID GRAPHICS-BITGDI-OUTLINESHA-0007
+*/
+ ((CTOutlineAndShadowFontsStep*)iStep)->SetTestStepID(_L("GRAPHICS-BITGDI-OUTLINESHA-0007"));
+ CheckMonoTypeInstalledL();
+ break;
+ }
+ case 2:
+ {
+ ((CTOutlineAndShadowFontsStep*)iStep)->SetTestStepID(_L("GRAPHICS-BITGDI-OUTLINESHA-0008"));
+ TestOutlineandShadowFontsMetricsL();
+ break;
+ }
+ case 3:
+ {
+ ((CTOutlineAndShadowFontsStep*)iStep)->SetTestStepID(_L("GRAPHICS-BITGDI-OUTLINESHA-0009"));
+ TestOutlinePenAndShadowColorL();
+ break;
+ }
+ case 4:
+ {
+ ((CTOutlineAndShadowFontsStep*)iStep)->SetTestStepID(_L("GRAPHICS-BITGDI-OUTLINESHA-0010"));
+ TestDrawTextWithOutlineAndShadowL();
+ break;
+ }
+ case 5:
+ {
+ ((CTOutlineAndShadowFontsStep*)iStep)->SetTestStepID(_L("GRAPHICS-BITGDI-OUTLINESHA-0011"));
+ TestDrawTextWithStrikeThroughL();
+ break;
+ }
+ case 6:
+ {
+ ((CTOutlineAndShadowFontsStep*)iStep)->SetTestStepID(_L("GRAPHICS-BITGDI-OUTLINESHA-0012"));
+ NegativeRastTestL();
+ break;
+ }
+ case 7:
+ {
+ ((CTOutlineAndShadowFontsStep*)iStep)->SetTestStepID(_L("GRAPHICS-BITGDI-OUTLINESHA-0013"));
+ TestCheckBitmapTypesL();
+ break;
+ }
+ case 8:
+ {
+ ((CTOutlineAndShadowFontsStep*)iStep)->SetTestStepID(_L("GRAPHICS-BITGDI-OUTLINESHA-0015"));
+ TestAntiAliasedOrMonochromeGlyphBitmapL();
+ break;
+ }
+ case 9:
+ {
+ ((CTOutlineAndShadowFontsStep*)iStep)->SetTestStepID(_L("GRAPHICS-BITGDI-OUTLINESHA-0014"));
+ TestOOML();
+ break;
+ }
+ default:
+ {
+ ((CTOutlineAndShadowFontsStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName);
+ ((CTOutlineAndShadowFontsStep*)iStep)->CloseTMSGraphicsStep();
+ TestComplete();
+ break;
+ }
+ }
+ ((CTOutlineAndShadowFontsStep*)iStep)->RecordTestResultL();
+ }
+
+//--------------
+__CONSTRUCT_STEP__(OutlineAndShadowFonts)