lafagnosticuifoundation/cone/tef/TConeTextDrawer.cpp
changeset 0 2f259fa3e83a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lafagnosticuifoundation/cone/tef/TConeTextDrawer.cpp	Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,185 @@
+// 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
+ @internalComponent - Internal Symbian test code 
+*/
+
+#include "TCone7Step.h"
+
+
+/**
+This test will draw a multi-line TBidiText clockwise one and a half laps from top left
+to top right (via bottom right to bottom left), in 9 steps.
+It draws a rectangle around clipping area (if any)  
+*/
+TBool CCtlTestTextDrawer::TestTextDrawer(TInt aTextIndex, TBool aHorizontal, TRect *aClipRect, TRgb* aTextCol, TBool aCleanBackground, TBool aUp)
+	{	
+	ActivateGc();
+	CWindowGc& gc = SystemGc();
+	TRect rect = Rect();
+	if(aCleanBackground)
+		{
+		gc.Clear(rect);
+		}
+	TRgb textColor = aTextCol ? *aTextCol : KRgbBlack;
+	
+	CCoePlainTextDrawer* plainTextDrawer = CCoePlainTextDrawer::New(textColor);
+	XCoeTextDrawer textDrawer(*plainTextDrawer);
+	textDrawer.SetClipRect(aClipRect ? *aClipRect : rect);
+
+	if(aClipRect)
+		{
+		gc.SetPenColor(KRgbRed);
+		gc.DrawRect(*aClipRect);
+		gc.SetPenColor(textColor);
+		}
+		
+	TMargins8 margin;
+	margin.iLeft = 10;
+	margin.iRight = 20;
+	margin.iTop = 30;
+	margin.iBottom = 50;
+
+	textDrawer.SetMargins(margin);
+	TSize deltaMargin = margin.SizeDelta();
+
+	if(deltaMargin != TSize(0, 0)) 
+		{
+		TRect marginRect;
+		if(aHorizontal)
+			{
+			marginRect = margin.InnerRect(rect);
+			}
+		else
+			{//adjust matgins border to rotated text
+			marginRect = rect;
+			if(aUp)
+				{
+				marginRect.iTl.iX += margin.iTop;
+				marginRect.iTl.iY += margin.iRight;
+				marginRect.iBr.iX -= margin.iBottom;
+				marginRect.iBr.iY -= margin.iLeft;
+				}
+			else
+				{
+				marginRect.iTl.iX += margin.iBottom;
+				marginRect.iTl.iY += margin.iLeft;
+				marginRect.iBr.iX -= margin.iTop;
+				marginRect.iBr.iY -= margin.iRight;
+				}
+			}
+		gc.DrawRect(marginRect);
+		}
+	
+	TGulAlignment textAlign;
+	switch(aTextIndex)
+		{
+		// Test left, center, and right alignment with no application language set.
+		// This should result in left, center, and right alignment, as the script is LeftToRight (English).
+	case 0:
+		textAlign = TGulAlignment(EHLeftVTop);
+		break;
+	case 1:
+		textAlign = TGulAlignment(EHCenterVTop);
+		break;
+	case 2:
+		textAlign = TGulAlignment(EHRightVTop);
+		break;
+		
+		// Test left, center, and right MIRRORED alignment with Hebrew (RightToLeft) application language set.
+		// This shall result in the text being aligned right, center, and left, rather than the other way around
+	case 3:
+		textAlign = TGulAlignment(EHLeftVBottom);
+		plainTextDrawer->SetAppLanguage(ELangHebrew);
+		break;
+	case 4:
+		textAlign = TGulAlignment(EHCenterVBottom);
+		plainTextDrawer->SetAppLanguage(ELangHebrew);
+		break;
+	case 5:
+		textAlign = TGulAlignment(EHRightVBottom);
+		plainTextDrawer->SetAppLanguage(ELangHebrew);
+		break;
+		
+		// Test ABSOLUTE left, center, and right alignment with Hebrew (RightToLeft) application language set.
+		// This shall result in NO mirroring, i.e. text being displayed left, center, right.
+	case 6:
+		textAlign = TGulAlignment(EHLeftVTop);
+		textAlign.SetAbsoluteHAlignment(ETrue);
+		plainTextDrawer->SetAppLanguage(ELangHebrew);
+		break;
+	case 7:
+		textAlign = TGulAlignment(EHCenterVTop);
+		textAlign.SetAbsoluteHAlignment(ETrue);
+		plainTextDrawer->SetAppLanguage(ELangHebrew);
+		break;
+	case 8:
+		textAlign = TGulAlignment(EHRightVTop);
+		textAlign.SetAbsoluteHAlignment(ETrue);
+		plainTextDrawer->SetAppLanguage(ELangHebrew);
+		break;
+	default:
+		ASSERT(0);	
+		};
+
+
+	textDrawer->SetAlignment(textAlign);
+	
+	TBidiText* bidiText = TBidiText::NewL(KMultipleLineText(), 4);
+	bidiText->WrapText(rect.Width(), *iFont);
+	aHorizontal ?
+			textDrawer.DrawText(gc, *bidiText, rect, *iFont) :
+			textDrawer.DrawTextVertical(gc, *bidiText, rect, *iFont, aUp);
+	
+	delete bidiText;
+	
+	DeactivateGc();
+	iCoeEnv->Flush();
+	
+	return (textColor == textDrawer->TextColor());
+	}
+
+void CCtlTestTextDrawer::WidthOfText(TInt aLine, TInt& aWidthInPixels) const
+	{
+	TPtrC textInGivenLine(TCoeTextTypeAdaptor(KMultipleLineText).LineOfText(aLine, aWidthInPixels, *iFont));
+	}
+
+CCtlTestTextDrawer::CCtlTestTextDrawer()
+	{
+	}
+
+const CFont& CCtlTestTextDrawer::FontUsed() const
+	{
+	return *iFont;
+	}
+	
+CCtlTestTextDrawer::~CCtlTestTextDrawer()
+	{
+	iCoeEnv->ReleaseScreenFont(iFont);
+	}
+
+void CCtlTestTextDrawer::ConstructL()
+	{
+	TFontSpec fs;
+	_LIT(KTextFont,"DejaVu Sans Mono");
+	fs.iTypeface.iName = KTextFont;
+	fs.iHeight = 150;
+	iFont = iCoeEnv->CreateScreenFontL(fs);
+	CreateWindowL();
+	Window().SetBackgroundColor(KRgbCyan);
+	}
+