epoc32/include/frmtlay.h
author William Roberts <williamr@symbian.org>
Wed, 31 Mar 2010 12:33:34 +0100
branchSymbian3
changeset 4 837f303aceeb
parent 2 2fe1408b6811
permissions -rw-r--r--
Current Symbian^3 public API header files (from PDK 3.0.h)
This is the epoc32/include tree with the "platform" subtrees removed, and
all but a selected few mbg and rsg files removed.
williamr@4
     1
/*
williamr@4
     2
* Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
williamr@4
     3
* All rights reserved.
williamr@4
     4
* This component and the accompanying materials are made available
williamr@4
     5
* under the terms of "Eclipse Public License v1.0"
williamr@4
     6
* which accompanies this distribution, and is available
williamr@4
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
williamr@4
     8
*
williamr@4
     9
* Initial Contributors:
williamr@4
    10
* Nokia Corporation - initial contribution.
williamr@4
    11
*
williamr@4
    12
* Contributors:
williamr@4
    13
*
williamr@4
    14
* Description: 
williamr@4
    15
*
williamr@4
    16
*/
williamr@4
    17
williamr@2
    18
williamr@2
    19
#ifndef __FRMTLAY_H__
williamr@2
    20
#define __FRMTLAY_H__
williamr@2
    21
williamr@2
    22
#include <e32std.h>
williamr@2
    23
#include <e32base.h>
williamr@2
    24
#include <gdi.h>
williamr@2
    25
#include <txtfrmat.h>
williamr@2
    26
#include <txtetext.h>
williamr@2
    27
#include <frmlaydt.h>
williamr@2
    28
#include <frmparam.h>
williamr@2
    29
#include <frmvis.h>
williamr@2
    30
#include <tagma.h>
williamr@2
    31
williamr@2
    32
class CWindowGc;
williamr@2
    33
class MLayDoc;
williamr@2
    34
class TLayDocTextSource;
williamr@2
    35
class TCursorPosition;
williamr@2
    36
williamr@4
    37
class TLayDocTextSource;
williamr@4
    38
class CTmTextLayout;
williamr@4
    39
class TTmHighlightExtensions;
williamr@4
    40
class MTmSource;
williamr@4
    41
class TTmFormatParamBase;
williamr@4
    42
williamr@4
    43
#ifndef SYMBIAN_ENABLE_SPLIT_HEADERS
williamr@4
    44
#include <frmtlay_internal.h>
williamr@4
    45
#endif
williamr@2
    46
williamr@2
    47
/**
williamr@2
    48
This interface class defines an interface for clients of Form to provided 
williamr@2
    49
implementations of customisation interfaces relating to the source text
williamr@2
    50
document as requried by the internals of Form and Tagma. Its use by
williamr@2
    51
Form clients is optional.
williamr@2
    52
Derived objects of this interface are registered with the CTextLayout 
williamr@2
    53
API and are called from the TLayDocTextSource class at present.
williamr@4
    54
@publishedAll
williamr@2
    55
@released
williamr@2
    56
@see MTmInlineTextSource
williamr@2
    57
*/
williamr@2
    58
class MFormCustomInterfaceProvider
williamr@2
    59
    {
williamr@2
    60
    public:
williamr@2
    61
	/**
williamr@2
    62
	Form uses this method to request an interface implmentation for the
williamr@2
    63
	specified interface Uid. See class description for interfaces covered
williamr@2
    64
	by this API.
williamr@2
    65
	@param aInterfaceId
williamr@2
    66
		The unique identifier for the interface wanted by Form.
williamr@2
    67
	@return 
williamr@2
    68
		Ptr to interface instance or 0 if not supported by client
williamr@2
    69
	*/
williamr@2
    70
	virtual TAny* GetExtendedInterface(const TUid& aInterfaceId) = 0;
williamr@2
    71
    };
williamr@2
    72
williamr@2
    73
williamr@2
    74
/** Parameter used to control which part of a line (top, baseline or bottom) 
williamr@2
    75
should be scrolled to a certain vertical position in a view rectangle. Used 
williamr@2
    76
as a parameter in functions like CTextView::HandleGlobalChangeL() and 
williamr@2
    77
CTextLayout::SetViewL(). The selected part of the line is called the hotspot.
williamr@2
    78
@publishedAll
williamr@2
    79
@released
williamr@2
    80
*/
williamr@2
    81
class TViewYPosQualifier
williamr@2
    82
	{
williamr@2
    83
friend class CTextLayout;
williamr@2
    84
friend class CTextView;
williamr@2
    85
public:
williamr@2
    86
	/** Which part of a line (top, baseline or bottom) should appear at a
williamr@2
    87
	vertical pixel position. */
williamr@2
    88
	enum TPartOfLine
williamr@2
    89
		{
williamr@2
    90
		/** The top pixel is placed at the specified vertical point. */
williamr@2
    91
		EFViewTopOfLine = 1,
williamr@2
    92
		/** The baseline is placed at the specified vertical point. */
williamr@2
    93
		EFViewBaseLine = 0,
williamr@2
    94
		/** The bottom pixel is placed at the specified vertical point. */
williamr@2
    95
		EFViewBottomOfLine = 2	
williamr@2
    96
		};
williamr@2
    97
williamr@2
    98
	/** Whether the top line in the view should be fully visible. */
williamr@2
    99
	enum TFullyVisible
williamr@2
   100
		{
williamr@2
   101
		/** Force a partially visible top line to be fully visible. */
williamr@2
   102
		EFViewForceLineFullyVisible = ETrue,
williamr@2
   103
		/** Do not force a partially visible top line to be fully visible. */
williamr@2
   104
		EFViewDontForceLineFullyVisible = EFalse
williamr@2
   105
		};
williamr@2
   106
public:
williamr@2
   107
	inline TViewYPosQualifier();
williamr@2
   108
	IMPORT_C void SetHotSpot(TPartOfLine aHotSpot);
williamr@2
   109
	IMPORT_C void SetFillScreen(TBool aFillScreen = ETrue);
williamr@2
   110
	IMPORT_C void SetMakeLineFullyVisible(TFullyVisible aMakeLineFullyVisible = EFViewForceLineFullyVisible);
williamr@2
   111
private:
williamr@2
   112
	TPartOfLine iHotSpot;
williamr@2
   113
	TBool iFillScreen;
williamr@2
   114
	TFullyVisible iFullyVisible;
williamr@2
   115
	};
williamr@2
   116
williamr@2
   117
/** 
williamr@2
   118
A structure used to return the results of a reformatting operation.
williamr@2
   119
@see CTextLayout::HandleBlockChangeL()
williamr@2
   120
@publishedAll
williamr@2
   121
@released
williamr@2
   122
*/
williamr@2
   123
class TViewRectChanges
williamr@2
   124
williamr@2
   125
	{
williamr@2
   126
public:
williamr@2
   127
	inline TViewRectChanges();
williamr@2
   128
williamr@2
   129
public:
williamr@2
   130
	/** The vertical coordinate of the top of the first line of reformatted 
williamr@2
   131
	text. */
williamr@2
   132
	TInt iFormattedFrom;
williamr@2
   133
	/** The vertical coordinate of the bottom of the last line of reformatted 
williamr@2
   134
	text. */
williamr@2
   135
	TInt iFormattedTo;
williamr@2
   136
	/** The number of pixels by which text above the reformatted or edited 
williamr@2
   137
	block has scrolled (positive values mean the text moved down). */
williamr@2
   138
	TInt iScrollAtTop;
williamr@2
   139
	/** The number of pixels by which text below the reformatted or edited 
williamr@2
   140
	block has scrolled (positive values mean the text moved down). */
williamr@2
   141
	TInt iScrollAtBottom;
williamr@2
   142
	};
williamr@2
   143
williamr@2
   144
/** 
williamr@2
   145
The cursor or cursor selection within a document.
williamr@2
   146
williamr@2
   147
If the cursor and anchor position differ, the selection covers the text from
williamr@2
   148
the lower to the higher position, not including the character after the higher
williamr@2
   149
position. If the selection is changed (by shift plus arrow keys in many UIs)
williamr@2
   150
the cursor position changes and the anchor remains the same. 
williamr@2
   151
@publishedAll
williamr@2
   152
@released
williamr@2
   153
*/
williamr@2
   154
class TCursorSelection
williamr@2
   155
williamr@2
   156
	{
williamr@2
   157
public:
williamr@2
   158
	inline TCursorSelection();
williamr@2
   159
	inline TCursorSelection(TInt aCursorPos,TInt aAnchorPos);
williamr@2
   160
	inline void SetSelection(TInt aCursorPos,TInt aAnchorPos);
williamr@2
   161
	inline TInt LowerPos() const;
williamr@2
   162
	inline TInt HigherPos() const;
williamr@2
   163
	inline TInt Length() const;
williamr@2
   164
public:
williamr@2
   165
	/** The cursor position. */
williamr@2
   166
	TInt iCursorPos;
williamr@2
   167
	/** The anchor position. */
williamr@2
   168
	TInt iAnchorPos;
williamr@2
   169
	};
williamr@2
   170
williamr@2
   171
/** 
williamr@2
   172
Parameters used by functions that draw text.
williamr@2
   173
williamr@2
   174
An object of this class is passed to CTextLayout::DrawL() and to
williamr@2
   175
InvertRangeL(). The draw context includes the view rectangle, the graphics
williamr@2
   176
context, the background colour and the margin widths.
williamr@2
   177
williamr@2
   178
You only need to use this class directly when you are using a CTextLayout
williamr@2
   179
object which is not owned by a CTextView object.
williamr@2
   180
@publishedAll
williamr@2
   181
@released
williamr@2
   182
*/
williamr@2
   183
class TDrawTextLayoutContext
williamr@2
   184
