diff -r b9ad20498fb4 -r 8b9155204a54 textrendering/texthandling/inc/TXTFRMAT.H --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/textrendering/texthandling/inc/TXTFRMAT.H Fri Jun 04 10:37:54 2010 +0100 @@ -0,0 +1,821 @@ +/* +* Copyright (c) 1997-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 __TXTFRMAT_H__ +#define __TXTFRMAT_H__ + +#include +#include +#include + + +// Classes declared in this file: +class TTabStop; +class TParaBorder; +class TBullet; +class TParaBorderArray; +class CParaFormat; +class TParaFormatMask; +class TFontPresentation; +class TCharFormat; +class TCharFormatMask; + +/** +Provides support for system colours, in addition to literal colours, in +text formatting. + +The base class TRgb stores the 24-bit literal colour value using a TUint32. +TLogicalRgb uses the MSB from iValue2 data member as an 8-bit index. The +purpose of the index is to allow applications to use logical colours. If the +index is zero, the value is not a logical colour; it is treated as an ordinary +TRgb value. If the index is non zero (1-255), the colour should be translated by the +application into a system colour. Indices 254 and 255 are reserved for the +system foreground and background colours, respectively and should be translated +into them. Translation from index to RGB colour occurs in the implementation of +MFormParam::SystemColor(). + +All colours in the Text and Text Attributes API are stored using TLogicalRgb +values and are initialised to either TLogicalRgb::ESystemForegroundColor or +TLogicalRgb::ESystemBackgroundColor. + +This system allows an application to set its text colours once, perhaps using +the system-wide colour scheme, rather than having to set the colours each +time a text object is created. It is also compatible with legacy code which +expects TRgb rather than TLogicalRgb values: for example, the logical +foreground and background colours have their bottom three bytes filled with +black and white respectively so that code which expects TRgb values can still +use them. +@publishedAll +@released +*/ +class TLogicalRgb : public TRgb + { + public: + + /* + Reserved colour indices for default foreground and background colours, + and colours for the selection highlight. The top 128 indices (128-255) + are reserved for future expansion, but the first 126 non-zero indices + (1-127) can be used by the GUI as convenient. + */ + enum + { + ESystemSelectionForegroundIndex = 252, + ESystemSelectionBackgroundIndex = 253, + /** Index reserved for the system foreground colour (=254). */ + ESystemForegroundIndex = 254, + /** Index reserved for the system background colour (=255). */ + ESystemBackgroundIndex = 255 + }; + + + + /** Used to construct TLogicalRgb objects which should use either the + system foreground or background colour. */ + enum TSystemColor + { + ESystemSelectionForegroundColor = ESystemSelectionForegroundIndex << 24, + ESystemSelectionBackgroundColor = ESystemSelectionBackgroundIndex << 24, + /** The system foreground colour. */ + ESystemForegroundColor = ESystemForegroundIndex << 24, + /** The system background colour. */ + ESystemBackgroundColor = (ESystemBackgroundIndex << 24) | 0xFFFFFF + }; + + /** Constructs a new TLogicalRgb object. */ + TLogicalRgb() : + iValue2(0) + { + } + + /** Constructs the object with a 32-bit integer. The index is stored in the + MSB of iValue2 data member. A TRgb value may be stored in the base TRgb class. + @param aValue Integer holding the logical colour index. */ + TLogicalRgb(TUint32 aValue): + iValue2(aValue & 0xFF000000) + { + SetInternal((TUint32)aValue | 0xFF000000); + } + + /** Constructs the object with a TSystemColor value. + @param aValue Identifies whether the colour is the system foreground or + system background colour. */ + TLogicalRgb(TSystemColor aValue) : + iValue2((TUint32)aValue & 0xFF000000) + { + SetInternal((TUint32)aValue | 0xFF000000); + } + + /** Constructs a new TLogicalRgb object from an existing one. */ + TLogicalRgb(const TRgb& aRgb) : + TRgb(aRgb), + iValue2(0) + { + } + + /** Returns the logical colour's index value. Zero indicates that the value + is not a logical colour; it is an ordinary TRgb value. 254 and 255 indicate + the system foreground and background colours, respectively. + @return The index: between zero and 255 inclusive. */ + TUint SystemColorIndex() const + { + return iValue2 >> 24; + } + + /** Sets the logical colour's index value. + @param aIndex The new index value (between 1 and 253 inclusive). */ + void SetSystemColorIndex(TUint aIndex) + { + iValue2 = aIndex << 24; + } + +private: + TUint32 iValue2; + + }; + +/** +Indicates which format attributes are relevant when setting or sensing text +formatting. +@publishedAll +@released +*/ +enum TTextFormatAttribute + { + // Paragraph format attributes. + /** Language of the paragraph for proofing. */ + EAttParaLanguage, + /** Background colour of the paragraph. */ + EAttFillColor, + /** Leading text margin. */ + EAttLeftMargin, + /** Trailing text margin. */ + EAttRightMargin, + /** First line leading indent. */ + EAttIndent, + /** Horizontal alignment of paragraph. */ + EAttAlignment, + /** Vertical paragraph alignment. */ + EAttVerticalAlignment, + /** Inter-line spacing. */ + EAttLineSpacing, + /** Control for EAttLineSpacing. */ + EAttLineSpacingControl, + /** Space above paragraph. */ + EAttSpaceBefore, + /** Space below paragraph. */ + EAttSpaceAfter, + /** Whether a page break can occur within the paragraph. */ + EAttKeepTogether, + /** Whether a page break can occur between this and the next paragraph. */ + EAttKeepWithNext, + /** Whether a page break should be inserted before this paragraph. */ + EAttStartNewPage, + /** Whether the last line of a paragraph can appear by itself at the top of a new + page, (widow), or the first line of a paragraph can appear by itself at the + bottom of the page, (orphan). */ + EAttWidowOrphan, + /** Whether the paragraph should line wrap at the right margin. */ + EAttWrap, + /** Distance between paragraph border and enclosed text. */ + EAttBorderMargin, + /** Top of paragraph border. */ + EAttTopBorder, + /** Bottom of paragraph border. */ + EAttBottomBorder, + /** Left-hand side of paragraph border. */ + EAttLeftBorder, + /** Right-hand side of paragraph border. */ + EAttRightBorder, + /** Bullet point associated with paragraph. */ + EAttBullet, + /** Spacing between default tab stops. */ + EAttDefaultTabWidth, + /** Tab stop. */ + EAttTabStop, + + // Character format attributes. + /** Language of individual characters within a paragraph for proofing. */ + EAttCharLanguage, + /** Text colour. */ + EAttColor, + /** Text highlight colour. */ + EAttFontHighlightColor, + /** Text highlight style. */ + EAttFontHighlightStyle, + /** Font height. */ + EAttFontHeight, + /** Font posture (i.e. italics). */ + EAttFontPosture, + /** Font stroke weight (i.e. bold). */ + EAttFontStrokeWeight, + /** Subscript, superscript or normal print position. */ + EAttFontPrintPos, + /** Underlining. */ + EAttFontUnderline, + /** Strikethrough. */ + EAttFontStrikethrough, + /** The typeface name. */ + EAttFontTypeface, + /** Vertical picture alignment. */ + EAttFontPictureAlignment, + /** Hidden text. */ + EAttFontHiddenText, + + /** Used internally to indicate the count of all attributes. */ + ETextFormatAttributeCount + }; + +/* +Following enum and variable should not be used by external developers. +*/ +enum {EVariableLengthValue = 0}; + +const TInt KMaxStyleName = 0x20; +const TInt KMaxParaAttributes = EAttTabStop; +const TInt KMaxCharAttributes = EAttFontHiddenText - KMaxParaAttributes; +const TInt KTabNotFound = -1; + +/** +A tab stop. + +This is a position on a page used to align columns of text. It has a twips +position and an alignment. The twips position is the width in twips (1/1440th +of an inch) of the tab stop, i.e. the number of twips from the start of the +line at which text can be inserted. It uniquely identifies the tab stop. The +alignment (left, right, or centre) indicates how text inserted at the tab +stop should be aligned. + +Tab stops are paragraph format attributes. They are owned by the CParaFormat +class, through which tab stops can be added and removed. +@publishedAll +@released +*/ +class TTabStop + { +public: + /** Text alignment at the tab stop. */ + enum TTabType + { + /** No tab. */ + ENullTab, + /** Text is aligned to the tab stop's leading edge (left for + left-to-right paragraphs, right for right-to-left paragraphs). */ + ELeftTab, + /** Text is aligned to the tab stop's trailing edge (right for + left-to-right paragraphs, left for right-to-left paragraphs). */ + ECenteredTab, + /** Text is right aligned at the tab stop. */ + ERightTab + }; +public: + IMPORT_C TTabStop(); + IMPORT_C TTabStop(const TTabStop& aTabStop); + IMPORT_C TTabStop& operator=(const TTabStop& aTabStop); + IMPORT_C TBool operator==(const TTabStop& aTabStop) const; + inline TBool operator!=(const TTabStop& aTabStop) const; +public: + /** The twips position. This is the width in twips of the tab stop, i.e. + the number of twips from the start of the line at which text can be + inserted. */ + TUint32 iTwipsPosition; + /** Text alignment at the tab stop. */ + TTabType iType; + }; + +/** +Defines the characteristics of one of the four sides of a paragraph border. + +These are the line style, thickness and colour. Paragraph borders are paragraph +format attributes. They are owned by the CParaFormat class which allows +paragraph borders to be added and removed. The CParaFormat::TParaBorderSide +enumeration identifies which side of the paragraph the object applies to. +@publishedAll +@released +*/ +class TParaBorder + { +public: + + /** Line styles. */ + enum TLineStyle + { + /** No line style. */ + ENullLineStyle, + /** Solid line. */ + ESolid, + /** Double solid line. */ + EDouble, + /** Dotted line. */ + EDotted, + /** Dashed line. */ + EDashed, + /** Alternating dots and dashes. */ + EDotDash, + /** Alternating sequence of two dots and a dash. */ + EDotDotDash + }; + // + IMPORT_C TParaBorder(); + IMPORT_C TBool operator==(const TParaBorder& aParaBorder) const; + inline TBool operator!=(const TParaBorder& aParaBorder) const; +public: + /** The line style. By default, ENullLineStyle. */ + TLineStyle iLineStyle; + /** The line thickness in twips. By default, zero. */ + TInt iThickness; + /** The line colour. By default, the system's default foreground colour. */ + TLogicalRgb iColor; + /** ETrue indicates that the line colour is set to the default or current + text colour, overriding iColor. EFalse indicates that the iColor value is + used. By default, ETrue. */ + TBool iAutoColor; + }; + +/** +Stores the four sides of a paragraph border. + +Paragraph borders sides are set individually using functions provided by class +CParaFormat. +@publishedAll +@released +*/ +class TParaBorderArray + { +public: + TParaBorder iBorder[4]; + }; + +/** +A bullet point. + +This is a paragraph format attribute, stored as the iBullet member of class +CParaFormat. + +Bullet points have a typeface, height, colour and a character code (defines +the symbol displayed). Single level bullets only are supported. Bullets may +also have a hanging indent. If set, this means that the rest of the paragraph +following the line containing the bullet point is indented. +@publishedAll +@released +*/ +class TBullet + { + public: + IMPORT_C TBullet(); + IMPORT_C TBool operator ==(const TBullet& aBullet) const; + inline TBool operator !=(const TBullet& aBullet) const; + + /** + Identifies the bullet style. + + Note: Styles other than ENullStyle and EBulletStyle are not currently supported. + They have the same effect as the EBulletStyle. + */ + enum TStyle + { + /** + No bullet. Used for style layers that override a bullet with the absence of a bullet. + */ + ENullStyle, + /** + A bullet point. Character with code 0x2022 is used by default. + */ + EBulletStyle, + EArabicNumberStyle, + ESmallRomanNumberStyle, + ECapitalRomanNumberStyle, + ESmallLetterStyle, + ECapitalLetterStyle + }; + + /** Paragraph alignment */ + enum TAlignment + { + /** Paragraph left aligned. */ + ELeftAlign, + /** Paragraph centre aligned. */ + ECenterAlign, + /** Paragraph right aligned. */ + ERightAlign + }; + + /** The Unicode character used to represent the bullet point. By default + 0x2022. */ + TChar iCharacterCode; // the bullet or other symbol used if iStyle is EBulletStyle + /** The height in twips of the font used for the bullet point character. + By default, zero. */ + TUint iHeightInTwips; + /** The typeface used for the bullet point character. */ + TTypeface iTypeface; + /** ETrue to indent the rest of the paragraph from the bullet point. + EFalse to align the bullet point character with the rest of the paragraph. */ + TBool iHangingIndent; + /** The colour of the bullet point character. By default, the system's + default foreground colour. */ + TLogicalRgb iColor; + TStyle iStyle; // is this a bullet or a number or a letter? + TInt iStartNumber; // the number of the first paragraph in a run of paragraphs in this style + TAlignment iAlignment; // alignment of the bullet or number within the margin + }; + +/** +A transient container of paragraph format attributes, including tab stops, +bullet points and paragraph borders. + +Rich and global text objects store paragraph formatting using paragraph format +layers (see class CParaFormatLayer). The CParaFormat class is used to store +the relevant attribute values when setting or sensing a CParaFormatLayer. +It is normally used in combination with a TParaFormatMask, to specify which +attributes are relevant to the function concerned. + +On construction, all CParaFormat member data is initialised. The attributes +which are not explicitly set are assigned default values. +@publishedAll +@released +*/ +class CParaFormat: public CBase + { +public: + /** Miscellaneous constants. */ + enum + { + /** The maximum number of paragraph borders (= 4). */ + EMaxParaBorder = 4 + }; + + /** Paragraph border sides */ + enum TParaBorderSide + { + /** The border at the top of the paragraph. */ + EParaBorderTop, + /** The border at the bottom of the paragraph. */ + EParaBorderBottom, + /** The border on the left hand side. */ + EParaBorderLeft, + /** The border on the right hand side. */ + EParaBorderRight + }; + + /** Line spacing control */ + enum TLineSpacingControl + { + /** Twips line spacing must be at least as wide as the + iLineSpacingInTwips value. */ + ELineSpacingAtLeastInTwips, + /** Twips line spacing must be exactly the iLineSpacingInTwips value. */ + ELineSpacingExactlyInTwips, + /** Pixels line spacing must be at least as wide as the line spacing + value in pixels. */ + ELineSpacingAtLeastInPixels, + /** Pixels line spacing must be exactly the same as the line spacing + value in pixels. */ + ELineSpacingExactlyInPixels + }; + + /** Paragraph alignment */ + enum TAlignment + { + /** Paragraph aligned to the leading margin (left for left-to-right + paragraphs, right for right-to-left paragraphs). */ + ELeftAlign, + /** Paragraph top aligned. */ + ETopAlign = ELeftAlign, + /** Paragraph centre aligned. */ + ECenterAlign, + /** Paragraph aligned to the trailing margin (right for left-to-right + paragraphs, left for right-to-left paragraphs). */ + ERightAlign, + /** Paragraph bottom aligned. */ + EBottomAlign = ERightAlign, + /** Paragraph justified. */ + EJustifiedAlign, + /** Used by the spreadsheet application. Unlike ETopAlign and + EBottomAlign, provides no default implementation. */ + EUnspecifiedAlign, + /** User-defined paragraph alignment. */ + ECustomAlign, + /** Absolute left alignment */ + EAbsoluteLeftAlign, + /** Absolute right alignment */ + EAbsoluteRightAlign + }; + + /** Attribute sense mode */ + enum TParaFormatGetMode + { + /** Indicates that all paragraph format attributes are written to the + result when sensing paragraph format attributes. */ + EAllAttributes, + /** Indicates that tabs, bullets and borders are not sensed. */ + EFixedAttributes + }; + + IMPORT_C static CParaFormat* NewL(); + IMPORT_C static CParaFormat* NewLC(); + IMPORT_C static CParaFormat* NewL(const CParaFormat& aFormat); + IMPORT_C CParaFormat(); + IMPORT_C ~CParaFormat(); + IMPORT_C void ResetNonDestructive(); // preserves any allocated tabs, bullets or borders. + IMPORT_C void Reset(); // full reset, deletes and nulls any allocated tabs, bullets or borders. + IMPORT_C void CopyL(const CParaFormat& aFormat, const TParaFormatMask& aMask); + IMPORT_C void CopyL(const CParaFormat& aFormat); + IMPORT_C void Strip(); // Cleans up this paragraph format. + IMPORT_C TBool IsEqual(const CParaFormat& aFormat, const TParaFormatMask& aMask) const; + IMPORT_C TBool IsEqual(const CParaFormat& aFormat) const; + IMPORT_C void StoreTabL(const TTabStop& aTabStop); + IMPORT_C void RemoveTab(TInt aTabTwipsPosition); + inline void RemoveAllTabs(); + IMPORT_C const TTabStop TabStop(TInt aTabIndex) const; + inline TInt TabCount() const; + IMPORT_C TInt LocateTab(TInt aTabTwipsPosition) const; + IMPORT_C void SetParaBorderL(TParaBorderSide aSide, const TParaBorder& aBorder); // Overwrites any existing border for that side + IMPORT_C void RemoveAllBorders(); + IMPORT_C const TParaBorder ParaBorder(TParaBorderSide aSide) const; + + /** Tests whether any paragraph borders have been set. + + @return ETrue if any paragraph borders have been set, EFalse if not. */ + inline TBool BordersPresent() const { return iParaBorderArray != NULL;} + + inline TParaBorder* ParaBorderPtr(TParaBorderSide aSide) + + /** Gets a pointer to the paragraph border on the side specified. If no + paragraph border array has been allocated, returns NULL. + + @param aSide The side for the paragraph border. + @return Pointer to the paragraph border on the specified side. */ + { return iParaBorderArray ? &iParaBorderArray->iBorder[aSide] : NULL; } + IMPORT_C TBool AllBordersEqual(const CParaFormat& aFormat) const; + IMPORT_C TBool IsBorderEqual(TParaBorderSide aSide, const CParaFormat& aFormat) const; +private: + CParaFormat(const CParaFormat& aFormat); + void CreateTabListL(); + enum + { + ETabStoreGranularity = 2 + }; + + CParaFormat& operator=(const CParaFormat& aParaFormat); // intentionally unimplemented +private: + CArrayFixFlat* iTabList; // ordered list of tab stops; null if none + TParaBorderArray* iParaBorderArray; // array of paragraph borders; null if none +public: + /** The background colour of the paragraph. By default the default system + background colour. This colour applies to the area bounded by the paragraph + border, if one exists. */ + TLogicalRgb iFillColor; + /** The language of the paragraph for proofing. By default + KParaDefaultLanguage. Used for example when spell checking a document + which contains text in more than one language, so that the program + recognises the text as being in another language. */ + TInt32 iLanguage; + /** The width in twips of the leading margin (left for left-to-right + paragraphs, right for right-to-left paragraphs). By default + KParaDefaultLeftMargin (zero). */ + TInt32 iLeftMarginInTwips; + /** The width in twips of the trailing margin (right for left-to-right + paragraphs, left for right-to-left paragraphs). By default + KParaDefaultRightMargin (zero). */ + TInt32 iRightMarginInTwips; + /** An indent for the first line in the paragraph, relative to the leading + margin (left for left-to-right paragraphs, right for right-to-left + paragraphs). By default KParaDefaultIndent (zero). */ + TInt32 iIndentInTwips; + /** Horizontal alignment of paragraph. By default KParaDefaultHorizAlign + (left). */ + TAlignment iHorizontalAlignment; + /** Vertical alignment of paragraph, (intended for use by spreadsheet + applications). By default KParaDefaultVertAlign (unspecified). */ + TAlignment iVerticalAlignment; + /** Inter-line spacing within the paragraph, in twips. By default + KParaDefaultLineSpacing (200 twips). */ + TInt32 iLineSpacingInTwips; // distance between successive baselines + /** Control for the iLineSpacingInTwips value. By default, + KParaDefaultLineSpacingControl (ELineSpacingAtLeastInTwips). */ + TLineSpacingControl iLineSpacingControl; // whether iLineSpacingInTwips means 'at least' or 'exactly' + /** Space above paragraph. By default KParaDefaultSpaceBefore (zero). */ + TInt32 iSpaceBeforeInTwips; + /** Space below paragraph. By default KParaDefaultSpaceAfter (zero). */ + TInt32 iSpaceAfterInTwips; + /** Prevents a page break within paragraph if ETrue. By default + KParaDefaultKeepTogether (EFalse). */ + TBool iKeepTogether; + /** Prevents a page break between this paragraph and the following + paragraph if ETrue. By default, KParaDefaultKeepWithNext (EFalse). */ + TBool iKeepWithNext; + /** Inserts a page break immediately before this paragraph if ETrue. + By default, KParaDefaultStartNewPage (EFalse). */ + TBool iStartNewPage; + /** Prevents the printing of the last line of a paragraph at the top + of the page (referred to as a widow), or the first line of a paragraph + at the bottom of the page, (referred to as an orphan). By default, + KParaDefaultWidowOrphan (EFalse). */ + TBool iWidowOrphan; + /** Specifies whether the paragraph should line wrap at the right margin. + By default KParaDefaultWrap (ETrue). */ + TBool iWrap; + /** Distance in twips between the paragraph border and the enclosed text. + By default KParaDefaultBorderMargin (zero). */ + TInt32 iBorderMarginInTwips; + /** The bullet point associated with the paragraph. A NULL value indicates + no bullet point. By default NULL. */ + TBullet* iBullet; + /** Specifies the default tab stop width. By default KParaDefaultTabWidth + (360 twips). */ + TUint32 iDefaultTabWidthInTwips; + }; + +/** +Masks the paragraph format attributes which are involved when setting and +sensing paragraph formatting. + +Used in conjunction with an object of class CParaFormat. When setting formatting, +only the attributes which are set in the mask will participate in the relevant +function. When sensing formatting, on return, the mask indicates which attributes +were sensed from the format layer, and were not taken from the default values. +@publishedAll +@released +*/ +class TParaFormatMask + { +public: + inline TParaFormatMask(); + inline void SetAttrib(TTextFormatAttribute aAttribute); + inline void ClearAttrib(TTextFormatAttribute aAttribute); + IMPORT_C void SetAll(); + IMPORT_C void ClearAll(); + inline TBool AttribIsSet(TTextFormatAttribute aAttribute) const; + inline TBool IsNull() const; + IMPORT_C TBool operator==(const TParaFormatMask& aMask) const; + inline TBool operator!=(const TParaFormatMask& aMask) const; + +private: + TUint32 iGuard; + }; + +/** +Specifies the font-independent character format attributes, including bold, +italics and underlining. + +An instance of this class is owned by the character formatting container (class +TCharFormat). +@publishedAll +@released +*/ +class TFontPresentation + { +public: + + /** Highlight style */ + enum TFontHighlightStyle + { + /** No highlighting used. */ + EFontHighlightNone, + /** Normal (square cornered) highlighting used. */ + EFontHighlightNormal, + /** Rounded corner highlighting used. */ + EFontHighlightRounded, + /** Text is drawn offset towards the bottom-right in the highlight + colour, (iHighlightColor) before being drawn again in the text colour, + (iTextColor) creating a shadow effect. */ + EFontHighlightShadow, + /** Placeholder for "unrecognised word" highlighting style for FEPs */ + EFontHighlightNoMatchesIndicator, + /** First custom highlighting style is used. + @see MFormCustomDraw::DrawText(). */ + EFontHighlightFirstCustomStyle = 128, + /** Second custom highlighting style is used. + @see MFormCustomDraw::DrawText(). */ + EFontHighlightLastCustomStyle = 255 + }; + + + /** Vertical picture alignment */ + enum TAlignment + { + /** The top of the picture is aligned flush with the top of the font's + ascent, so that the picture may descend below the line. */ + EAlignTop, + /** The bottom of the picture is aligned flush with the bottom of the + font's descent so that the picture may extend above the line. */ + EAlignBottom, + /** The picture is aligned so that its centre is positioned at the + baseline of the line. */ + EAlignCentered, + /** The bottom of the picture is aligned with the baseline of the font. + This is the default. */ + EAlignBaseLine + }; + // + IMPORT_C TFontPresentation(); + // + // Enquiry function + IMPORT_C TBool IsEqual(const TFontPresentation& aFontPresentation, const TCharFormatMask& aMask) const; +public: + /** The text colour. By default, the default system foreground colour. */ + TLogicalRgb iTextColor; + /** The highlight colour for selected text. Only takes effect if + iHighlightStyle is not EFontHighlightNone. By default, the default system + foreground colour. */ + TLogicalRgb iHighlightColor; // Background color + /** Style for character highlighting. By default EFontHighlightNone. */ + TFontHighlightStyle iHighlightStyle; + /** The value of the strikethrough attribute. By default EStrikethroughOff. */ + TFontStrikethrough iStrikethrough; + /** The value of the underline attribute. By default EUnderlineOff. */ + TFontUnderline iUnderline; + /** Specifies whether or not text is hidden. Note that hidden text is not + currently supported by the text layout engine. This attribute is provided + to preserve information when copying from and to devices which support + hidden text. By default EFalse. */ + TBool iHiddenText; + /** The vertical alignment of a picture character. By default + EAlignBaseLine. */ + TAlignment iPictureAlignment; + }; + +/** +A transient container of character format attributes, including +font-dependent and font-independent attributes. + +The font-independent attributes are stored in a TFontPresentation object. +Rich and global text objects store character formatting using character format +layers (see class CCharFormatLayer). The TCharFormat class is used to store +the relevant attribute values when setting or sensing a CCharFormatLayer. +It is normally used in combination with a TCharFormatMask, to specify which +attributes are relevant to the function concerned. +@publishedAll +@released +*/ +class TCharFormat + { +public: + IMPORT_C TCharFormat(); + IMPORT_C TCharFormat(const TDesC &aTypefaceName, TInt aHeight); + // + // Enquiry functions + IMPORT_C TBool IsEqual(const TCharFormat& aFormat, const TCharFormatMask& aMask) const; + IMPORT_C TBool IsEqual(const TCharFormat& aFormat) const; +public: + /** Specifies the language of individual characters for proofing. Used for + example when spell checking a document which contains text in more than one + language, so that the program recognises the text as being in another + language. Language is also a paragraph format attribute. If the language + setting of a character is different from the language setting of the + containing paragraph, the character's setting takes precedence. */ + TInt32 iLanguage; + /** Font independent character format attributes. */ + TFontPresentation iFontPresentation; + /** Device independent font specification. */ + TFontSpec iFontSpec; + }; + +/** +Masks the character format attributes which are involved when setting and +sensing character formatting. + +Used in conjunction with an object of class TCharFormat. + +When setting formatting, only the attributes which are set in the mask should +participate in the relevant function. When sensing formatting, on return, +the mask indicates which attributes were sensed from the format layer, and +were not taken from the default values. +@publishedAll +@released +*/ +class TCharFormatMask + { +public: + inline TCharFormatMask(); + inline void SetAttrib(TTextFormatAttribute aAttribute); + inline void ClearAttrib(TTextFormatAttribute aAttribute); + inline TBool AttribIsSet(TTextFormatAttribute aAttribute) const; + IMPORT_C void SetAll(); + IMPORT_C void ClearAll(); + inline TBool IsNull()const; + IMPORT_C TBool operator==(const TCharFormatMask& aMask) const; + inline TBool operator!=(const TCharFormatMask& aMask) const; + +private: + TUint32 iGuard; + }; + +#include + +#endif