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