williamr@2
   185
	{
williamr@2
   186
private:
williamr@2
   187
	enum TDrawMode
williamr@2
   188
		{
williamr@2
   189
		EFDrawText=0x001,
williamr@2
   190
		EFDrawGraphics=0x002,
williamr@2
   191
		EFUseClippingRect=0x004,
williamr@2
   192
		EFUseWindowGc=0x008,
williamr@2
   193
		EFUseGcClear=0x020,
williamr@2
   194
		EFUseBackgroundColor=0x040,
williamr@2
   195
		EFUseOverrideTextColor=0x080,
williamr@2
   196
		EFParagraphFillTextOnly=0x100,
williamr@2
   197
		EFAllFlags=0xfff
williamr@2
   198
		};
williamr@2
   199
public:
williamr@2
   200
	IMPORT_C TDrawTextLayoutContext();
williamr@2
   201
williamr@2
   202
	IMPORT_C void SetGc(CGraphicsContext* aGc,CGraphicsContext* aPictureGc=NULL);
williamr@2
   203
	IMPORT_C void SetBitmapGc(CBitmapContext* aGc,CBitmapContext* aPictureGc=NULL);
williamr@2
   204
	IMPORT_C void SetWindowGc(CWindowGc* aGc,CWindowGc* aPictureGc=NULL);
williamr@2
   205
	IMPORT_C void SetDrawToEveryPixel(TBool aDrawToEveryPixel);
williamr@2
   206
	IMPORT_C void SetTextColorOverride(const TRgb *aOverrideColor);
williamr@2
   207
	IMPORT_C void SetDrawTextOnly();
williamr@2
   208
	IMPORT_C void SetDrawGraphicsOnly();
williamr@2
   209
	IMPORT_C void SetDrawTextAndGraphics();
williamr@2
   210
	IMPORT_C void SetClipping(TBool aClipping);
williamr@2
   211
	// deprecated 7.0 
williamr@2
   212
	IMPORT_C void SetParagraphFillTextOnly(TBool aFillTextOnly);
williamr@2
   213
williamr@2
   214
//Enquiry functions
williamr@2
   215
	IMPORT_C const TRgb* TextOverrideColor() const;
williamr@2
   216
	IMPORT_C CGraphicsContext* PrimaryGc() const;
williamr@2
   217
	IMPORT_C CGraphicsContext* PictureGc() const;
williamr@2
   218
	IMPORT_C TBool UseClippingRect() const;
williamr@2
   219
	IMPORT_C TBool UseGcClear() const;
williamr@2
   220
	IMPORT_C TBool DrawText() const;
williamr@2
   221
	IMPORT_C TBool DrawGraphics() const;
williamr@2
   222
	IMPORT_C TBool UseBackgroundColor() const;
williamr@2
   223
	// deprecated 7.0
williamr@2
   224
	IMPORT_C TBool ParagraphFillTextOnly() const;
williamr@2
   225
williamr@2
   226
//Physical dimensions
williamr@2
   227
	IMPORT_C TRect TextArea() const;
williamr@2
   228
	IMPORT_C TInt DisplayHeight() const;
williamr@2
   229
	IMPORT_C TPoint TopLeftTextArea() const;
williamr@2
   230
	IMPORT_C TRect TotalMargin() const;
williamr@2
   231
	IMPORT_C TRect LabelMargin() const;
williamr@2
   232
	IMPORT_C TBool IsLabelMargin() const;
williamr@2
   233
	IMPORT_C TRect GutterMargin() const;
williamr@2
   234
	IMPORT_C TBool IsGutterMargin() const;
williamr@2
   235
	IMPORT_C TPoint TopLeftText() const;
williamr@2
   236
	IMPORT_C void WindowToText(TPoint& aWinPos) const;
williamr@2
   237
	IMPORT_C void WindowToText(TRect& aRect) const;
williamr@2
   238
	IMPORT_C void TextToWindow(TPoint& aTextAreaPos) const;
williamr@2
   239
	IMPORT_C void TextToWindow(TRect& aRect) const;
williamr@2
   240
williamr@2
   241
	TBool UseWindowGc() const;
williamr@2
   242
	void SetDrawMode(TUint aDrawMode);
williamr@2
   243
	TUint DrawMode() const;
williamr@2
   244
williamr@2
   245
public:
williamr@2
   246
	/** The view rectangle (specified in window coordinates). This is used to 
williamr@2
   247
	set the	area in which text can be drawn. Text can only be drawn within the 
williamr@2
   248
	intersection between the text area and the aDrawRect parameter passed to 
williamr@2
   249
	CTextLayout::DrawL() or InvertRangeL(). */
williamr@2
   250
	TRect iViewRect;
williamr@2
   251
	/** The label margin width. By default zero. Must have the same value as 
williamr@2
   252
	the label margin width as set in the text layout object. */
williamr@2
   253
	TInt iLabelMarginWidth;
williamr@2
   254
	/** The gutter margin width (also known as the line cursor margin width). 
williamr@2
   255
	By default	zero. */
williamr@2
   256
	TInt iGutterMarginWidth;
williamr@2
   257
	/** The horizontal offset between window coordinates and text layout 
williamr@2
   258
	coordinates. */
williamr@2
   259
	TInt iTextStartX;
williamr@2
   260
	/** The background colour for the view rectangle. The background colour is 
williamr@2
   261
	used to fill the parts of the view rectangle in which text cannot appear, 
williamr@2
   262
	for example, below the last line of the document and in the label, line 
williamr@2
   263
	cursor and left	text margins. */
williamr@2
   264
	TLogicalRgb iBackgroundColor;
williamr@2
   265
private:
williamr@2
   266
	CGraphicsContext* iGc;
williamr@2
   267
	CGraphicsContext* iPictureGc;
williamr@2
   268
	TLogicalRgb iOverrideTextColor;
williamr@2
   269
	TUint iDrawMode;
williamr@2
   270
	};
williamr@2
   271
williamr@2
   272
/** 
williamr@2
   273
An abstract class which specifies the protocol for customising the way text
williamr@2
   274
and its background are drawn.
williamr@2
   275
williamr@2
   276
Common uses for this are to implement custom highlighting or to draw a 
williamr@2
   277
background bitmap. You must create an object of a class derived from this class 
williamr@2
   278
and call CTextLayout::SetCustomDraw(), passing a pointer to the object. All of 
williamr@2
   279
these functions have default implementations. Your class can override any of the
williamr@2
   280
virtual functions listed below.
williamr@2
   281
@publishedAll
williamr@2
   282
@released
williamr@2
   283
*/
williamr@2
   284
class MFormCustomDraw
williamr@2
   285
williamr@2
   286
	{
williamr@2
   287
	public:
williamr@2
   288
	
williamr@2
   289
	class TParam
williamr@2
   290
	/**
williamr@2
   291
	Parameters used by several custom draw functions
williamr@2
   292
	@publishedAll
williamr@2
   293
	@released
williamr@2
   294
	*/
williamr@2
   295
			{
williamr@2
   296
		public:
williamr@2
   297
		TParam(CGraphicsContext& aGc,MGraphicsDeviceMap& aMap,const TPoint& aTextLayoutTopLeft,const TRect& aDrawRect):
williamr@2
   298
			iGc(aGc), iMap(aMap), iTextLayoutTopLeft(aTextLayoutTopLeft), iDrawRect(aDrawRect) { }
williamr@2
   299
williamr@2
   300
		CGraphicsContext& iGc;
williamr@2
   301
		MGraphicsDeviceMap& iMap;
williamr@2
   302
		const TPoint& iTextLayoutTopLeft;
williamr@2
   303
		const TRect& iDrawRect;
williamr@2
   304
		};
williamr@2
   305
williamr@2
   306
	class TLineInfo
williamr@2
   307
	/** 
williamr@2
   308
	Contains the line metrics.
williamr@2
   309
	@publishedAll
williamr@2
   310
	@released
williamr@2
   311
	*/
williamr@2
   312
			{
williamr@2
   313
		public:
williamr@2
   314
		TLineInfo(const TRect& aOuterRect,const TRect& aInnerRect,TInt aBaseline):
williamr@2
   315
			iOuterRect(aOuterRect), iInnerRect(aInnerRect), iBaseline(aBaseline) { }
williamr@2
   316
williamr@2
   317
		const TRect& iOuterRect;
williamr@2
   318
		const TRect& iInnerRect;
williamr@2
   319
		TInt iBaseline;
williamr@2
   320
		};
williamr@2
   321
williamr@2
   322
	IMPORT_C virtual void DrawBackground(const TParam& aParam,const TRgb& aBackground,TRect& aDrawn) const;
williamr@2
   323
	IMPORT_C virtual void DrawLineGraphics(const TParam& aParam,const TLineInfo& aLineInfo) const;
williamr@2
   324
	IMPORT_C virtual void DrawText(const TParam& aParam,const TLineInfo& aLineInfo,const TCharFormat& aFormat,
williamr@2
   325
								   const TDesC& aText,const TPoint& aTextOrigin,TInt aExtraPixels) const;
williamr@2
   326
	IMPORT_C virtual TRgb SystemColor(TUint aColorIndex,TRgb aDefaultColor) const;
williamr@2
   327
williamr@4
   328
	IMPORT_C virtual void DrawText(const TParam& aParam,const TLineInfo& aLineInfo,const TCharFormat& aFormat,
williamr@4
   329
								   const TDesC& aText,const TInt aStart, const TInt aEnd, const TPoint& aTextOrigin,TInt aExtraPixels) const;
williamr@2
   330
	IMPORT_C virtual void MFormCustomDraw_Reserved_2();
williamr@2
   331
	};
williamr@2
   332
williamr@2
   333
williamr@2
   334
/** 
williamr@2
   335
An interface class that can be derived from to implement custom line breaking.
williamr@2
   336
williamr@2
   337
Custom line breaking allows the Text Views line wrapping algorithm to break
williamr@2
   338
lines in any way. For instance, it may be used to avoid the jagged white space
williamr@2
   339
at the right edge of text windows caused by normal line wrapping on a small
williamr@2
   340
screen.
williamr@2
   341
williamr@2
   342
All of these functions have a default implementation. To change the default
williamr@2
   343
behaviour, a pointer to an object that overrides any or all of the functions
williamr@2
   344
in the interface needs to be passed to the function CTextLayout::SetCustomWrap().
williamr@2
   345
@since 6.2
williamr@2
   346
williamr@2
   347
@see CTextLayout::SetCustomWrap()
williamr@2
   348
@publishedAll
williamr@2
   349
@released
williamr@2
   350
*/
williamr@2
   351
