windowing/windowserver/tman/TTEXT.CPP
changeset 0 5d03bc08d59c
--- /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);
+	}
+