diff -r 000000000000 -r 5d03bc08d59c graphicsdeviceinterface/gdi/inc/BidiText.h --- /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 +#include +#include // 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