class MFormCustomWrap
williamr@2
   352
williamr@2
   353
	{
williamr@2
   354
public:
williamr@2
   355
	IMPORT_C virtual TUint LineBreakClass(TUint aCode,TUint& aRangeStart,TUint& aRangeEnd) const;
williamr@2
   356
	IMPORT_C virtual TBool LineBreakPossible(TUint aPrevClass,TUint aNextClass,TBool aHaveSpaces) const;
williamr@2
   357
	IMPORT_C virtual TBool GetLineBreakInContext(const TDesC& aText,TInt aMinBreakPos,TInt aMaxBreakPos,
williamr@2
   358
												 TBool aForwards,TInt& aBreakPos) const;
williamr@2
   359
	IMPORT_C virtual TBool IsHangingCharacter(TUint aChar) const;
williamr@2
   360
private:
williamr@2
   361
	IMPORT_C virtual void MFormCustomWrap_Reserved_1();
williamr@2
   362
	IMPORT_C virtual void MFormCustomWrap_Reserved_2();	
williamr@2
   363
	};
williamr@2
   364
williamr@2
   365
williamr@2
   366
/** 
williamr@2
   367
Mixin class used to customize visible appearance of invisible characters 
williamr@2
   368
such as a paragraph mark or a tab.
williamr@2
   369
williamr@2
   370
@see CTextView::SetCustomInvisibleCharacterRemapper()
williamr@2
   371
@publishedAll
williamr@2
   372
@released
williamr@2
   373
*/
williamr@2
   374
class MFormCustomInvisibleCharacterRemapper
williamr@2
   375
	{
williamr@2
   376
public:
williamr@2
   377
	IMPORT_C static TUint DefaultMapping(TUint aChar, const TNonPrintingCharVisibility aNonPrintingCharVisibility, const TLayDocTextSource& aLayDoc);
williamr@2
   378
williamr@2
   379
	/** 
williamr@2
   380
	Allows custom remapping of invisible characters.
williamr@2
   381
williamr@2
   382
	Called by TLayDocTextSource::Map() if it has been created and registered 
williamr@2
   383
	with TLayDocTextSource using CTextLayout::SetInvisibleCharacterRemapper().
williamr@2
   384
williamr@2
   385
	Unless there is a specific reason for doing otherwise it is recommended 
williamr@2
   386
	that where this function has not remapped a given character it should 
williamr@2
   387
	pass it to DefaultMapping() to let it try.
williamr@2
   388
williamr@2
   389
	@param aChar
williamr@2
   390
		Invisible character to be remapped
williamr@2
   391
	@param aDesiredVisibilities
williamr@2
   392
		Current state of flags showing visibility of invisible characters
williamr@2
   393
	@param aLayDoc
williamr@2
   394
		Const ref to the calling CLayDocTextSource
williamr@2
   395
	@return
williamr@2
   396
		The replacement character if remapping has taken place, else return original character
williamr@2
   397
	*/
williamr@2
   398
	virtual TUint Remap(TUint aChar, const TNonPrintingCharVisibility aNonPrintingCharVisibility, const TLayDocTextSource& aLayDoc) = 0;
williamr@2
   399
	};
williamr@2
   400
williamr@2
   401
/** 
williamr@2
   402
Text layout.
williamr@2
   403
williamr@2
   404
CTextLayout is the lowest-level text formatting class in the Text Views API. It
williamr@2
   405
obtains text and formatting attributes via the MLayDoc interface class and
williamr@2
   406
formats the text to a certain width.
williamr@2
   407
williamr@2
   408
It has functions for drawing the text and performing hit-detection that is,
williamr@2
   409
converting x-y coordinates to document positions, and vice versa. It defines
williamr@2
   410
many public functions that are not generally useful, but are called by the
williamr@2
   411
higher-level CTextView class, or exist only for the convenience of closely
williamr@2
   412
associated classes like the printing and pagination systems. These are
williamr@2
   413
identified in the documentation by the text "not generally useful".
williamr@2
   414
williamr@2
   415
When using the CTextLayout class, you must be aware of what functions have
williamr@2
   416
previously been called. For example:
williamr@2
   417
williamr@2
   418
1) Formatting and scrolling functions must not be called if a CTextView object
williamr@2
   419
owns the CTextLayout object, because the CTextView object may be reformatting
williamr@2
   420
the CTextLayout object asynchronously by means of an active object, or may hold
williamr@2
   421
some state information about the CTextLayout object that would be invalidated
williamr@2
   422
by reformatting. These functions are identified in the documentation by the
williamr@2
   423
text "Do not use if a CTextView object owns this CTextLayout object.".
williamr@2
   424
williamr@2
   425
2) Functions that raise out of memory exceptions can leave the object in an
williamr@2
   426
inconsistent state; these functions can be identified as usual by their
williamr@2
   427
trailing L. When this occurs, it is necessary to discard the formatting
williamr@2
   428
information by calling DiscardFormat().
williamr@2
   429
williamr@2
   430
3) Some functions change formatting parameters like the wrap width or band
williamr@2
   431
height, but do not reformat to reflect the change. These functions are
williamr@2
   432
identified in the documentation by the text "Reformat needed". 
williamr@2
   433
@publishedAll
williamr@2
   434
@released
williamr@2
   435
*/
williamr@2
   436
class CTextLayout: public CBase
williamr@2
   437
