fontservices/textbase/sgdi/BidiTextImp.h
changeset 45 662fa7de7023
equal deleted inserted replaced
41:ea44a32a96bc 45:662fa7de7023
       
     1 // Copyright (c) 2002-2010 Nokia Corporation and/or its subsidiary(-ies).
       
     2 // All rights reserved.
       
     3 // This component and the accompanying materials are made available
       
     4 // under the terms of "Eclipse Public License v1.0"
       
     5 // which accompanies this distribution, and is available
       
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 //
       
    15 
       
    16 #ifndef BIDITEXTIMP_H_
       
    17 #define BIDITEXTIMP_H_
       
    18 
       
    19 #include "BidiText.h"
       
    20 
       
    21 class TRunInfoCompact;
       
    22 
       
    23 class TBidiTextImp : public TBidiText
       
    24 /** This is the implementation for the class TBidiText. It is so designed so 
       
    25 that it only occupies a single heap cell. This means that it is efficient in 
       
    26 memory usage, and can be placed on the cleanup stack without being a C-class.
       
    27 @internalComponent */
       
    28 	{
       
    29 public:
       
    30 	static TBidiTextImp* NewL(TInt aLength, TInt aMaxLines, TInt aBdRunArraySize);
       
    31 	static TBidiTextImp* Imp(TBidiText* aSelf);
       
    32 	static const TBidiTextImp* Imp(const TBidiText* aSelf);
       
    33 	static TInt AlignedSizeOf();
       
    34 	TText* LogicalText();
       
    35 	TText* VisualText();
       
    36 	TInt16* LineWidthArray();
       
    37 	TRunInfoCompact* BidiRunArray();
       
    38 	const TText* LogicalText() const
       
    39 		{ return const_cast<TBidiTextImp*>(this)->LogicalText(); }
       
    40 	const TText* VisualText() const
       
    41 		{ return const_cast<TBidiTextImp*>(this)->VisualText(); }
       
    42 	const TInt16* LineWidthArray() const
       
    43 		{ return const_cast<TBidiTextImp*>(this)->LineWidthArray(); }
       
    44 	const TRunInfoCompact* BidiRunArray() const
       
    45 		{ return const_cast<TBidiTextImp*>(this)->BidiRunArray(); }
       
    46 	/**
       
    47 	@return Current truncation character.
       
    48 	@internalComponent */
       
    49 	TChar TruncationChar() const
       
    50 		{ return static_cast<TInt>(iTruncationCharPlane << 16)
       
    51 		+ iTruncationChar16; }
       
    52 	
       
    53 	inline TInt TextLength() const;
       
    54 	inline void SetTextLength(TInt aLength);
       
    55 	inline TBool HasRightToLeftDirectionality() const;
       
    56 	inline void SetRightToLeftDirectionality(TBool aRightToLeftDirectionality);
       
    57 			
       
    58 	static TInt RequiredBytes(TInt aLendth, TInt aMaxLines, TInt aBdRunArraySize);
       
    59 	inline TInt AllocatedTextDataBytes() const;
       
    60 	
       
    61 private:
       
    62 	inline void SetAllocatedTextDataBytes(TInt aMaxBytes);
       
    63 	enum TFlags
       
    64 		{
       
    65 		EFRightToLeft = 0x10000000,
       
    66 		EFTruncateAtBeginning = 0x20000000
       
    67 		};
       
    68 
       
    69 	enum { ELengthMask = 0x0FFFFFFF };
       
    70 	TInt iTextLengthAndFlags;
       
    71 	TInt iTextDataBytes;	// Number of bytes allocated off the end of the object for text data
       
    72 public:	
       
    73 	TInt iVisualOrderedTextLength;
       
    74 	TUint16 iWrappingWidth;
       
    75 	TUint16 iBidiRunArrayLength;
       
    76 	TUint8 iLines;
       
    77 	TUint8 iTruncationCharPlane;
       
    78 	TUint16 iTruncationChar16;
       
    79 	};
       
    80 
       
    81 TInt SizeLineBreak(const TText* aText);
       
    82 const TText* FindEndOfThisLine(const TText* aStart, const TText* aEnd);
       
    83 TInt NumberOfLines(const TText* aStart, const TText* aEnd);
       
    84 
       
    85 inline TBidiTextImp* TBidiTextImp::Imp(TBidiText* aSelf)
       
    86 	{ return static_cast<TBidiTextImp*>(aSelf); }
       
    87 
       
    88 inline const TBidiTextImp* TBidiTextImp::Imp(const TBidiText* aSelf)
       
    89 	{ return static_cast<const TBidiTextImp*>(aSelf); }
       
    90 
       
    91 inline TInt TBidiTextImp::AlignedSizeOf()
       
    92 	{ return ((sizeof(TBidiTextImp) + 1) & 0xFFFFFFFE); }
       
    93 
       
    94 inline TInt TBidiTextImp::TextLength() const
       
    95 	{ return iTextLengthAndFlags & TBidiTextImp::ELengthMask; }
       
    96 	
       
    97 inline void TBidiTextImp::SetTextLength(TInt aLength)
       
    98 	{ iTextLengthAndFlags &= ~ELengthMask;					// clear old size bits
       
    99 	  iTextLengthAndFlags |= (aLength&ELengthMask); }		// set new size bits
       
   100 
       
   101 inline TBool TBidiTextImp::HasRightToLeftDirectionality() const
       
   102 	{ return iTextLengthAndFlags&TBidiTextImp::EFRightToLeft; }
       
   103 	
       
   104 inline void TBidiTextImp::SetRightToLeftDirectionality(TBool aRightToLeftDirectionality)
       
   105 	{
       
   106 	if (aRightToLeftDirectionality)
       
   107 		iTextLengthAndFlags |= TBidiTextImp::EFRightToLeft;
       
   108 	else
       
   109 		iTextLengthAndFlags &= ~TBidiTextImp::EFRightToLeft;
       
   110 	}
       
   111 				
       
   112 inline TInt TBidiTextImp::AllocatedTextDataBytes() const
       
   113 	{ return iTextDataBytes; }
       
   114 
       
   115 inline void TBidiTextImp::SetAllocatedTextDataBytes(TInt aTextDataBytes)
       
   116 	{ iTextDataBytes = aTextDataBytes; }
       
   117 	
       
   118 
       
   119 /**
       
   120 Bidi panic.
       
   121 @internalComponent
       
   122 */
       
   123 void TextBasePanic(TInt aError);
       
   124 
       
   125 #endif