diff -r bf7481649c98 -r 2717213c588a windowing/windowserver/test/tman/TTEXT.CPP --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/windowing/windowserver/test/tman/TTEXT.CPP Tue Jun 22 15:21:29 2010 +0300 @@ -0,0 +1,265 @@ +// Copyright (c) 1995-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: +// Print some text, to be checked by eye +// +// + +#include +#include +#include "W32STD.H" +#include "../tlib/testbase.h" +#include "TMAN.H" + +class TTextTest; + +enum {EDrawModeFonts,EDrawModeCharJust,EDrawModeWordJust}; + +_LIT(KTestFontTypefaceName,"DejaVu Sans Condensed"); + +class CTextWindow : public CTWin + { +public: + CTextWindow(TTextTest *aTest); + void SetUpLD(TPoint pos,TSize size,CTWinBase *parent, CWindowGc &aGc); + void Draw(); + void WinKeyL(const TKeyEvent &aKey,const TTime &aTime); + void ResetPrintLine(); + void Print(const CFont *aFont, const TDesC &aText); + void PrintLine(const CFont *aFont, const TDesC &aText); + void PrintDivider(); + void PrintStylesL(const TDesC &aText, TFontSpec &aFontSpec, const TFontStyle &aFontStyle); + void DrawCharJustified(const TDesC &aText); + void DrawWordJustified(const TDesC &aText); + TBool NextPage(); + void SetDrawMode(TInt aMode); +private: + TInt iDrawMode; + TTextTest *iTest; + CFbsFont *iTmpFont; + TInt iNumTypeFaces; + TInt iTypeFaceIndex; + TInt iXStartPos; + TInt iYpos; + TInt iXpos; + }; + +class TTextTest : public CTestBase + { +public: + TTextTest(); + ~TTextTest(); + TestState DoTestL(); + void ConstructL(); +private: + CTextWindow *iWin; + TSize iWinSize; + TInt iState; + }; + +GLDEF_C CTestBase *CreateTextTest() + { + return(new(ELeave) TTextTest()); + } + +CTextWindow::CTextWindow(TTextTest *aTest) : CTWin(), iDrawMode(EDrawModeWordJust), iTest(aTest) + {} + +void CTextWindow::SetUpLD(TPoint pos,TSize size,CTWinBase *parent, CWindowGc &aGc) + { + ConstructExtLD(*parent,pos,size); + Activate(); + AssignGC(aGc); + iNumTypeFaces=Client()->iScreen->NumTypefaces(); + } + +void CTextWindow::ResetPrintLine() + { + iXpos=iXStartPos=5; + iYpos=2; + } + +void CTextWindow::PrintDivider() + { + iGc->DrawLine(TPoint(0,iYpos+5),TPoint(Size().iWidth,iYpos+5)); + iYpos+=10; + } + +void CTextWindow::Print(const CFont *aFont, const TDesC &aText) + { + iGc->DrawText(aText, TPoint(iXpos, iYpos+aFont->AscentInPixels())); + iXpos+=aFont->TextWidthInPixels(aText); + } + +void CTextWindow::PrintLine(const CFont *aFont, const TDesC &aText) + { + iGc->DrawText(aText, TPoint(iXpos, iYpos+aFont->AscentInPixels())); + iXpos=iXStartPos; + iYpos+=aFont->HeightInPixels()+2; + } + +TBool CTextWindow::NextPage() + { + if (iTypeFaceIndex==(iNumTypeFaces-1)) + return(ETrue); + ++iTypeFaceIndex; + return(EFalse); + } + +void CTextWindow::PrintStylesL(const TDesC &aText, TFontSpec &aFontSpec, const TFontStyle &aFontStyle) + { + aFontSpec.iFontStyle=aFontStyle; + User::LeaveIfError(Client()->iScreen->GetNearestFontToDesignHeightInTwips((CFont *&)iTmpFont, aFontSpec)); + iGc->UseFont(iTmpFont); + Print(iTmpFont,aText); + iGc->SetUnderlineStyle(EUnderlineOn); + Print(iTmpFont,_L("Underline, ")); + iGc->SetStrikethroughStyle(EStrikethroughOn); + Print(iTmpFont,_L("Strikethrough/underline, ")); + iGc->SetUnderlineStyle(EUnderlineOff); + PrintLine(iTmpFont,_L("Strikethrough")); + iGc->SetStrikethroughStyle(EStrikethroughOff); + Client()->iScreen->ReleaseFont(iTmpFont); + iTmpFont=NULL; + } + +void CTextWindow::DrawCharJustified(const TDesC &aText) + { + iGc->SetCharJustification(Size().iWidth-10-iTmpFont->TextWidthInPixels(aText),aText.Length()-1); + PrintLine(iTmpFont, aText); + } + +void CTextWindow::DrawWordJustified(const TDesC &aText) + { + TInt count=0; + for(TInt index=0;indexSetWordJustification(Size().iWidth-10-iTmpFont->TextWidthInPixels(aText),count); + PrintLine(iTmpFont, aText); + } + +void CTextWindow::Draw() +//This function is virtual and so cannot have an 'L' at the end of it's name + { + iGc->Clear(); + ResetPrintLine(); + switch(iDrawMode) + { + case EDrawModeWordJust: + User::LeaveIfError(Client()->iScreen->GetNearestFontToDesignHeightInTwips((CFont *&)iTmpFont, TFontSpec(KTestFontTypefaceName,200))); + iGc->UseFont(iTmpFont); + DrawWordJustified(_L("Hello World")); + DrawWordJustified(_L("One Two Three Four Five Six Seven")); + DrawWordJustified(_L("AA B CC D")); + DrawWordJustified(_L("ONEWORD")); + iGc->DiscardFont(); + Client()->iScreen->ReleaseFont(iTmpFont); + iTmpFont=NULL; + break; + case EDrawModeCharJust: + User::LeaveIfError(Client()->iScreen->GetNearestFontToDesignHeightInTwips((CFont *&)iTmpFont, TFontSpec(KTestFontTypefaceName,200))); + iGc->UseFont(iTmpFont); + DrawCharJustified(_L("Hello World")); + DrawCharJustified(_L("One Two Three Four Five Six Seven")); + DrawCharJustified(_L("AA B CC D")); + DrawCharJustified(_L("ONEWORD")); + iGc->DiscardFont(); + Client()->iScreen->ReleaseFont(iTmpFont); + iTmpFont=NULL; + break; + case EDrawModeFonts: + { + TTypefaceSupport typefaceSupport; + Client()->iScreen->TypefaceSupport(typefaceSupport,iTypeFaceIndex); + TBuf<0x40> title; + TBuf16 tmpBuf; + tmpBuf.Copy(typefaceSupport.iTypeface.iName); + title.Append(tmpBuf); + title.AppendFormat(TRefByValue(_L(", Heights (Min=%d, Max=%d, Num=%d)")),typefaceSupport.iMinHeightInTwips,typefaceSupport.iMaxHeightInTwips,typefaceSupport.iNumHeights); + PrintLine(iFont,title); + PrintDivider(); + for (TInt tfHeight=0;tfHeightiScreen->FontHeightInTwips(iTypeFaceIndex,tfHeight)); + PrintStylesL(_L("Normal, "), fspec, TFontStyle()); + PrintStylesL(_L("Bold, "), fspec, TFontStyle(EPostureUpright,EStrokeWeightBold,EPrintPosNormal)); + PrintStylesL(_L("Italic, "), fspec, TFontStyle(EPostureItalic,EStrokeWeightNormal,EPrintPosNormal)); + PrintStylesL(_L("Bold/italic, "), fspec, TFontStyle(EPostureItalic,EStrokeWeightBold,EPrintPosNormal)); + if (iYpos>Size().iHeight) + break; + } + } + break; + } + } + +void CTextWindow::WinKeyL(const TKeyEvent &aKey,const TTime &) + { + if (iDrawMode!=EDrawModeFonts || (aKey.iCode==EKeyEscape || NextPage())) + CActiveScheduler::Stop(); + else + iWin.Invalidate(); + } + +void CTextWindow::SetDrawMode(TInt aDrawMode) + { + iDrawMode=aDrawMode; + iWin.Invalidate(); + } + +TTextTest::TTextTest() : CTestBase(_L("Text")) + {} + +TTextTest::~TTextTest() + { + CTWin::Delete(iWin); + } + +void TTextTest::ConstructL() + { + CTextWindow *win=new(ELeave) CTextWindow(this); + win->SetUpLD(TPoint(0,0),Client()->iScreen->SizeInPixels(),Client()->iGroup,*Client()->iGc); + iWin=win; + Client()->iGroup->SetCurrentWindow(iWin); + Client()->iGroup->GroupWin()->SetOrdinalPosition(0); + } + +TestState TTextTest::DoTestL() + { + switch(iState) + { + case 0: + LogSubTest(_L("SetWordJustification"),1); + iWin->SetDrawMode(EDrawModeWordJust); + CActiveScheduler::Start(); + iState++; + break; + case 1: + LogSubTest(_L("SetCharJustification"),2); + iWin->SetDrawMode(EDrawModeCharJust); + CActiveScheduler::Start(); + iState++; + break; + case 2: + LogSubTest(_L("Text 1"),3); + iWin->SetDrawMode(EDrawModeFonts); + CActiveScheduler::Start(); + iState++; + break; + default: + return(EFinished); + } + return(ENext); + } +