williamr@2
   438
	{
williamr@2
   439
friend class CTestTextLayout;
williamr@2
   440
public:
williamr@2
   441
williamr@2
   442
	/**Flags used by CTextLayout::SetViewL(). Whether to reformat and redraw.*/
williamr@2
   443
	enum TDiscard
williamr@2
   444
		{
williamr@2
   445
		/** Discard all formatting; redraw. */
williamr@2
   446
		EFViewDiscardAllFormat = TRUE,
williamr@2
   447
		/** Do not discard all formatting; redraw. */
williamr@2
   448
		EFViewDontDiscardFormat = FALSE
williamr@2
   449
		};
williamr@2
   450
williamr@2
   451
	/** Indicates whether blank space should scroll.
williamr@2
   452
	Used by several CTextView and CTextLayout scrolling functions. */
williamr@2
   453
	enum TAllowDisallow
williamr@2
   454
		{
williamr@2
   455
		/** Allow blank space to scroll. */
williamr@2
   456
		EFAllowScrollingBlankSpace = TRUE,
williamr@2
   457
		/** Disallow blank space from scrolling. */
williamr@2
   458
		EFDisallowScrollingBlankSpace = FALSE
williamr@2
   459
		};
williamr@2
   460
williamr@2
   461
	enum									// flags for HandleCharEditL
williamr@2
   462
		{
williamr@2
   463
		/** Insert a character, (not a paragraph delimiter). */
williamr@2
   464
		EFCharacterInsert,
williamr@2
   465
		/** Insert a paragraph delimiter. */
williamr@2
   466
		EFParagraphDelimiter,
williamr@2
   467
		/** Delete single character to the left. */
williamr@2
   468
		EFLeftDelete,
williamr@2
   469
		/** Delete single character to the right. */
williamr@2
   470
		EFRightDelete
williamr@2
   471
		};
williamr@2
   472
williamr@2
   473
	enum
williamr@2
   474
		{
williamr@2
   475
		/** A value greater than any possible display height indicates that the
williamr@2
   476
		entire visible area, at least, was scrolled, and so there is no point
williamr@2
   477
		in blitting text; a full redraw is needed.
williamr@2
   478
		 */
williamr@2
   479
		EFScrollRedrawWholeScreen = CLayoutData::EFLargeNumber,
williamr@2
   480
		/** The maximum line width when wrapping is unset. */
williamr@2
   481
		EFMaximumLineWidth = CLayoutData::EFBodyWidthForNoWrapping,
williamr@2
   482
		};
williamr@2
   483
williamr@2
   484
	enum
williamr@2
   485
		{
williamr@2
   486
		/** Wrapping off; overrides the paragraph format. */
williamr@2
   487
		EFAllParagraphsNotWrapped = TRUE,
williamr@2
   488
		/** Wrapping on, unless CParaFormat::iWrap is false. */
williamr@2
   489
		EFParagraphsWrappedByDefault = FALSE
williamr@2
   490
		};
williamr@2
   491
williamr@2
   492
	/** Amount to format. Used by CTextLayout::SetAmountToFormat(). */
williamr@2
   493
	enum TAmountFormatted
williamr@2
   494
		{
williamr@2
   495
		/** Format the whole document. */
williamr@2
   496
		EFFormatAllText = FALSE,
williamr@2
   497
		/** Format the visible band only. */
williamr@2
   498
		EFFormatBand = TRUE,
williamr@2
   499
		};
williamr@2
   500
williamr@2
   501
	enum TScrollFlags
williamr@2
   502
		{
williamr@2
   503
		EFScrollOnlyToTopsOfLines = 1
williamr@2
   504
		};
williamr@2
   505
williamr@2
   506
	/** Formatting information. */
williamr@2
   507
	enum TCurrentFormat
williamr@2
   508
		{
williamr@2
   509
		 /** Returned by some CTextLayout enquiry functions to indicate that no
williamr@2
   510
		formatting has taken place so that the requested value cannot be
williamr@2
   511
		calculated. */
williamr@2
   512
		EFNoCurrentFormat = -1,
williamr@2
   513
		/** Returned by CTextLayout::ParagraphHeight() when the paragraph is not formatted. */
williamr@2
   514
		EFNotInCurrentFormat = 0
williamr@2
   515
		};
williamr@2
   516
public:
williamr@2
   517
	class TRangeChange
williamr@2
   518
	/** 
williamr@2
   519
	Specifies the range of characters involved when setting or clearing a
williamr@2
   520
	text selection.
williamr@2
   521
williamr@2
   522
	This class is used in the CTextLayout::Highlight() function. The following
williamr@2
   523
	code demonstrates how it should be used to clear an existing highlight and
williamr@2
   524
	set a new one:
williamr@2
   525
williamr@2
   526
	@code 
williamr@2
   527
	CTextLayout::TRangeChange oldHighlight(anchorPos, old_cursorPos,
williamr@2
   528
	CTextLayout::TRangeChange::EClear); // existing highlight
williamr@2
   529
	CTextLayout::TRangeChange newHighlight(anchorPos, new_cursorPos,
williamr@2
   530
	CTextLayout::TRangeChange::ESet); // new one
williamr@2
   531
	newHighlight.OptimizeWith(oldHighlight); // doesn't matter which range is
williamr@2
   532
	the parameter and which is the calling object
williamr@2
   533
	layout.Highlight(oldHighlight,drawRect,context); // doesn't matter in which
williamr@2
   534
	order this and following line occur
williamr@2
   535
	layout.Highlight(newHighlight,drawRect,context);
williamr@2
   536
	@endcode
williamr@2
   537
williamr@2
   538
	@see CTextLayout::Highlight()
williamr@2
   539
	@publishedAll
williamr@2
   540
	@released
williamr@2
   541
	*/
williamr@2
   542
			{
williamr@2
   543
	public:
williamr@2
   544
		/** Enumerates the possible change types. */
williamr@2
   545
		enum TChangeType
williamr@2
   546
			{
williamr@2
   547
			/** The object is being used to set a range. */
williamr@2
   548
			ESet,
williamr@2
   549
			/** The object is being used to clear a range. */
williamr@2
   550
			EClear
williamr@2
   551
			};
williamr@2
   552
		IMPORT_C TRangeChange(TInt aStart, TInt aEnd, TChangeType aChange);
williamr@2
   553
		IMPORT_C TRangeChange();
williamr@2
   554
		IMPORT_C void Set(TInt aStart, TInt aEnd, TChangeType aChange);
williamr@2
   555
		IMPORT_C TChangeType Get(TInt& aStart, TInt& aEnd) const;
williamr@2
   556
		IMPORT_C void OptimizeWith(TRangeChange& aBuddy);
williamr@2
   557
		IMPORT_C TBool NonNull() const;
williamr@2
   558
		IMPORT_C TBool Clip(TInt aMin, TInt aMax);
williamr@2
   559
williamr@2
   560
		TBool IsJoinedTo(const TRangeChange aRange);
williamr@2
   561
		void Join(const TRangeChange aRange);
williamr@2
   562
williamr@2
   563
	private:
williamr@2
   564
		TInt iA;
williamr@2
   565
		TInt iB;
williamr@2
   566
		};
williamr@2
   567
williamr@2
   568
public:
williamr@2
   569
williamr@2
   570
	class TTagmaForwarder: public MTmTextLayoutForwarder
williamr@2
   571
	/**
williamr@2
   572
	A standard inquiry interface for the text formatting engine, built on
williamr@2
   573
	top of a CTextView object.
williamr@2
   574
williamr@2
   575
	To use it, construct a TTagmaForwarder object, then call InitL(), which
williamr@2
   576
	finishes background formatting, then call the MTmTextLayoutForwarder
williamr@4
   577
	functions.
williamr@4
   578
	
williamr@4
   579
	The class should only be used internally by FORM component.
williamr@2
   580
	@internalComponent
williamr@2
   581
	*/
williamr@2
   582
		{
williamr@2
   583
	public:
williamr@2
   584
		inline TTagmaForwarder(const CTextLayout& aLayout);
williamr@2
   585
williamr@2
   586
	private:
williamr@2
   587
		// from MTmTextLayoutForwarder
williamr@2
   588
		inline const CTmTextLayout& TextLayout() const;
williamr@2
   589
		inline void GetOrigin(TPoint& aPoint) const;
williamr@2
   590
williamr@2
   591
		const CTextLayout& iLayout;
williamr@2
   592
		};
williamr@2
   593
williamr@2
   594
	/**
williamr@2
   595
	Accesses text supplied by MTmSource.
williamr@2
   596
	@internalComponent
williamr@2
   597
	*/
williamr@2
   598
	class TUtf32SourceCache
williamr@2
   599
		{
williamr@2
   600
	public:
williamr@2
   601
		TUtf32SourceCache(const MTmSource& aSource);
williamr@2
   602
		TUtf32SourceCache(const CTextLayout& aLayout);
williamr@2
   603
		TText GetUtf16(TInt aIndex);
williamr@2
   604
		TChar GetUtf32(TInt aIndex);
williamr@2
   605
	private:
williamr@2
   606
		const MTmSource* iSource;
williamr@2
   607
		TPtrC16 iCurrentView;
williamr@2
   608
		TInt iCurrentViewIndex;
williamr@2
   609
		};
williamr@2
   610
	friend class TUtf32SourceCache;
williamr@2
   611
williamr@2
   612
	IMPORT_C static CTextLayout *NewL(MLayDoc *aDoc,TInt aWrapWidth);
williamr@2
   613
	IMPORT_C ~CTextLayout();
williamr@2
   614
	IMPORT_C void DiscardFormat();
williamr@2
   615
	IMPORT_C void SetLayDoc(MLayDoc *aDoc);
williamr@2
   616
	IMPORT_C void SetWrapWidth(TInt aWrapWidth);
williamr@2
   617
	IMPORT_C void SetBandHeight(TInt aHeight);
williamr@2
   618
	IMPORT_C TInt BandHeight() const;
williamr@2
   619
	IMPORT_C void SetImageDeviceMap(MGraphicsDeviceMap *aGd);
williamr@2
   620
	IMPORT_C void SetLabelsDeviceMap(MGraphicsDeviceMap *aDeviceMap);
williamr@2
   621
	IMPORT_C void SetAmountToFormat(TAmountFormatted aAmountOfFormat = EFFormatBand);
williamr@2
   622
	IMPORT_C TBool IsFormattingBand() const;
williamr@2
   623
	IMPORT_C void SetFormatMode(CLayoutData::TFormatMode aFormatMode,TInt aWrapWidth,MGraphicsDeviceMap* aFormatDevice);
williamr@2
   624
	IMPORT_C void ForceNoWrapping(TBool aNoWrapping = EFAllParagraphsNotWrapped);
williamr@2
   625
	IMPORT_C TBool IsWrapping() const;
williamr@2
   626
	IMPORT_C void SetTruncating(TBool aOn);
williamr@2
   627
	IMPORT_C TBool Truncating() const;
williamr@2
   628
	IMPORT_C void SetTruncatingEllipsis(TChar aEllipsis);
williamr@2
   629
	IMPORT_C TChar TruncatingEllipsis() const;
williamr@2
   630
	IMPORT_C void SetLabelsMarginWidth(TInt aWidth);
williamr@2
   631
	IMPORT_C void SetNonPrintingCharsVisibility(TNonPrintingCharVisibility aVisibility);
williamr@2
   632
	IMPORT_C TNonPrintingCharVisibility NonPrintingCharsVisibility() const;
williamr@2
   633
	IMPORT_C TBool IsBackgroundFormatting() const;
williamr@2
   634
	IMPORT_C void NotifyTerminateBackgroundFormatting();
williamr@2
   635
	// deprecated 7.0
williamr@2
   636
	IMPORT_C void SetExcludePartialLines(TBool aExcludePartialLines = TRUE);
williamr@2
   637
	// deprecated 7.0
williamr@2
   638
	IMPORT_C TBool ExcludingPartialLines() const;
williamr@2
   639
	IMPORT_C void SetFontHeightIncreaseFactor(TInt aPercentage);
williamr@2
   640
	IMPORT_C TInt FontHeightIncreaseFactor() const;
williamr@2
   641
	IMPORT_C void SetMinimumLineDescent(TInt aPixels);
williamr@2
   642
	IMPORT_C TInt MinimumLineDescent() const;
williamr@2
   643
	IMPORT_C TInt DocumentLength() const;
williamr@2
   644
	IMPORT_C TInt ToParagraphStart(TInt& aDocPos) const;
williamr@2
   645
	IMPORT_C TInt PixelsAboveBand() const;
williamr@2
   646
	IMPORT_C TInt YBottomLastFormattedLine() const;
williamr@2
   647
	IMPORT_C TInt FormattedHeightInPixels() const;
williamr@2
   648
	IMPORT_C TInt PosRangeInBand(TInt& aDocPos) const;
williamr@2
   649
	IMPORT_C TBool PosInBand(const TTmDocPos& aDocPos,TTmLineInfo* aLineInfo = NULL) const;
williamr@2
   650
	IMPORT_C TBool PosInBand(TTmDocPos aDocPos,TPoint& aXyPos) const;
williamr@2
   651
	IMPORT_C TBool PosInBand(TInt aDocPos,TPoint& aXyPos) const;
williamr@2
   652
	IMPORT_C TBool PosIsFormatted(TInt aDocPos) const;
williamr@2
   653
	IMPORT_C TInt FirstCharOnLine(TInt aLineNo) const;
williamr@2
   654
	IMPORT_C TInt FormattedLength() const;
williamr@2
   655
	IMPORT_C TInt FirstFormattedPos() const;
williamr@2
   656
	IMPORT_C TInt NumFormattedLines() const;
williamr@2
   657
	IMPORT_C TInt FirstLineInBand() const;
williamr@2
   658
	IMPORT_C TInt GetLineRect(TInt aYPos,TRect& aLine) const;
williamr@2
   659
	IMPORT_C TInt ParagraphHeight(TInt aDocPos) const;
williamr@2
   660
	IMPORT_C TRect ParagraphRectL(TInt aDocPos) const;
williamr@2
   661
	IMPORT_C TBool CalculateHorizontalExtremesL(TInt& aLeftX,TInt& aRightX,TBool aOnlyVisibleLines,
williamr@2
   662
												TBool aIgnoreWrapCharacters = FALSE) const;
williamr@2
   663
	IMPORT_C void GetCharacterHeightAndAscentL(TInt aDocPos,TInt& aHeight,TInt& aAscent) const;
williamr@2
   664
	IMPORT_C void GetFontHeightAndAscentL(const TFontSpec& aFontSpec,TInt& aHeight,TInt& aAscent) const;
williamr@2
   665
	IMPORT_C TInt XyPosToDocPosL(TPoint &aPos, TUint aFlags = 0) const;
williamr@2
   666
	IMPORT_C TBool DocPosToXyPosL(TInt aDocPos, TPoint& aPos, TUint aFlags = 0) const;
williamr@2
   667
	IMPORT_C TBool FindXyPos(const TPoint& aXyPos,TTmPosInfo2& aPosInfo,TTmLineInfo* aLineInfo = NULL) const;
williamr@2
   668
	IMPORT_C TBool FindDocPos(const TTmDocPosSpec& aDocPos,TTmPosInfo2& aPosInfo,TTmLineInfo* aLineInfo = NULL) const;
williamr@2
   669
	IMPORT_C TRect GetLineRectL(TInt aDocPos1,TInt aDocPos2) const;
williamr@2
   670
	IMPORT_C TBool PictureRectangleL(TInt aDocPos,TRect& aPictureRect,TBool* aCanScaleOrCrop = NULL) const;
williamr@2
   671
	IMPORT_C TBool PictureRectangleL(const TPoint& aXyPos,TRect& aPictureRect,TBool* aCanScaleOrCrop = NULL) const;
williamr@2
   672
	IMPORT_C TInt FirstDocPosFullyInBand() const;
williamr@2
   673
	IMPORT_C void GetMinimumSizeL(TInt aWrapWidth,TSize& aSize);
williamr@2
   674
	IMPORT_C void GetMinimumSizeL(TInt aWrapWidth,TBool aAllowLegalLineBreaksOnly,TSize& aSize);
williamr@2
   675
	IMPORT_C TInt MajorVersion() const;
williamr@2
   676
	IMPORT_C TInt SetViewL(const TTmDocPos& aDocPos,TInt& aYPos,TViewYPosQualifier aYPosQualifier,
williamr@2
   677
						   TDiscard aDiscardFormat = EFViewDontDiscardFormat);
williamr@2
   678
	IMPORT_C TInt SetViewL(TInt aDocPos,TInt& aYPos,TViewYPosQualifier aYPosQualifier,
williamr@2
   679
						   TDiscard aDiscardFormat = EFViewDontDiscardFormat);
williamr@2
   680
	IMPORT_C void FormatBandL();
williamr@2
   681
	IMPORT_C void FormatCharRangeL(TInt aStartDocPos,TInt aEndDocPos);
williamr@2
   682
	void FormatCharRangeL(TInt aStartDocPos,TInt aEndDocPos,TInt aPixelOffset);
williamr@2
   683
	IMPORT_C TBool FormatNextLineL(TInt& aBotPixel);
williamr@2
   684
	IMPORT_C TBool FormatLineL(CParaFormat* aParaFormat,TInt& aDocPos,TInt& aHeight,TBool& aPageBreak);
williamr@2
   685
	IMPORT_C TInt ScrollParagraphsL(TInt& aNumParas,TAllowDisallow aScrollBlankSpace);
williamr@2
   686
	IMPORT_C TInt ScrollLinesL(TInt& aNumLines,TAllowDisallow aScrollBlankSpace = EFDisallowScrollingBlankSpace);
williamr@2
   687
	IMPORT_C TInt ChangeBandTopL(TInt& aPixels,TAllowDisallow aScrollBlankSpace = EFDisallowScrollingBlankSpace);
williamr@4
   688
    IMPORT_C void ChangeBandTopNoLimitBorderL(TInt aPixels);
williamr@2
   689
	IMPORT_C void PageUpL(TInt& aYCursorPos,TInt& aPixelsScrolled);
williamr@2
   690
	IMPORT_C void PageDownL(TInt& aYCursorPos,TInt& aPixelsScrolled);
williamr@2
   691
	IMPORT_C TBool HandleCharEditL(TUint aType,TInt& aCursorPos,TInt& aGood,TInt& aFormattedUpTo,
williamr@2
   692
								   TInt& aFormattedFrom,TInt& aScroll,TBool aFormatChanged);
williamr@2
   693
	IMPORT_C void HandleBlockChangeL(TCursorSelection aSelection,TInt aOldCharsChanged,TViewRectChanges& aViewChanges,
williamr@2
   694
									 TBool aFormatChanged);
williamr@2
   695
	IMPORT_C void HandleAdditionalCharactersAtEndL(TInt& aFirstPixel,TInt& aLastPixel);
williamr@2
   696
	// deprecated 6.1
williamr@2
   697
	IMPORT_C void ReformatVerticalSpaceL();
williamr@2
   698
	IMPORT_C void AdjustVerticalAlignment(CParaFormat::TAlignment aVerticalAlignment);
williamr@2
   699
	IMPORT_C static void DrawBorders(const MGraphicsDeviceMap* aGd,CGraphicsContext& aGc,const TRect& aRect,
williamr@2
   700
									 const TParaBorderArray& aBorder,const TRgb* aBackground = NULL,
williamr@2
   701
									 TRegion* aClipRegion = NULL,const TRect* aDrawRect = NULL);
williamr@2
   702
	IMPORT_C void DrawL(const TRect& aDrawRect,const TDrawTextLayoutContext* aDrawTextLayoutContext,
williamr@2
   703
						const TCursorSelection* aHighlight = NULL);
williamr@2
   704
	IMPORT_C TBool GetNextVisualCursorPos(const TTmDocPosSpec& aDocPos,
williamr@2
   705
		TTmPosInfo2& aPosInfo, TBool aToLeft) const;
williamr@2
   706
	// deprecated 7.0
williamr@2
   707
	IMPORT_C void InvertRangeL(const TCursorSelection& aHighlight,const TRect& aDrawRect,
williamr@2
   708
							   const TDrawTextLayoutContext* aDrawTextLayoutContext);
williamr@2
   709
	IMPORT_C void Highlight(const TRangeChange& aHighlight,const TRect& aDrawRect,
williamr@2
   710
		const TDrawTextLayoutContext* aDrawTextLayoutContext);
williamr@2
   711
	IMPORT_C void SetCustomDraw(const MFormCustomDraw* aCustomDraw);
williamr@2
   712
	IMPORT_C const MFormCustomDraw* CustomDraw() const;
williamr@2
   713
	IMPORT_C void SetCustomWrap(const MFormCustomWrap* aCustomWrap);
williamr@2
   714
	IMPORT_C const MFormCustomWrap* CustomWrap() const;
williamr@4
   715
	/* this function should only used by Symbian internally */
williamr@2
   716
	IMPORT_C void ExtendFormattingToCoverYL(TInt aYPos);
williamr@2
   717
	IMPORT_C void ExtendFormattingToCoverPosL(TInt aDocPos);
williamr@2
   718
williamr@2
   719
	IMPORT_C TInt GetLineNumber(TInt aDocPos);
williamr@2
   720
	IMPORT_C void SetHighlightExtensions(TInt aLeftExtension, TInt aRightExtension, TInt aTopExtension, TInt aBottomExtension);
williamr@2
   721
	void SetExcessHeightRequired(TInt aExcessHeightRequired);
williamr@2
   722
    IMPORT_C void SetInterfaceProvider( MFormCustomInterfaceProvider* aProvider ); 
williamr@2
   723
	inline const CTmTextLayout& TagmaTextLayout() const;
williamr@2
   724
	inline void GetOrigin(TPoint& aPoint) const;
williamr@2
   725
williamr@2
   726
williamr@2
   727
	inline void RestrictScrollToTopsOfLines(TBool aRestrict);
williamr@2
   728
williamr@2
   729
williamr@2
   730
	// Non-exported public functions
williamr@2
   731
	void DrawBackground(CGraphicsContext& aGc,const TPoint& aTopLeft,const TRect& aClipRect,
williamr@2
   732
						const TLogicalRgb& aBackground) const;
williamr@2
   733
	TBool CalculateHorizontalExtremes(TInt& aLeftX,TInt& aRightX,TBool aOnlyVisibleLines) const;
williamr@2
   734
	TBool GetCursor(const TTmDocPos& aDocPos,TTmCursorPlacement aPlacement,
williamr@2
   735
				    TRect& aLineRect,TPoint& aOrigin,TInt& aWidth,TInt& aAscent,TInt& aDescent) const;
williamr@2
   736
	void GetParagraphRect(const TTmDocPos& aDocPos,TRect& aRect) const;
williamr@2
   737
	TInt ScrollDocPosIntoViewL(const TTmDocPos& aDocPos);
williamr@2
   738
	TInt PictureRectangleAndPosL(const TPoint& aXyPos, TRect& aPictureRect,
williamr@2
   739
		TBool* aCanScaleOrCrop = 0) const;
williamr@2
   740
	void HighlightUsingExtensions(const CTextLayout::TRangeChange& aChangeHighlight,const TRangeChange& aFullHighlight,
williamr@2
   741
		const TRect& aDrawRect,	const TDrawTextLayoutContext* aDrawTextLayoutContext);
williamr@2
   742
	inline const TTmHighlightExtensions& HighlightExtensions() const;
williamr@2
   743
	void GetHighlightRemnants(const TRect& aRect, const TDrawTextLayoutContext& aDrawTextLayoutContext, TRect* aRemainderRects) const;
williamr@2
   744
	TInt WrapWidth() const;
williamr@2
   745
williamr@2
   746
	void SetOpaqueLC();
williamr@2
   747
	
williamr@2
   748
	IMPORT_C void SetCustomInvisibleCharacterRemapper(MFormCustomInvisibleCharacterRemapper* aInvisibleCharacterRemapper);
williamr@2
   749
	IMPORT_C MFormCustomInvisibleCharacterRemapper* GetCustomInvisibleCharacterRemapper();
williamr@2
   750
	void SetTextViewCursorPos(TCursorPosition* aPos); // Put in for INC092568
williamr@2
   751
williamr@2
   752
	void SetWindow(RWindow* aWnd);
williamr@2
   753
	void SetReadyToRedraw();
williamr@2
   754
	void BeginRedraw(const TRect& aRect);
williamr@2
   755
	void EndRedraw();
williamr@2
   756
	void SetExternalDraw(const TRect& aRect);
williamr@2
   757
	void ResetExternalDraw();
williamr@2
   758
	TBool BeginRedrawCalled() const;
williamr@2
   759
	IMPORT_C void MakeVisible(TBool aVisible);
williamr@2
   760
williamr@2
   761
#ifdef _DEBUG
williamr@2
   762
	TBool __DbgIsFormattingUpToDate() const;
williamr@2
   763
#endif
williamr@2
   764
williamr@2
   765
	enum TPanicNumber
williamr@2
   766
		{
williamr@2
   767
		EUnimplemented,
williamr@2
   768
		ENoMemory,
williamr@2
   769
		EDrawingBorderError,
williamr@2
   770
		EFormatDeviceNotSet,
williamr@2
   771
		EImageDeviceNotSet,
williamr@2
   772
		EPixelNotInFormattedLine,
williamr@2
   773
		EInvalidDocPos,
williamr@2
   774
		ENoCharRangeToFormat,
williamr@2
   775
		ECharacterNotFormatted,
williamr@2
   776
		EPrintPreviewModeError,
williamr@2
   777
		EBadCharacterEditType,
williamr@2
   778
		EInvalidLineNumber,
williamr@2
   779
		EPosNotFormatted,
williamr@2
   780
		EMustFormatAllText,
williamr@2
   781
		EPageScrollError,
williamr@2
   782
		EInvalidRedraw
williamr@2
   783
		};
williamr@2
   784
	static void Panic(TPanicNumber aNumber);
williamr@2
   785
williamr@2
   786
private:
williamr@2
   787
	IMPORT_C CTextLayout();
williamr@2
   788
 	IMPORT_C void ConstructL(MLayDoc *aDoc,TInt aWrapWidth);
williamr@2
   789
	void InitFormatParam(TTmFormatParamBase& aParam);
williamr@4
   790
	TInt ScrollL(TInt aDy,TAllowDisallow aScrollBlankSpace,TBool aTopNoLimitBorder=EFalse,TBool aBottomNoLimitBorder=EFalse);
williamr@2
   791
	void FormatBandL(TInt aStartDocPos,TInt aEndDocPos);
williamr@2
   792
	void PruneFormatL(TBool aFromStart);
williamr@2
   793
	TInt VisibleHeightInPixels() const;
williamr@2
   794
	TInt BandHeightInPixels() const;
williamr@2
   795
	TInt SuggestCursorPos(TInt aCurrentCursorPos) const;
williamr@2
   796
	TInt SetBandTop();
williamr@2
   797
	TBool AddFormattingAtEndL(TTmFormatParamBase& aFormatParam, TInt& aHeightIncrease, TInt& aParagraphsIncrease);
williamr@2
   798
	
williamr@2
   799
	static void ResetOpaque(void* aThis);
williamr@2
   800
williamr@2
   801
williamr@4
   802
	CTmTextLayout *iText;		// the TAGMA object that contains the text layout
williamr@4
   803
	TInt iDummyForIText[10];	// It is only here to add padding for maintain compatibility 
williamr@2
   804
	TInt iExcessHeightRequired; // The delta required to position the baseline so there is enough 
williamr@2
   805
								// space for the highset glyph in pixels
williamr@2
   806
	RWindow *iWnd;				// the window to be used to draw
williamr@2
   807
	TBool iBeginRedrawCount;
williamr@2
   808
	TRect iRedrawRect;
williamr@2
   809
	TCursorPosition* iTextViewCursorPos; // From and owned by owning CTextView if it exists,
williamr@2
   810
										 // Null otherwise.  Put in for INC092568
williamr@2
   811
	TBool iIsWndInExternalRedraw;		 // If ETrue, then iWnd->EndRedraw() will not be called
williamr@2
   812
										 // from within CTextLayout::EndRedraw() as the window redraw 
williamr@2
   813
										 // has been initiated externally and will be ended externally as well
williamr@2
   814
	TBool iReadyToRedraw;				// If EFalse, disables CTextLayout::BeginRedraw() and 
williamr@2
   815
										// CTextLayout::EndRedraw()
williamr@4
   816
	TInt iDummy[4];		// This dummy variable has been inserted to replace the original size of
williamr@2
   817
						// a variable that had to be moved to avaid a BC break because it had
williamr@2
   818
						// increased in size. Feel free to reuse this space - just reduce the size
williamr@2
   819
						// of this variable by the size of any variable you insert in front of it.
williamr@2
   820
						// Currently it occupies 5 words.
williamr@2
   821
	TInt iBandTop;		// effectively, scroll position: subtract this from CTmTextLayout y position
williamr@2
   822
						// to give CTextLayout y position
williamr@2
   823
	TInt iVisibleHeight;// in pixels if iFormatMode is EFScreenMode or EFWysiwygMode, otherwise twips
williamr@2
   824
	TInt iBandHeight;	// in pixels if iFormatMode is EFScreenMode or EFWysiwygMode, otherwise twips
williamr@2
   825
williamr@2
   826
	TInt iScrollFlags;		// from CTextLayout::TScrollFlags
williamr@2
   827
	TInt iUnformattedStart; // document position of the start of any unformatted text;
williamr@2
   828
							// if < KMaxTInt, background formatting can be used
williamr@2
   829
							// (by calling FormatNextLine) to format the remainder
williamr@2
   830
	TBool iParInvalid;		// if true and background formatting is happening, the remainder of the paragraph
williamr@2
   831
							// containing iUnformattedStart is invalid and must be reformatted;
williamr@2
   832
							// otherwise, formatting stops when line ends match
williamr@4
   833
	TTmHighlightExtensions *iHighlightExtensions;
williamr@4
   834
	TInt iDmmyForIHighlightExtensions[3];	// It is only here to add padding for maintain compatibility 
williamr@4
   835
	TLayDocTextSource* iSource;	// the source of the text
williamr@2
   836
	// before adding any new member variables to the end of this class, please
williamr@2
   837
	// consider whether you can insert them before the iDummy member variable
williamr@2
   838
	// further up, which currently represents wasted space.
williamr@4
   839
	TInt iDmmyForISource[23];	// It is only here to add padding for maintain compatibility 
williamr@2
   840
	};
