textrendering/textformatting/tagma/TMFORWRD.CPP
changeset 32 8b9155204a54
parent 0 1fb32624e06b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textrendering/textformatting/tagma/TMFORWRD.CPP	Fri Jun 04 10:37:54 2010 +0100
@@ -0,0 +1,358 @@
+/*
+* Copyright (c) 1999-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: 
+* MTmTextLayoutForwarder functions.
+*
+*/
+
+
+#include "TAGMA.H"
+
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include "TAGMA_INTERNAL.H"
+#endif
+
+/**
+Return the number of lines in the text.
+*/
+EXPORT_C TInt MTmTextLayoutForwarder::Lines() const
+	{
+	return TextLayout().Lines();
+	}
+
+/**
+Return the number of paragraphs in the text.
+*/
+EXPORT_C TInt MTmTextLayoutForwarder::Paragraphs() const
+	{
+	return TextLayout().Paragraphs();
+	}
+
+/**
+Return the displayed form of the text for a particular line. See CTmLayout::GetDisplayedText for details.
+*/
+EXPORT_C TBool MTmTextLayoutForwarder::GetDisplayedText(TInt aLineNumber,TDes& aText,TInt& aNeeded) const
+	{
+	return TextLayout().GetDisplayedText(aLineNumber,aText,aNeeded);
+	}
+
+/**
+Get the minimum size of the formatted text. See CTmTextLayout::GetMinimumLayoutSizeL for details.
+*/
+EXPORT_C void MTmTextLayoutForwarder::GetMinimumLayoutSizeL(TInt aWrapWidth,TSize& aSize) const
+	{
+	TextLayout().GetMinimumLayoutSizeL(aWrapWidth,aSize);
+	}
+
+/**
+Get the minimum size of the formatted text. See CTmTextLayout::GetMinimumLayoutSizeL for details.
+*/
+EXPORT_C void MTmTextLayoutForwarder::GetMinimumLayoutSizeL(TInt aWrapWidth,TBool aAllowLegalLineBreaksOnly,TSize& aSize) const
+	{
+	TextLayout().GetMinimumLayoutSizeL(aWrapWidth,aAllowLegalLineBreaksOnly,aSize);
+	}
+
+/**
+Return the first formatted character.
+*/
+EXPORT_C TInt MTmTextLayoutForwarder::StartChar() const
+	{
+	return TextLayout().StartChar();
+	}
+
+/**
+Return the character after the last formatted character.
+*/
+EXPORT_C TInt MTmTextLayoutForwarder::EndChar() const
+	{
+	return TextLayout().EndChar();
+	}
+
+/**
+Return the width in pixels of the formatted text, not including paragraph labels if present.
+*/
+EXPORT_C TInt MTmTextLayoutForwarder::LayoutWidth() const
+	{
+	return TextLayout().LayoutWidth();
+	}
+
+/**
+Return the height in pixels of the formatted text.
+*/
+EXPORT_C TInt MTmTextLayoutForwarder::LayoutHeight() const
+	{
+	return TextLayout().LayoutHeight();
+	}
+
+EXPORT_C void MTmTextLayoutForwarder::DrawLayout(CGraphicsContext& aGc,const TPoint& aTopLeft,const TRect& aClipRect,
+												 const TLogicalRgb* aDocBackground,TBool aDrawParBackground) const
+	{
+	TPoint origin;
+	GetOrigin(origin);
+	TextLayout().DrawLayout(aGc,aTopLeft + origin,aClipRect,aDocBackground,aDrawParBackground);
+	}
+
+EXPORT_C void MTmTextLayoutForwarder::DrawBackground(CGraphicsContext& aGc,const TPoint& aTopLeft,
+													 const TRect& aClipRect,const TLogicalRgb& aBackground) const
+	{
+	TPoint origin;
+	GetOrigin(origin);
+	TextLayout().DrawBackground(aGc,aTopLeft + origin,aClipRect,aBackground);
+	}
+
+EXPORT_C void MTmTextLayoutForwarder::InvertLayout(CGraphicsContext& aGc,const TPoint& aTopLeft,
+												   TInt aStartDocPos,TInt aEndDocPos)
+	{
+	TPoint origin;
+	GetOrigin(origin);
+	TextLayout().InvertLayout(aGc,aTopLeft + origin,aStartDocPos,aEndDocPos);
+	}
+
+EXPORT_C TBool MTmTextLayoutForwarder::FindDocPos(const TTmDocPosSpec& aDocPos,
+	TTmPosInfo2& aPosInfo, TTmLineInfo& aLineInfo) const
+	{
+	TPoint origin;
+	GetOrigin(origin);
+	TBool result = TextLayout().FindDocPos(aDocPos,aPosInfo,aLineInfo);
+	if (origin.iX || origin.iY)
+		{
+		FixUpLineInfo(aLineInfo,&origin);
+		aPosInfo.iEdge += origin;
+		}
+	return result;
+	}
+
+/** @deprecated 7.0s */
+EXPORT_C TBool MTmTextLayoutForwarder::FindDocPos(const TTmDocPos& aDocPos,TTmPosInfo& aPosInfo,
+												  TTmLineInfo& aLineInfo) const
+	{
+	TTmDocPosSpec dp = aDocPos;
+	TTmPosInfo2 pi;
+	TBool r = FindDocPos(dp, pi, aLineInfo);
+	aPosInfo = pi;
+	return r;
+	}
+
+EXPORT_C TBool MTmTextLayoutForwarder::FindXyPos(const TPoint& aXyPos,
+	TTmPosInfo2& aPosInfo,TTmLineInfo& aLineInfo) const
+	{
+	TPoint origin;
+	GetOrigin(origin);
+	TBool result = TextLayout().FindXyPos(aXyPos - origin,aPosInfo,aLineInfo);
+	if (origin.iX || origin.iY)
+		{
+		FixUpLineInfo(aLineInfo,&origin);
+		aPosInfo.iEdge += origin;
+		}
+	return result;
+	}
+
+EXPORT_C TBool MTmTextLayoutForwarder::FindXyPosWithDisambiguation(
+	const TPoint& aXyPos, TTmPosInfo2& aPosLeft, TTmPosInfo2& aPosRight,
+	TTmLineInfo& aLineInfo) const
+	{
+	TPoint origin;
+	GetOrigin(origin);
+	TBool result = TextLayout().FindXyPosWithDisambiguation(aXyPos - origin,
+		aPosLeft, aPosRight, aLineInfo);
+	if (origin.iX || origin.iY)
+		{
+		FixUpLineInfo(aLineInfo, &origin);
+		aPosLeft.iEdge += origin;
+		aPosRight.iEdge += origin;
+		}
+	return result;
+	}
+
+EXPORT_C TBool MTmTextLayoutForwarder::GetNextPosLeftWithDisambiguation(
+	const TTmDocPosSpec& aDocPos,
+	TTmPosInfo2& aPosLeft, TTmPosInfo2& aPosRight) const
+	{
+	TPoint origin;
+	GetOrigin(origin);
+	TBool result = TextLayout().GetNextPosLeftWithDisambiguation(aDocPos,
+		aPosLeft, aPosRight);
+	if (origin.iX || origin.iY)
+		{
+		aPosLeft.iEdge += origin;
+		aPosRight.iEdge += origin;
+		}
+	return result;
+	}
+
+EXPORT_C TBool MTmTextLayoutForwarder::GetNextPosRightWithDisambiguation(
+	const TTmDocPosSpec& aDocPos,
+	TTmPosInfo2& aPosLeft, TTmPosInfo2& aPosRight) const
+	{
+	TPoint origin;
+	GetOrigin(origin);
+	TBool result = TextLayout().GetNextPosRightWithDisambiguation(aDocPos,
+		aPosLeft, aPosRight);
+	if (origin.iX || origin.iY)
+		{
+		aPosLeft.iEdge += origin;
+		aPosRight.iEdge += origin;
+		}
+	return result;
+	}
+
+/** @deprecated 7.0s */
+EXPORT_C TBool MTmTextLayoutForwarder::FindXyPos(const TPoint& aXyPos,TTmPosInfo& aPosInfo,TTmLineInfo& aLineInfo) const
+	{
+	TTmPosInfo2 pi;
+	TBool r = FindXyPos(aXyPos, pi, aLineInfo);
+	aPosInfo = pi;
+	return r;
+	}
+
+EXPORT_C TBool MTmTextLayoutForwarder::DocPosToLine(
+	const TTmDocPosSpec& aDocPos, TTmLineInfo& aLineInfo) const
+	{
+	TBool result = TextLayout().DocPosToLine(aDocPos,aLineInfo);
+	FixUpLineInfo(aLineInfo);
+	return result;
+	}
+
+/** @deprecated 7.0s */
+EXPORT_C TBool MTmTextLayoutForwarder::DocPosToLine(const TTmDocPos& aDocPos,TTmLineInfo& aLineInfo) const
+	{
+	TTmDocPosSpec dp = aDocPos;
+	return DocPosToLine(dp, aLineInfo);
+	}
+
+EXPORT_C TBool MTmTextLayoutForwarder::LineNumberToLine(TInt aLineNumber,TTmLineInfo& aLineInfo) const
+	{
+	TBool result = TextLayout().LineNumberToLine(aLineNumber,aLineInfo);
+	FixUpLineInfo(aLineInfo);
+	return result;
+	}
+
+EXPORT_C TBool MTmTextLayoutForwarder::ParNumberToLine(TInt aParNumber,TInt aLineInPar,TTmLineInfo& aLineInfo) const
+	{
+	TBool result = TextLayout().ParNumberToLine(aParNumber,aLineInPar,aLineInfo);
+	FixUpLineInfo(aLineInfo);
+	return result;
+	}
+
+EXPORT_C TBool MTmTextLayoutForwarder::YPosToLine(TInt aYPos,TTmLineInfo& aLineInfo) const
+	{
+	TPoint origin;
+	GetOrigin(origin);
+	TBool result = TextLayout().YPosToLine(aYPos - origin.iY,aLineInfo);
+	if (origin.iX || origin.iY)
+		FixUpLineInfo(aLineInfo,&origin);
+	return result;
+	}
+
+EXPORT_C TInt MTmTextLayoutForwarder::WidthOfWidestLine(TInt aTop,TInt aBottom) const
+	{
+	TPoint origin;
+	GetOrigin(origin);
+	aTop -= origin.iY;
+	aBottom -= origin.iY;
+	return TextLayout().WidthOfWidestLine(aTop,aBottom);
+	}
+
+EXPORT_C void MTmTextLayoutForwarder::HorizontalExtremes(
+	TInt &aLeft, TInt &aRight, TInt aTopY, TInt aBottomY) const
+	{
+	TPoint origin;
+	GetOrigin(origin);
+	aTopY -= origin.iY;
+	aBottomY -= origin.iY;
+	TextLayout().HorizontalExtremes(aLeft, aRight, aTopY, aBottomY);
+	if (aLeft != KMaxTInt)
+		aLeft += origin.iX;
+	if (aRight != KMinTInt)
+		aRight += origin.iX;
+	}
+
+EXPORT_C TBool MTmTextLayoutForwarder::GetNextVisualCursorPos(
+	const TTmDocPosSpec& aDocPos, TTmPosInfo2& aInfo, TBool aToLeft) const
+	{
+	TBool result = TextLayout().GetNextVisualCursorPos(aDocPos,aInfo,aToLeft);
+	TPoint origin;
+	GetOrigin(origin);
+	aInfo.iEdge += origin;
+	return result;
+	}
+
+/** deprecated 7.0s */
+EXPORT_C TBool MTmTextLayoutForwarder::GetNextVisualCursorPos(const TTmDocPos& aDocPos,TTmPosInfo& aInfo,
+															  TBool aToLeft) const
+	{
+	TBool result = TextLayout().GetNextVisualCursorPos(aDocPos,aInfo,aToLeft);
+	TPoint origin;
+	GetOrigin(origin);
+	aInfo.iEdge += origin;
+	return result;
+	}
+
+EXPORT_C TBool MTmTextLayoutForwarder::GetCursor(const TTmDocPosSpec& aDocPos,
+	TTmCursorPlacement aPlacement, TTmLineInfo& aLineInfo, TPoint& aOrigin,
+	TInt& aWidth, TInt& aAscent, TInt& aDescent) const
+	{
+	TBool result = TextLayout().GetCursor(aDocPos, aPlacement, aLineInfo,
+		aOrigin, aWidth, aAscent, aDescent);
+	if (result)
+		{
+		TPoint origin;
+		GetOrigin(origin);
+		if (origin.iX || origin.iY)
+			{
+			aOrigin += origin;
+			FixUpLineInfo(aLineInfo,&origin);
+			}
+		}
+	return result;
+	}
+
+/** @deprecated 7.0s */
+EXPORT_C TBool MTmTextLayoutForwarder::GetCursor(const TTmDocPos& aDocPos,TTmCursorPlacement aPlacement,
+		TTmLineInfo& aLineInfo,TPoint& aOrigin,TInt& aWidth,TInt& aAscent,TInt& aDescent) const
+	{
+	TBool result = TextLayout().GetCursor(aDocPos,aPlacement,aLineInfo,aOrigin,aWidth,aAscent,aDescent);
+	if (result)
+		{
+		TPoint origin;
+		GetOrigin(origin);
+		if (origin.iX || origin.iY)
+			{
+			aOrigin += origin;
+			FixUpLineInfo(aLineInfo,&origin);
+			}
+		}
+	return result;
+	}
+
+void MTmTextLayoutForwarder::FixUpLineInfo(TTmLineInfo& aInfo,const TPoint* aOrigin) const
+	{
+	TPoint origin;
+	if (aOrigin)
+		origin = *aOrigin;
+	else
+		GetOrigin(origin);
+	if (origin.iX || origin.iY)
+		{
+		aInfo.iInnerRect.Move(origin);
+		aInfo.iOuterRect.Move(origin);
+		aInfo.iBaseline += origin.iY;
+		aInfo.iParTop += origin.iY;
+		}
+	}
+
+EXPORT_C void MTmTextLayoutForwarder::GetOrigin(TPoint& aPoint) const
+	{
+	aPoint.iX = aPoint.iY = 0;
+	}