--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/windowing/windowserver/tman/TTEXT.CPP Tue Feb 02 01:47:50 2010 +0200
@@ -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 <e32std.h>
+#include <e32svr.h>
+#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;index<aText.Length();index++)
+ if (aText[index]==' ')
+ count++;
+ iGc->SetWordJustification(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<KMaxTypefaceNameLength> tmpBuf;
+ tmpBuf.Copy(typefaceSupport.iTypeface.iName);
+ title.Append(tmpBuf);
+ title.AppendFormat(TRefByValue<const TDesC>(_L(", Heights (Min=%d, Max=%d, Num=%d)")),typefaceSupport.iMinHeightInTwips,typefaceSupport.iMaxHeightInTwips,typefaceSupport.iNumHeights);
+ PrintLine(iFont,title);
+ PrintDivider();
+ for (TInt tfHeight=0;tfHeight<typefaceSupport.iNumHeights;tfHeight++)
+ {
+ TFontSpec fspec(typefaceSupport.iTypeface.iName,Client()->iScreen->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);
+ }
+