williamr@2
   841
williamr@2
   842
/**
williamr@2
   843
Cursor position.
williamr@2
   844
williamr@2
   845
The TMovementType enum defined in this class is used to indicate the direction
williamr@2
   846
of a scroll or cursor movement. The remainder of this class does not form part
williamr@2
   847
of the API.
williamr@2
   848
@publishedAll
williamr@2
   849
@released
williamr@2
   850
*/
williamr@2
   851
class TCursorPosition
williamr@2
   852
williamr@2
   853
	{
williamr@2
   854
public:
williamr@2
   855
williamr@2
   856
williamr@2
   857
	/** Direction of cursor movement. */
williamr@2
   858
	enum TMovementType
williamr@2
   859
		{
williamr@2
   860
		/** No cursor movement */
williamr@2
   861
		EFNoMovement,
williamr@2
   862
		/** Single character cursor movement to the left */
williamr@2
   863
		EFLeft,
williamr@2
   864
		/** Single character cursor movement to the right */
williamr@2
   865
		EFRight,
williamr@2
   866
		/** Line up cursor movement */
williamr@2
   867
		EFLineUp,
williamr@2
   868
		/** Line down cursor movement */
williamr@2
   869
		EFLineDown,
williamr@2
   870
		/** Page up cursor movement */
williamr@2
   871
		EFPageUp,
williamr@2
   872
		/** Page down cursor movement */
williamr@2
   873
		EFPageDown,
williamr@2
   874
		/** Cursor movement to line start */
williamr@2
   875
		EFLineBeg,
williamr@2
   876
		/** Cursor movement to line end */
williamr@2
   877
		EFLineEnd
williamr@2
   878
		};
williamr@2
   879
williamr@2
   880
	/** Selection of the left end or right end of a run of text. */
williamr@2
   881
	enum TVisualEnd
williamr@2
   882
		{
williamr@2
   883
		/** Leftmost end. */
williamr@2
   884
		EVisualLeft,
williamr@2
   885
		/** Rightmost end. */
williamr@2
   886
		EVisualRight
williamr@2
   887
		};
williamr@2
   888
williamr@2
   889
	enum TPosHint
williamr@2
   890
		{
williamr@2
   891
		EPosHintUndefined           = 0,
williamr@2
   892
		/** Left to right typing expected. */
williamr@2
   893
		EInsertStrongL2R = 1,
williamr@2
   894
		/** Right to left typing expected. */
williamr@2
   895
		EInsertStrongR2L = 2,
williamr@2
   896
williamr@2
   897
		// Maybe several more.
williamr@2
   898
		//...
williamr@2
   899
		EPosHintLast
williamr@2
   900
		};
williamr@2
   901
		
williamr@2
   902
	inline TCursorPosition();
williamr@2
   903
	inline void SetLayout(CTextLayout *aLayout);
williamr@2
   904
	inline void UpdateLatentX(TInt aX);
williamr@2
   905
	inline void SetToPreviousHighlight();
williamr@2
   906
	inline void SetToCurrentHighlight();
williamr@2
   907
	inline void CancelHighlight();
williamr@2
   908
	inline void SetDocPos(const TTmDocPos& aDocPos);
williamr@2
   909
	void UpdateLatentPosition();
williamr@2
   910
	TInt SetSelectionL(const TCursorSelection& aSelection);
williamr@2
   911
	void SetPendingSelection(const TCursorSelection& aSelection);
williamr@2
   912
	void GetOldSelection(TCursorSelection& aSelection) const;
williamr@2
   913
	void GetSelection(TCursorSelection& aSelection) const;
williamr@2
   914
	TInt SetDocPosL(TBool aDragSelectOn,const TTmDocPos& aDocPos);
williamr@2
   915
	TInt SetXyPosL(TBool aDragSelectOn,TPoint aPos,TBool aAllowPictureFrame);
williamr@2
   916
	TInt MoveL(TBool aDragSelectOn,TMovementType& aMovement,TBool aAllowPictureFrame);
williamr@2
   917
	const TTmDocPos& VisualEndOfRunL(
williamr@2
   918
		const TTmDocPos& aStart, const TTmDocPos& aEnd,
williamr@2
   919
		TVisualEnd aDirection);
williamr@2
   920
	void TextMoveVertically();
williamr@2
   921
	inline void DontDrawOldPictureFrame();
williamr@2
   922
williamr@2
   923
	// inquiry functions
williamr@2
   924
	inline TBool IsSelection() const;
williamr@2
   925
	inline TBool IsSelectionToDraw() const;
williamr@2
   926
	TBool IsPictureFrame() const;
williamr@2
   927
	TBool IsNewPictureFrame() const;
williamr@2
   928
	inline const TTmDocPos& TmDocPos() const;
williamr@2
   929
	inline TInt DocPos() const;
williamr@2
   930
	inline TBool DrawHighlight() const;
williamr@2
   931
	inline TBool DrawOldPictureFrame() const;
williamr@2
   932
	inline TBool DrawNewPictureFrame() const;
williamr@2
   933
	TBool GetCursor(TTmCursorPlacement aPlacement,TPoint& aOrigin,TInt& aWidth,TInt& aAscent,TInt& aDescent) const;
williamr@2
   934
	TPosHint PositioningHint() const { return iPositioningHint; }
williamr@2
   935
	void SetPositioningHint (TPosHint aHint)
williamr@2
   936
		{iPositioningHint = aHint;}
williamr@2
   937
williamr@2
   938
	TTmPosInfo2& ChoosePosition(TTmPosInfo2& aPreferred,
williamr@2
   939
		TTmPosInfo2& aBackup);
williamr@2
   940
williamr@2
   941
private:
williamr@2
   942
	enum
williamr@2
   943
		{
williamr@2
   944
		EFAbove = -1,
williamr@2
   945
		EFInside = 0,
williamr@2
   946
		EFBelow = 1
williamr@2
   947
		};
williamr@2
   948
williamr@2
   949
	// bit values for iFlags
williamr@2
   950
	enum
williamr@2
   951
		{
williamr@2
   952
		EDrawHighlight = 1,
williamr@2
   953
		EDrawOldPictureFrame = 2,
williamr@2
   954
		EDrawNewPictureFrame = 4,
williamr@2
   955
		EReturnPreviousHighlight = 8,
williamr@2
   956
		ESelected = 16
williamr@2
   957
		};
williamr@2
   958
williamr@2
   959
	TInt ViewTopOfLineL(const TTmDocPos& aDocPos,TInt& aYPos);
williamr@2
   960
	void CheckSelection(TBool aSelect);
williamr@2
   961
	void CheckNullSelection();
williamr@2
   962
	inline void UpdateLatentY(TInt aY);
williamr@2
   963
	TInt CheckCursorOnScreenL(TInt& aY);
williamr@2
   964
	TBool LeftRightL(TTmPosInfo2& aPos, TTmLineInfo& aLine, TMovementType& aMove);
williamr@2
   965
	void StartEnd(TTmPosInfo2& aPos, TTmLineInfo& aLine, TMovementType& aMove);
williamr@2
   966
	void UpDownL(TTmPosInfo2& aPos, TTmLineInfo& aLine, TMovementType& aMove);
williamr@2
   967
	TInt PageScrollL(TMovementType& aMove);
williamr@2
   968
	TInt DoSetDocPosL(const TTmDocPos& aDocPos);
williamr@2
   969
	TInt DoSetVisibleDocPosL(const TTmDocPos& aDocPos);
williamr@2
   970
	void DoSetXyPos(TPoint& aXy);
williamr@2
   971
	void SetPictureFrame(const TTmDocPos& aDocPos,TInt aAnchor,const TRect& aPictureRect);
williamr@2
   972
	inline TBool CalculateCursorPos(TPoint& aCurPos);
williamr@2
   973
williamr@2
   974
	TTmDocPos iDocPos;
williamr@2
   975
	TInt iAnchor;
williamr@2
   976
	TInt iOldDocPos;
williamr@2
   977
	TInt iOldAnchor;
williamr@2
   978
	TUint iFlags;
williamr@2
   979
	TInt iLatentX;
williamr@2
   980
	TInt iLatentY;
williamr@2
   981
	CTextLayout* iLayout;
williamr@2
   982
	TPosHint iPositioningHint;
williamr@2
   983
	};
