graphicsdeviceinterface/gdi/inc/BidiText.h
changeset 0 5d03bc08d59c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsdeviceinterface/gdi/inc/BidiText.h	Tue Feb 02 01:47:50 2010 +0200
@@ -0,0 +1,157 @@
+// Copyright (c) 2002-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:
+//
+
+#ifndef BIDITEXT_H_
+#define BIDITEXT_H_
+
+#include <e32std.h>
+#include <gdi.h>
+#include <bidi.h> // class TBidirectionalState::TRunInfo
+enum CGraphicsContext::TTextAlign;
+class MLineBreaker;
+class RRunInfoArray;
+class CBidiTextTls;
+
+
+/**
+This enumeration holds the possible panic codes that may be raised 
+by the BidiText API on detecting an unrecoverable error.
+@publishedAll
+@released
+*/
+enum TBidiPanic
+	{
+	/** The call to RRunInfoArray::OpenL() has not been made prior to this call to TBidiText::SetText()
+	@see TBidiText::SetText	*/
+	EBidiPanic_RunArrayNull						= 0,
+	
+	/** Maximum number of lines that the text will need to be split into is invalid i.e less than zero or negative.
+	@see TBidiText::NewL
+	@see TBidiText::MinimumSize	*/
+	EBidiPanic_InvalidMaxline					= 1,
+	
+	/** Maximum number of characters are invalid i.e less than zero or negative.
+	@see TBidiText::NewL */
+	EBidiPanic_InvalidReservedMaxLength			= 2,
+	
+	/** Maximum width of the text in pixels is invalid i.e zero or negative.
+	@see TBidiText::MinimumSize */
+	EBidiPanic_InvalidWrappingWidth				= 3,
+	
+	/** Number of empty pixels between two lines of text are invalid i.e zero or negative.
+	@see TBidiText::MinimumSize */
+	EBidiPanic_InvalidLineGap					= 4,
+	
+	/** Text length for display is invalid i.e zero or negative.
+	@see TBidiText::DisplayText
+	@see TBidiText::LineOfDisplayText */
+	EBidiPanic_InvalidVisualOrderedTextLength	= 5,
+	
+	/** Line number to retrieve is invalid i.e zero or negative. 
+	@see TBidiText::LineOfDisplayText */
+	EBidiPanic_InvalidLineNumber				= 6
+	};
+
+/** 
+This class works as a replacement for HBufC in those cases where a small 
+amount of text is being formatted simply. The text must be all of one style 
+and broken into lines of all the same length. The number of lines and the text 
+itself is specified on construction, and the text may then be re-broken, 
+re-truncated and re-drawn with non-leaving functions. 
+@publishedAll
+@released
+*/
+class TBidiText
+	{
+public:
+	/** Overall directionality of the text. */
+	enum TDirectionality
+		{
+		/** Text reading begins on the left. */
+		ELeftToRight = 0,
+		/** Text reading begins on the right. */
+		ERightToLeft = 1
+		};
+
+	/** Class specific panic codes 
+	@deprecated This enum has been replaced by TBidiPanic.
+    */
+	enum TPanicCodes
+		{
+		EPanicRunArrayNull,
+		};
+
+	IMPORT_C static TDirectionality ScriptDirectionality(TLanguage aLanguage);
+	IMPORT_C static TDirectionality TextDirectionality(
+		const TDesC& aText, TBool* aFound = 0);
+protected:
+	TBidiText();
+public:
+	IMPORT_C static TBidiText* NewL(TInt aReservedMaxLength, TInt aMaxLines);
+	IMPORT_C static TBidiText* NewL(const TDesC& aText, TInt aMaxLines);
+	IMPORT_C static TBidiText* NewL(const TDesC& aText, TInt aMaxLines,
+		TDirectionality aDirectionality);
+	IMPORT_C TInt SetText(const TDesC& aText, RRunInfoArray& aRunInfoArray);
+	IMPORT_C TInt SetText(const TDesC& aText, TDirectionality aDirectionality, RRunInfoArray& aRunInfoArray);
+	IMPORT_C void SetTruncationChar(TChar aTruncateWith);
+	IMPORT_C void WrapText(TInt aWrappingWidth, const CFont& aFont,
+		const MLineBreaker* aBreaker, TInt aMaxLines);
+	IMPORT_C void WrapText(TInt aWrappingWidth, const CFont& aFont,
+		const MLineBreaker* aBreaker = NULL);
+	IMPORT_C TSize MinimumSize(TInt aWrappingWidth, const CFont& aFont, TInt aLineGap, TInt aMaxLines = -1,
+		const MLineBreaker* aBreaker = NULL) const;	
+	IMPORT_C TPtrC Text() const;
+	IMPORT_C TPtrC DisplayText() const;
+	IMPORT_C TInt WrappingWidth() const;
+	IMPORT_C TDirectionality Directionality() const;
+	IMPORT_C TChar TruncationChar() const;
+	IMPORT_C TInt NumberOfLinesInDisplayText() const;
+	IMPORT_C TPtrC LineOfDisplayText(TInt aLine, TInt& aWidthInPixels) const;
+	IMPORT_C void DrawText(CGraphicsContext& aGc, const TPoint& aLeft) const;
+	IMPORT_C void DrawText(CGraphicsContext& aGc,
+		const TPoint& aLeft, TInt aBaseLineSpacing,
+		CGraphicsContext::TTextAlign aAlignment) const;
+	IMPORT_C void DrawText(CGraphicsContext& aGc,
+		const TPoint& aLeft, TInt aBaseLineSpacing) const;
+private:
+	TInt DoWrapText(TInt aWrappingWidth, const CFont& aFont, const MLineBreaker* aBreaker, 
+		TInt aMaxLines, TText*& aOutputText, TInt& aNumLines, TInt16* aLineWidthArray) const;
+	};
+
+
+/**
+This class is used to keep track of the shared run info array. 
+Keep it open for as long as the TBidiText object is used. The same
+RRunInfoArray object can be used with several different TBidiText objects.
+@publishedAll
+@released
+*/
+class RRunInfoArray
+	{
+	friend class TBidiText;
+
+public:	
+	IMPORT_C RRunInfoArray();
+	IMPORT_C void OpenL();
+	IMPORT_C void Close();
+
+private:
+	TBidirectionalState::TRunInfo* RunArray() const;
+
+private:
+	CBidiTextTls* iTls;
+	};
+
+#endif