williamr@2
   984
williamr@2
   985
// inline functions
williamr@2
   986
inline const CTmTextLayout& CTextLayout::TagmaTextLayout() const
williamr@2
   987
	{
williamr@4
   988
	return *iText;
williamr@2
   989
	}
williamr@2
   990
williamr@2
   991
inline void CTextLayout::GetOrigin(TPoint& aPoint) const
williamr@2
   992
	{
williamr@2
   993
	aPoint.iX = 0;
williamr@2
   994
	aPoint.iY = -iBandTop;
williamr@2
   995
	}
williamr@2
   996
williamr@2
   997
inline CTextLayout::TTagmaForwarder::TTagmaForwarder(const CTextLayout& aLayout):
williamr@2
   998
	iLayout(aLayout)
williamr@2
   999
	{
williamr@2
  1000
	}
williamr@2
  1001
williamr@2
  1002
inline const CTmTextLayout& CTextLayout::TTagmaForwarder::TextLayout() const
williamr@2
  1003
	{
williamr@2
  1004
	return iLayout.TagmaTextLayout();
williamr@2
  1005
	}
williamr@2
  1006
williamr@2
  1007
inline void CTextLayout::TTagmaForwarder::GetOrigin(TPoint& aPoint) const
williamr@2
  1008
	{
williamr@2
  1009
	iLayout.GetOrigin(aPoint);
williamr@2
  1010
	}
williamr@2
  1011
williamr@2
  1012
inline const TTmHighlightExtensions& CTextLayout::HighlightExtensions() const
williamr@2
  1013
	{
williamr@4
  1014
	return *iHighlightExtensions;
williamr@2
  1015
	}
williamr@2
  1016
williamr@2
  1017
/**
williamr@2
  1018
Dangerous function. Makes scroll operations set the top of the screen flush to
williamr@2
  1019
the top of a line. In general this might scroll the cursor off the screen.
williamr@2
  1020
*/
williamr@2
  1021
void CTextLayout::RestrictScrollToTopsOfLines(TBool a)
williamr@2
  1022
	{
williamr@2
  1023
	if (a)
williamr@2
  1024
		iScrollFlags |= EFScrollOnlyToTopsOfLines;
williamr@2
  1025
	else
williamr@2
  1026
		iScrollFlags &= ~EFScrollOnlyToTopsOfLines;
williamr@2
  1027
	}
williamr@2
  1028
williamr@2
  1029
/**Constructs a fully initialized TViewYPosQualifier object. The hotspot is
williamr@2
  1030
initialized to be the baseline of the line, the screen is not filled, and the
williamr@2
  1031
top line is not forced to be fully visible. */
williamr@2
  1032
inline TViewYPosQualifier::TViewYPosQualifier():
williamr@2
  1033
	iHotSpot(EFViewBaseLine),
williamr@2
  1034
	iFillScreen(EFalse),
williamr@2
  1035
	iFullyVisible(EFViewDontForceLineFullyVisible)
williamr@2
  1036
	{
williamr@2
  1037
	}
williamr@2
  1038
williamr@2
  1039
williamr@2
  1040
/**Constructs a TViewRectChanges object, initializing its iScrollAtTop and
williamr@2
  1041
iScrollAtBottom members to zero. */
williamr@2
  1042
inline TViewRectChanges::TViewRectChanges():
williamr@2
  1043
	iScrollAtTop(0),
williamr@2
  1044
	iScrollAtBottom(0)
williamr@2
  1045
	{
williamr@2
  1046
	}
williamr@2
  1047
williamr@2
  1048
/**Constructs the TCursorSelection object initialising the cursor and anchor
williamr@2
  1049
positions to zero. */
williamr@2
  1050
inline TCursorSelection::TCursorSelection():
williamr@2
  1051
	iCursorPos(0),
williamr@2
  1052
	iAnchorPos(0)
williamr@2
  1053
	{
williamr@2
  1054
	}
williamr@2
  1055
williamr@2
  1056
/** Constructs the TCursorSelection object with a cursor and anchor position.
williamr@2
  1057
@param aCursorPos The cursor position.
williamr@2
  1058
@param aAnchorPos The anchor position. */
williamr@2
  1059
inline TCursorSelection::TCursorSelection(TInt aCursorPos,TInt aAnchorPos):
williamr@2
  1060
	iCursorPos(aCursorPos),
williamr@2
  1061
	iAnchorPos(aAnchorPos)
williamr@2
  1062
	{
williamr@2
  1063
	}
williamr@2
  1064
williamr@2
  1065
/** Sets the cursor and anchor positions for the selection.
williamr@2
  1066
@param aCursorPos The new cursor position.
williamr@2
  1067
@param aAnchorPos The new anchor position. */
williamr@2
  1068
inline void TCursorSelection::SetSelection(TInt aCursorPos,TInt aAnchorPos)
williamr@2
  1069
	{
williamr@2
  1070
	iCursorPos = aCursorPos;
williamr@2
  1071
	iAnchorPos = aAnchorPos;
williamr@2
  1072
	}
williamr@2
  1073
williamr@2
  1074
/** Gets the lesser of the cursor and anchor positions.
williamr@2
  1075
@return The lesser of the cursor and anchor positions. */
williamr@2
  1076
inline TInt TCursorSelection::LowerPos() const
williamr@2
  1077
	{
williamr@2
  1078
	return Min(iCursorPos,iAnchorPos);
williamr@2
  1079
	}
williamr@2
  1080
williamr@2
  1081
/** Gets the greater of the cursor and anchor positions.
williamr@2
  1082
@return The greater of the cursor and anchor positions. */
williamr@2
  1083
inline TInt TCursorSelection::HigherPos() const
williamr@2
  1084
	{
williamr@2
  1085
	return Max(iCursorPos,iAnchorPos);
williamr@2
  1086
	}
williamr@2
  1087
williamr@2
  1088
/** Returns the number of characters in the selected range.
williamr@2
  1089
@return The length of the selection. */
williamr@2
  1090
inline TInt TCursorSelection::Length() const
williamr@2
  1091
	{
williamr@2
  1092
	return Abs(iCursorPos - iAnchorPos);
williamr@2
  1093
	}
williamr@2
  1094
williamr@2
  1095
/** Constructs the TCursorPosition object, initializing its members
williamr@2
  1096
	iAnchor, iOldDocPos, iOldAnchor, iFlags, iLatentX, iLatentY to 
williamr@2
  1097
	zero, iLayout to NULL, and iPositioningHint to undefined.
williamr@2
  1098
*/
williamr@2
  1099
inline TCursorPosition::TCursorPosition():
williamr@2
  1100
	iAnchor(0),
williamr@2
  1101
	iOldDocPos(0),
williamr@2
  1102
	iOldAnchor(0),
williamr@2
  1103
	iFlags(0),
williamr@2
  1104
	iLatentX(0),
williamr@2
  1105
	iLatentY(0),
williamr@2
  1106
	iLayout(NULL),
williamr@2
  1107
	iPositioningHint(EPosHintUndefined)
williamr@2
  1108
	{
williamr@2
  1109
	}
williamr@2
  1110
williamr@2
  1111
/** Sets the text layout which TCursorPosition is related.
williamr@2
  1112
@param aLayout The text layout.
williamr@2
  1113
*/
williamr@2
  1114
inline void TCursorPosition::SetLayout(CTextLayout *aLayout)
williamr@2
  1115
	{
williamr@2
  1116
	iLayout = aLayout;
williamr@2
  1117
	}
williamr@2
  1118
williamr@2
  1119
/** Tests whether there is currently a selected region.
williamr@2
  1120
@return True if there is a selected region. False if not. */
williamr@2
  1121
inline TBool TCursorPosition::IsSelection() const
williamr@2
  1122
	{
williamr@2
  1123
	return iFlags & ESelected;
williamr@2
  1124
	}
williamr@2
  1125
williamr@2
  1126
/** Tests whether there is currently a highlighted region being drawn.
williamr@2
  1127
@return True if there is a selected region. False if not. */
williamr@2
  1128
inline TBool TCursorPosition::IsSelectionToDraw() const
williamr@2
  1129
	{
williamr@2
  1130
	return iFlags & (EDrawHighlight | EDrawOldPictureFrame | EDrawNewPictureFrame);
williamr@2
  1131
	}
williamr@2
  1132
williamr@2
  1133
/** Sets the flag which directs <code>GetSelection()</code> and 
williamr@2
  1134
<code>IsPictureFrame()</code> to operate on the previous highlight
williamr@2
  1135
instead of the current highlight.
williamr@2
  1136
*/
williamr@2
  1137
inline void TCursorPosition::SetToPreviousHighlight()
williamr@2
  1138
	{
williamr@2
  1139
	iFlags |= EReturnPreviousHighlight;
williamr@2
  1140
	}
williamr@2
  1141
williamr@2
  1142
/** Clears the special flag set in <code>SetToPreviousHighlight()</code>
williamr@2
  1143
so that <code>GetSelection()</code> and <code>IsPictureFrame()</code>
williamr@2
  1144
will operate on the current highlight.
williamr@2
  1145
*/
williamr@2
  1146
inline void TCursorPosition::SetToCurrentHighlight()
williamr@2
  1147
	{
williamr@2
  1148
	iFlags &= ~EReturnPreviousHighlight;
williamr@2
  1149
	}
williamr@2
  1150
williamr@2
  1151
/** Removes the selection, and redraws the affected part of the screen.
williamr@2
  1152
*/
williamr@2
  1153
inline void TCursorPosition::CancelHighlight()
williamr@2
  1154
	{
williamr@2
  1155
	iFlags &= ~(ESelected | EDrawHighlight | EDrawOldPictureFrame | EDrawNewPictureFrame);
williamr@2
  1156
	}
williamr@2
  1157
williamr@2
  1158
/** Sets the latent horizontal text cursor position. This is the horizontal
williamr@2
  1159
coordinate to which the text cursor will be moved. 
williamr@2
  1160
@param aX The horizontal coordinate to which the text cursor should be moved
williamr@2
  1161
*/
williamr@2
  1162
inline void TCursorPosition::UpdateLatentX(TInt aX)
williamr@2
  1163
	{
williamr@2
  1164
	iLatentX = aX;
williamr@2
  1165
	}
williamr@2
  1166
williamr@2
  1167
/** Sets the latent vertical text cursor position. This is the vertical 
williamr@2
  1168
coordinate to which the text cursor will be moved. 
williamr@2
  1169
@param aY The vertical coordinate to which the text cursor should be moved
williamr@2
  1170
*/
williamr@2
  1171
inline void TCursorPosition::UpdateLatentY(TInt aY)
williamr@2
  1172
	{
williamr@2
  1173
	iLatentY = aY;
williamr@2
  1174
	}
williamr@2
  1175
williamr@2
  1176
/** Caculate  x-y position of the cursor
williamr@2
  1177
If ETrue is returned, places the position of the intersection of 
williamr@2
  1178
the character edge with the baseline in aPos
williamr@2
  1179
@param aPos On return, stores the position of the intersection of 
williamr@2
  1180
the character edge with the baseline
williamr@2
  1181
@return ETrue if the document is in the formatted text, otherwise EFalse.
williamr@2
  1182
*/
williamr@2
  1183
inline TBool TCursorPosition::CalculateCursorPos(TPoint& aPos)
williamr@2
  1184
	{
williamr@2
  1185
	TTmPosInfo2 pos_info;
williamr@2
  1186
	TBool result = iLayout->FindDocPos(iDocPos,pos_info);
williamr@2
  1187
	aPos = pos_info.iEdge;
williamr@2
  1188
	return result;
williamr@2
  1189
	}
williamr@2
  1190
	
williamr@2
  1191
/** Gets the document position, the structure for holding a raw document 
williamr@2
  1192
position that can be converted to or from an x-y position and compared 
williamr@2
  1193
ordinally, which cannot be done with the more abstract TTmDocPosSpec class. 
williamr@2
  1194
@return the document position
williamr@2
  1195
*/
williamr@2
  1196
inline const TTmDocPos& TCursorPosition::TmDocPos() const
williamr@2
  1197
	{
williamr@2
  1198
	return iDocPos;
williamr@2
  1199
	}
williamr@2
  1200
/** Gets the edge position in the document.
williamr@2
  1201
@return the edge position in the document.
williamr@2
  1202
*/
williamr@2
  1203
inline TInt TCursorPosition::DocPos() const
williamr@2
  1204
	{
williamr@2
  1205
	return iDocPos.iPos;
williamr@2
  1206
	}
williamr@2
  1207
williamr@2
  1208
/** Sets the document position, the structure for holding a raw document 
williamr@2
  1209
position that can be converted to or from an x-y position and compared 
williamr@2
  1210
ordinally, which cannot be done with the more abstract TTmDocPosSpec class. 
williamr@2
  1211
@param aDocPos the document position
williamr@2
  1212
*/
williamr@2
  1213
inline void TCursorPosition::SetDocPos(const TTmDocPos& aDocPos)
williamr@2
  1214
	{
williamr@2
  1215
	iDocPos = aDocPos;
williamr@2
  1216
	}
williamr@2
  1217
williamr@2
  1218
/** Tests whether the highlighted region needs to be drawn.
williamr@2
  1219
The function will be called by CTextView::UpdateHighlightL()
williamr@2
  1220
to correct the highlight after a cursor movement
williamr@2
  1221
@return True if the highlighted region needs to be drawn. False if not. */
williamr@2
  1222
inline TBool TCursorPosition::DrawHighlight() const
williamr@2
  1223
	{
williamr@2
  1224
	return iFlags & EDrawHighlight;
williamr@2
  1225
	}
williamr@2
  1226
williamr@2
  1227
/** Tests whether there is a previous picture frame that needs to be drawn.
williamr@2
  1228
The function will be called by CTextView::UpdateHighlightL()
williamr@2
  1229
to correct the highlight after a cursor movement
williamr@2
  1230
@return True if there is a previous picture frame that needs to be drawn. False if not. */	
williamr@2
  1231
inline TBool TCursorPosition::DrawOldPictureFrame() const
williamr@2
  1232
	{
williamr@2
  1233
	return iFlags & EDrawOldPictureFrame;
williamr@2
  1234
	}
williamr@2
  1235
williamr@2
  1236
/** Tests whether there is a new picture frame that needs to be drawn.
williamr@2
  1237
The function will be called by CTextView::UpdateHighlightL()
williamr@2
  1238
to correct the highlight after a cursor movement
williamr@2
  1239
@return True if there is a new picture frame that needs to be drawn. False if not. */		
williamr@2
  1240
inline TBool TCursorPosition::DrawNewPictureFrame() const
williamr@2
  1241
	{
williamr@2
  1242
	return iFlags & EDrawNewPictureFrame;
williamr@2
  1243
	}
williamr@2
  1244
williamr@2
  1245
/** Sets to not draw the previous picture frame
williamr@2
  1246
*/
williamr@2
  1247
inline void TCursorPosition::DontDrawOldPictureFrame()
williamr@2
  1248
	{
williamr@2
  1249
	iFlags &= ~EDrawOldPictureFrame;
williamr@2
  1250
	}
williamr@2
  1251
williamr@2
  1252
#endif