fontservices/fontstore/inc/OPENFONT.H
changeset 32 8b9155204a54
child 49 4d76f1414957
child 51 a7c938434754
equal deleted inserted replaced
31:b9ad20498fb4 32:8b9155204a54
       
     1 /*
       
     2 * Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description: 
       
    15 * A header for the open font system, which allows SymbianOS
       
    16 * to use fonts of arbitrary types, including TrueType/OpenType
       
    17 * and other outline font formats.
       
    18 *
       
    19 */
       
    20 
       
    21 
       
    22 #ifndef __OPENFONT_H__
       
    23 #define __OPENFONT_H__
       
    24 
       
    25 #include <e32base.h>
       
    26 #include <gdi.h>
       
    27 #include <ecom/ecom.h>
       
    28 
       
    29 #ifndef SYMBIAN_ENABLE_SPLIT_HEADERS
       
    30 #include <linkedfonts.h>
       
    31 #include <graphics/openfontconstants.h>
       
    32 #include <graphics/openfontrasterizer.h>
       
    33 #include <openfontlinkedtypefaceelementspec.h>
       
    34 #include <graphics/openfontlinkedtypefacespecification.h>
       
    35 #include <graphics/openfontlinkedtypefaceextension.h>
       
    36 #endif
       
    37 
       
    38 class CFont;
       
    39 class COpenFontFile;
       
    40 class COpenFontGlyph;
       
    41 class COpenFontGlyphCache;
       
    42 class COpenFontGlyphTreeEntry;
       
    43 class COpenFontPositioner;
       
    44 class COpenFontSessionCache;
       
    45 class COpenFontSessionCacheList;
       
    46 class RFs;
       
    47 class TCharacterMetrics;
       
    48 class TFontSpec;
       
    49 class TOpenFontFaceAttrib;
       
    50 class CFontStore;
       
    51 class TOpenFontFileData;
       
    52 class TShapeHeader;
       
    53 class CBitmapFont;
       
    54 class CShaperFactory;
       
    55 class CShaper;
       
    56 class TShapeHeader;
       
    57 class TFontShapeFunctionParameters;
       
    58 class TFontShapeDeleteFunctionParameters;
       
    59 class RShapeInfo;
       
    60 class TShapeMessageParameters;
       
    61 class CRasterizerLinkedTypefaceSpecification;
       
    62 class TLinkedTypefaceSpecificationArgs;
       
    63 
       
    64 /**
       
    65 Supplied to COpenFont::ExtendedInterface() to access the extended
       
    66 API interface MOpenFontShapingExtension.
       
    67 
       
    68 @see	COpenFont::ExtendedInterface()
       
    69 @see	MOpenFontShapingExtension
       
    70 @publishedAll
       
    71 @released
       
    72 */
       
    73 const TUid KUidOpenFontShapingExtension = {0x10274DB9};
       
    74 
       
    75 /**
       
    76 Supplied to COpenFont::ExtendedInterface() to access the extended
       
    77 API interface MOpenFontTrueTypeExtension.
       
    78 
       
    79 @see	COpenFont::ExtendedInterface()
       
    80 @see	MOpenFontTrueTypeExtension
       
    81 @publishedAll
       
    82 @released
       
    83 */
       
    84 const TUid KUidOpenFontTrueTypeExtension = {0x1027553E};
       
    85 const TUid KUidOpenFontGlyphOutlineExtension = {0x102872CE};
       
    86 
       
    87 /**
       
    88 Supplied to CShaper::ExtendedInterface() to get the language and script
       
    89 code with which the current shaper is instatsiated.
       
    90 @see	CShaper::ExtendedInterface()
       
    91 @publishedAll
       
    92 @released
       
    93 */
       
    94 const TUid KUidShaperGetScript = {0x20009966};
       
    95 const TUid KUidShaperGetLang = {0x20009967};
       
    96 
       
    97 /**
       
    98 Font metrics.
       
    99 
       
   100 @see	CFbsFont::GetFontMetrics()
       
   101 @publishedAll
       
   102 @released
       
   103 */
       
   104 class TOpenFontMetrics
       
   105 	{
       
   106 public:
       
   107 	inline TOpenFontMetrics();
       
   108 	IMPORT_C TOpenFontMetrics(const CFont* aFont);
       
   109 	inline TInt Size() const;
       
   110 	inline TInt Ascent() const;
       
   111 	inline TInt Descent() const;
       
   112 	inline TInt MaxHeight() const;
       
   113 	inline TInt MaxDepth() const;
       
   114 	inline TInt MaxWidth() const;
       
   115 	inline void SetSize(TInt aSize);
       
   116 	inline void SetAscent(TInt aAscent);
       
   117 	inline void SetDescent(TInt aDescent);
       
   118 	inline void SetMaxHeight(TInt aMaxHeight);
       
   119 	inline void SetMaxDepth(TInt aMaxDepth);
       
   120 	inline void SetMaxWidth(TInt aMaxWidth);
       
   121 	/** WARNING: Function for internal and partner use ONLY. Compatibility is not guaranteed in future releases.*/
       
   122 	IMPORT_C void SetBaselineCorrection(TInt aBaselineCorrection);
       
   123 	IMPORT_C TInt BaselineCorrection();
       
   124 private:
       
   125 	TInt16 iDesignHeight;	// size of the font ('pointsize' in pixels)
       
   126 	TInt16 iAscent;			// typographic ascent
       
   127 	TInt16 iDescent;		// typographic descent
       
   128 	TInt16 iMaxHeight;		// maximum height of a character; may be greater than iAscent
       
   129 	TInt16 iMaxDepth;		// maximum depth of a character; may be greater than iDescent
       
   130 	TInt16 iMaxWidth;		// maximum width of a character
       
   131 	TInt16 iBaselineCorrection;
       
   132 	TInt16 iReserved;
       
   133 	};
       
   134 
       
   135 
       
   136 /**
       
   137 Character metrics  includes more information than TCharacterMetrics.
       
   138 
       
   139 Character metrics allow characters to be placed horizontally or vertically. 
       
   140 The character metrics encapsulated by this class are: Height, Width, Horizontal 
       
   141 Bearing X, Horizontal Bearing Y, Horizontal Advance, Vertical Bearing X, 
       
   142 Vertical Bearing Y, and Vertical Advance. Their meanings are described in the 
       
   143 associated setter and getter functions.
       
   144 
       
   145 Note : 
       
   146 
       
   147 Vertical drawing (in the sense of characters drawn with horizontal baselines, 
       
   148 but in a vertical line) is not yet supported by Symbian OS.
       
   149 
       
   150 @see	CFont::GetCharacterData()
       
   151 @see	CFbsFont::GetCharacterData() 
       
   152 @publishedAll
       
   153 @released
       
   154 */
       
   155 class TOpenFontCharMetrics
       
   156 	{
       
   157 public:
       
   158 	enum TUninitialized { EUninitialized };
       
   159 public:
       
   160 	/** Default constructor initializes all members to 0. */
       
   161 	inline TOpenFontCharMetrics();
       
   162 
       
   163 	/** Constructor that does not initialize any members. */
       
   164 	TOpenFontCharMetrics(TUninitialized) {}
       
   165 	IMPORT_C TOpenFontCharMetrics(const TCharacterMetrics& aMetrics);
       
   166 	IMPORT_C TBool GetTCharacterMetrics(TCharacterMetrics& aMetrics) const;
       
   167 	inline TInt Width() const;
       
   168 	inline TInt Height() const;
       
   169 	inline TInt HorizBearingX() const;
       
   170 	inline TInt HorizBearingY() const;
       
   171 	inline TInt HorizAdvance() const;
       
   172 	inline TInt VertBearingX() const;
       
   173 	inline TInt VertBearingY() const;
       
   174 	inline TInt VertAdvance() const;
       
   175 	inline void GetHorizBounds(TRect& aBounds) const;
       
   176 	inline void GetVertBounds(TRect& aBounds) const;
       
   177 	inline void SetWidth(TInt aWidth);
       
   178 	inline void SetHeight(TInt aHeight);
       
   179 	inline void SetHorizBearingX(TInt aHorizBearingX);
       
   180 	inline void SetHorizBearingY(TInt aHorizBearingY);
       
   181 	inline void SetHorizAdvance(TInt aHorizAdvance);
       
   182 	inline void SetVertBearingX(TInt aVertBearingX);
       
   183 	inline void SetVertBearingY(TInt aVertBearingY);
       
   184 	inline void SetVertAdvance(TInt aVertAdvance);
       
   185 	IMPORT_C void  SetGlyphType(TGlyphBitmapType);
       
   186 	IMPORT_C TGlyphBitmapType GlyphType() const;
       
   187 private:
       
   188 	TInt16 iWidth;			// width of the glyph
       
   189 	TInt16 iHeight;			// height of the glyph
       
   190 	TInt16 iHorizBearingX;	// x component of horizontal bearing
       
   191 	TInt16 iHorizBearingY;	// y component of horizontal bearing
       
   192 	TInt16 iHorizAdvance;	// horizontal advance
       
   193 	TInt16 iVertBearingX;	// x component of vertical bearing
       
   194 	TInt16 iVertBearingY;	// y component of vertical bearing
       
   195 	TInt16 iVertAdvance;	// vertical advance
       
   196 	TUint16  iGlyphBitmapType;// Glyph bitmap type; TGlyphBitmapType
       
   197 	TInt16 iReserved;
       
   198 	};
       
   199 
       
   200 
       
   201 /**
       
   202 Font glyph data.
       
   203 
       
   204 Objects of this type are used by rasterizers to supply glyph data to font 
       
   205 and bitmap server clients. Unless you are writing a rasterizer you will not 
       
   206 need to use an object of this type.
       
   207 
       
   208 The object cannot be constructed and destroyed by normal means. It resides 
       
   209 on a specified heap. It is created by New() and deleted by RHeap::Free().
       
   210 
       
   211 @see	COpenFont::RasterizeL()
       
   212 @publishedAll
       
   213 @released
       
   214 */
       
   215 class TOpenFontGlyphData
       
   216 	{
       
   217 public:
       
   218 	IMPORT_C static TOpenFontGlyphData* New(RHeap* aHeap,TInt aBufferSize);
       
   219 	inline TBool Overflow() const;
       
   220 	inline TInt BytesNeeded() const;
       
   221 	inline TPtrC8 Bitmap() const;
       
   222 	inline const TUint8* BitmapPointer() const;
       
   223 	inline const TOpenFontCharMetrics* Metrics() const;
       
   224 	inline TInt GlyphIndex() const;
       
   225 	inline TUint8* BufferStart();
       
   226 	inline TUint8* BufferEnd();
       
   227 	inline void SetBytesNeeded(TInt aBytes);
       
   228 	inline void SetBitmapPointer(const TUint8* aBitmap);
       
   229 	inline void SetMetricsPointer(const TOpenFontCharMetrics* aMetrics);
       
   230 	inline void SetPointersToInternalBuffers();
       
   231 	inline void SetMetrics(TOpenFontCharMetrics& aMetrics);
       
   232 	inline void SetGlyphIndex(TInt aGlyphIndex);
       
   233 private:
       
   234 	/*
       
   235 	Prevent construction and destruction by normal means; the object resides 
       
   236 	on a specified heap and is created by New and deleted by RHeap::Free.
       
   237 	*/
       
   238 	TOpenFontGlyphData();
       
   239 	~TOpenFontGlyphData();
       
   240 private:
       
   241 	TInt iBitmapBufferSize;					// size of the buffer in bytes
       
   242 	TInt iBytesNeeded;						// bytes needed for the bitmap
       
   243 	TOpenFontCharMetrics iMetricsBuffer;	// the metrics
       
   244 	const TUint8* iBitmap;					// pointer to the bitmap; points either to iBitmapBuffer or to
       
   245 											// the cache if the character was already rasterized
       
   246 	const TOpenFontCharMetrics* iMetrics;	// pointer to the metrics; points either to iMetricsBuffer or to
       
   247 											// the cache if the character was already rasterized
       
   248 	TInt iGlyphIndex;						// the glyph index
       
   249 	TAny* iReserved;						// unused; for future expansion
       
   250 	TUint8 iBitmapBuffer[1];				// buffer used to write the bitmap when it is first rasterized; this
       
   251 											// is actually of size iBitmapBufferSize.
       
   252 	};
       
   253 
       
   254 class COpenFontGlyph;
       
   255 /**
       
   256 Open Font System font abstract base class.
       
   257 
       
   258 Derive a class from this class to represent an instance of a typeface at a 
       
   259 particular size, provide bitmaps of the glyphs, and determine whether 
       
   260 characters exist in the typeface.
       
   261 
       
   262 Writing derived classes construction: 
       
   263 
       
   264 You must call the constructor of this class when creating your derived object, 
       
   265 passing the arguments aHeap and aSessionCacheList supplied to 
       
   266 COpenFontFile::GetNearestFontInPixelsL(), and the address of the COpenFontFile 
       
   267 object that creates the object as aFile.
       
   268 
       
   269 The derived object must be created on the shared heap aHeap because it is 
       
   270 shared by several processes: the font and bitmap server and its clients. 
       
   271 To do this, use aHeap->AllocL() to obtain memory, then construct in place 
       
   272 using a placement argument to new.
       
   273 
       
   274 Derived classes must implement the pure virtual function RasterizeL(). 
       
   275 Information about this function is provided in the function definition below. 
       
   276 
       
   277 Information about deriving from this class is also provided in the API guide.
       
   278 
       
   279 @see	COpenFontFile::GetNearestFontInPixelsL()
       
   280 @publishedAll
       
   281 @released
       
   282 */
       
   283 class COpenFont: public CBase
       
   284 	{
       
   285 public:
       
   286 	/** Creates a bitmap for the specified Unicode character.
       
   287 
       
   288 	Implementations of this function should put the bitmap in 
       
   289 	aGlyphData->iBitmapBuffer, and the character metrics are placed in 
       
   290 	aGlyphData->iMetricsBuffer. The other parts of aGlyphData should be left 
       
   291 	alone. 
       
   292 
       
   293 	There are a number of strategies for achieving this, e.g. pass the 
       
   294 	rasterization task all the way up to the rasterizer engine. These are 
       
   295 	discussed in the API guide.
       
   296 
       
   297 	At present you must write the bitmap in the Symbian platform's 
       
   298 	run-length-encoded format. This is a packed binary format starting on a 
       
   299 	byte boundary and made up of a number of sections. Each section starts 
       
   300 	with a five-bit header. If the first bit of the header is 0 the next four 
       
   301 	bits are a repeat count, starting with the least significant bit, and a 
       
   302 	single row of bits (the number of bits in a row is specified by 
       
   303 	aGlyphData->iMetricsBuffer.Width()) follows. If the first bit of the header 
       
   304 	is 1 the next four bits are a count of non-repeating rows, again starting 
       
   305 	with the least significant bit, and that many rows of bits follow.
       
   306 
       
   307 	@param aCode The character code of the Unicode character for which the 
       
   308 	bitmap is required.
       
   309 	@param aGlyphData On return, contains a pointer to a TOpenFontGlyphData 
       
   310 	containing the character's bitmap and metrics. */
       
   311 	virtual void RasterizeL(TInt aCode,TOpenFontGlyphData* aGlyphData) = 0;
       
   312 	IMPORT_C virtual void ExtendedInterface(TUid aUid, TAny*& aParam);
       
   313 	IMPORT_C COpenFont(RHeap* aHeap,COpenFontSessionCacheList* aSessionCacheList,COpenFontFile* aFile);
       
   314 	IMPORT_C COpenFont(RHeap* aHeap,COpenFontSessionCacheList* aSessionCacheList,COpenFontFile* aFile,TInt aFaceIndex);
       
   315 	IMPORT_C ~COpenFont();
       
   316 	IMPORT_C void operator delete(TAny*);
       
   317 	inline const TOpenFontMetrics& Metrics() const;
       
   318 	inline const TOpenFontFaceAttrib* FaceAttrib() const;
       
   319 	inline COpenFontFile* File() const;
       
   320 	inline TInt FaceIndex() const;
       
   321 	inline TBool CharacterNeedsToBeRasterized(TInt aSessionHandle,TInt aCode) const;
       
   322 	void SetShaper(CShaper* aShaper);
       
   323 	CShaper* GetShaper();
       
   324 	TBool HasShaper() const;
       
   325 	TShapeHeader* GetShapedData(TInt aSessionHandle,TFontShapeFunctionParameters* aParams);
       
   326 	TShapeHeader* InsertShapedDataIntoCache(TInt aSessionHandle,TFontShapeFunctionParameters* aParams, TShapeHeader* aShapeHeader);
       
   327 	TInt FreeShaperCacheMemory(TInt aBytesNeeded);
       
   328 	TInt DecrementCachedRefCount(TInt aSessionHandle,TShapeHeader* aShapeHeader,TBool aResetAll=EFalse);
       
   329 	TBool Rasterize(TInt aSessionHandle,TInt aCode,TOpenFontGlyphData* aGlyphData);
       
   330 	TBool HasCharacterL(TInt aCode) const;
       
   331 	TBool GetCharacterData(TInt aSessionHandle,TInt aCode,const TOpenFontCharMetrics*& aMetrics,const TUint8*& aBitmap) const;
       
   332 	void OnFileDeleted();
       
   333 	COpenFontGlyphCache* GetGlyphCache();
       
   334 	inline TInt FontCapitalAscent() const;
       
   335 	inline TInt FontMaxAscent() const;
       
   336 	inline TInt FontStandardDescent() const;
       
   337 	inline TInt FontMaxDescent() const;
       
   338 	inline TInt FontLineGap() const;
       
   339 	inline TInt FontMaxHeight() const;
       
   340 	void DeleteShaper() const;
       
   341 	TInt GetFontTable(TUint32 aTag, TAny*& aTableContent, TInt& aLength);
       
   342 	TInt GetGlyphOutline(TUint aCode, TBool aHinted, TAny*& aOutline, TInt& aLength);
       
   343 	
       
   344 protected:	
       
   345 	/** WARNING: Function for internal use ONLY. Compatibility is not guaranteed in future releases.
       
   346 	*/
       
   347 	TInt PointerToThisOffset(const TAny* aAny);
       
   348 	/** WARNING: Function for internal use ONLY. Compatibility is not guaranteed in future releases.
       
   349 	*/
       
   350 	TAny* ThisOffsetToPointer(const TInt aOffset);
       
   351 		
       
   352 protected:
       
   353 	RHeap* iHeap;
       
   354 	TOpenFontMetrics iMetrics;
       
   355 private:
       
   356 	/** The shaper for performing complex character positioning and
       
   357 	substitution, if available. Null otherwise.
       
   358 	
       
   359 	WARNING: Member variable for internal use ONLY. Compatibility is not guaranteed in future releases. Please access using the provided get/set APIs only. 
       
   360     */
       
   361 	CShaper* iShaper;
       
   362 
       
   363 protected:
       
   364 	/** The positive distance in pixels from the baseline to
       
   365 		the top of an ANSI capital (whether or not there are
       
   366 		ANSI capitals in the font) */
       
   367 	TInt iFontCapitalAscent;
       
   368 	/** The positive distance in pixels from the baseline to
       
   369 		the top of the highest pre-composed glyph in the font */
       
   370 	TInt iFontMaxAscent;
       
   371 	/** The positive distance in pixels from the baseline to
       
   372 		the bottom of the lowest ANSI descender (whether or
       
   373 		not there are ANSI chars in the font)*/
       
   374 	TInt iFontStandardDescent;
       
   375 	/** The positive distance in pixels from the baseline to
       
   376 		the bottom of the lowest pre-composed glyph in the font */
       
   377 	TInt iFontMaxDescent;
       
   378 	/** The recommended baseline to baseline gap for successive
       
   379 		lines of text in the font */
       
   380 	TInt iFontLineGap;
       
   381 private:
       
   382 	const COpenFontGlyph* Glyph(TInt aSessionHandle,TInt aCode) const;
       
   383 protected:
       
   384 
       
   385 	/** WARNING: Function for internal use ONLY. Compatibility is not guaranteed in future releases.
       
   386 	*/
       
   387 	const COpenFontGlyph* FontCacheGlyph(TInt aCode,TInt*& aNode);
       
   388 	const COpenFontGlyph* FontCacheGlyph(TInt aCode);
       
   389 	
       
   390 	void SetGlyphCache(COpenFontGlyphCache* aGlyphCache);
       
   391 	
       
   392 private:
       
   393 	const COpenFontGlyph* SessionCacheGlyph(RHeap* aHeap,TInt aSessionHandle,TInt aCode,
       
   394 											COpenFontSessionCache*& aCache,TInt& aIndex,TBool aCreate) const;
       
   395 	void RasterizeHelperL(TInt aCode,TOpenFontGlyphData* aGlyphData,TOpenFontGlyphData*& aTempGlyphData);
       
   396 
       
   397 	COpenFontSessionCacheList* SessionCacheList()const;
       
   398 	
       
   399     void SetSessionCacheList(COpenFontSessionCacheList* aSessionCacheList);
       
   400     
       
   401     void SetFile(COpenFontFile* aFile);
       
   402 private:
       
   403     
       
   404     // Offset from the address of the file used by this font.
       
   405     // If the file has been deleted or cannot be used, the offest will be zero.
       
   406     TInt iFileOffset;
       
   407     
       
   408 	TInt iFaceIndex;										// index of the face in the font file
       
   409 protected:
       
   410     /**
       
   411     WARNING: Compatibility is not guaranteed in future releases. Please use the provided APIs only.
       
   412     Offset from the address of this font of the per-font glyph cache which is owned by the font
       
   413     @internalTechnology
       
   414     */  
       
   415     TInt iGlyphCacheOffset;
       
   416 private:
       
   417     // Offset from the address of this font of the list of per-session glyph
       
   418     // caches which are owned by CFontStore
       
   419     TInt iSessionCacheListOffset;
       
   420 
       
   421 	TAny* iReserved; // unused; for future expansion
       
   422 	};
       
   423 
       
   424 /** Open Font System Extension Interface abstract base class.
       
   425 
       
   426 COpenFont derivers should also derive from this interface to enable complex
       
   427 font "shaping".
       
   428 
       
   429 This interface should be returned by the overridden
       
   430 COpenFont::ExtendedInterface function when KUidOpenFontShapingExtension is
       
   431 supplied as the UID.
       
   432 
       
   433 @see	COpenFont
       
   434 @see	KUidOpenFontShapingExtension 
       
   435 @publishedAll
       
   436 @released
       
   437 */
       
   438 class MOpenFontShapingExtension
       
   439 	{
       
   440 public:
       
   441 	/** Various font metrics. */
       
   442 	class TExtensionFontMetrics
       
   443 		{
       
   444 	public:
       
   445 		/** The number of font design units per em. */
       
   446 		TInt iUnitsPerEm;
       
   447 		/** The width of the font's em square in pixels. */
       
   448 		TReal iXPixelsPerEm;
       
   449 		/** The height of the font's em square in pixels. */
       
   450 		TReal iYPixelsPerEm;
       
   451 		/** The horizontal scaling factor from the font's transform;
       
   452 		the number of horizontal pixels per font unit. */
       
   453 		TReal iXScaleFactor;
       
   454 		/** The vertical scaling factor from the font's transform;
       
   455 		the number of vertical pixels per font unit. */
       
   456 		TReal iYScaleFactor;
       
   457 	private:
       
   458 		/** Reserved for future expansion. */
       
   459 		TInt iReserved[4];
       
   460 		};
       
   461 
       
   462 	/** Creates a bitmap for the specified Glyph code.
       
   463 
       
   464 	Implementations of this function should put the bitmap in
       
   465 	aGlyphData->iBitmapBuffer, and the character metrics are placed in
       
   466 	aGlyphData->iMetricsBuffer. The other parts of aGlyphData should be left
       
   467 	alone.
       
   468 
       
   469 	This function provides the same functionality as the
       
   470 	COpenFont::RasterizeL() except that the glyph code is supplied rather than
       
   471 	the unicode.
       
   472 
       
   473 	For more information:
       
   474 	@see	COpenFont::RasterizeL()
       
   475 
       
   476 	@param	aCode		The glyph code of the character for which the bitmap is required.
       
   477 	@param	aGlyphData	The function puts its output here.
       
   478 	*/
       
   479 	virtual void RasterizeGlyphL(TInt aCode,TOpenFontGlyphData* aGlyphData) = 0;
       
   480 
       
   481 	/** Maps a character to a glyph index.
       
   482 	@param aUnicodeCharacter Unicode character code to be mapped.
       
   483 	@return Glyph code corresponding to aUnicodeCharacter. */
       
   484 	virtual TInt GlyphIndex(TInt aUnicodeCharacter) const = 0;
       
   485 
       
   486 	/** Returns the hinted pixel coordinates of a particular point in the
       
   487 	outline of the given glyph.
       
   488 	@param aGlyphPoint The glyph index.
       
   489 	@param aPointNumber The number of the point.
       
   490 	@param aX Returns the point's X pixel value.
       
   491 	@param aY Returns the point's Y pixel value.
       
   492 	@return True on success, false otherwise. */
       
   493 	virtual TBool GlyphPointInHintedPixels(TInt aGlyphIndex, TInt aPointNumber,
       
   494 		TReal& aX, TReal& aY) const = 0;
       
   495 
       
   496 	/** Returns the coordinates of a particular (unhinted) point in the outline
       
   497 	of the given glyph in font units.
       
   498 	@param aGlyphPoint The glyph index.
       
   499 	@param aPointNumber The number of the point.
       
   500 	@param aX Returns the point's X co-ordinate in font units.
       
   501 	@param aY Returns the point's Y co-ordinate in font units.
       
   502 	@return True on success, false otherwise. */
       
   503 	virtual TBool GlyphPointInFontUnits(TInt aGlyphIndex, TInt aPointNumber,
       
   504 		TInt& aX, TInt& aY) const = 0;
       
   505 
       
   506 	/** Returns font metrics.
       
   507 	@param aOut Font metrics returned. */
       
   508 	virtual void GetExtensionFontMetrics(TExtensionFontMetrics& aOut) = 0;
       
   509 	};
       
   510 
       
   511 /** TrueType extension for Open Fonts.
       
   512 
       
   513 If an open font is able to load TrueType or OpenType tables it should derive
       
   514 from this class.
       
   515 
       
   516 This class will be used by 
       
   517 
       
   518 This interface should be returned by the overridden
       
   519 COpenFont::ExtendedInterface function when KUidOpenFontTrueTypeExtension is
       
   520 supplied as the UID.
       
   521 @see	KUidOpenFontTrueTypeExtension
       
   522 @publishedAll
       
   523 @released
       
   524 */
       
   525 class MOpenFontTrueTypeExtension
       
   526 	{
       
   527 public:
       
   528 	/** Returns the specified table. The table need not be released by the
       
   529 	caller, so the deriver is responsible for ensuring that any memory
       
   530 	allocated is ultimately cleaned up. The caller must not delete or modify
       
   531 	the data returned.
       
   532 	@param aError
       
   533 		Returns KErrNone if successful or one of the system-wide error codes if
       
   534 		unsuccessful. Returns KErrNotSupported if the table does not exist in
       
   535 		the font file.
       
   536 	@param aTag
       
   537 		The tag of the table, with the first character in the most significant
       
   538 		byte. For example, the "vhea" table is obtained by passing in 'v'<<24 |
       
   539 		'h'<<16 | 'e'<<8 | 'a'.
       
   540 	@param aLength
       
   541 		The length of the table in bytes that has been returned or 0 if
       
   542 		unsuccessful.
       
   543 	@return The table, if successful.
       
   544 	@see ReleaseTrueTypeTable */
       
   545 	virtual TAny* GetTrueTypeTable(TInt& aError, TUint32 aTag, TInt* aLength) = 0;
       
   546 	/** Releases a table obtained by GetTrueTypeTable. The caller must not
       
   547 	use the table after this call.
       
   548 	@param aTable The table to be released.
       
   549 	@see GetTrueTypeTable */
       
   550 	virtual TInt ReleaseTrueTypeTable(TAny* aTable) = 0;
       
   551 	/** Determines if the font file has a particular table.
       
   552 	@param aTag The tag of the table as for GetTrueTypeTable.
       
   553 	@return True if the table exists in the font file, false otherwise.
       
   554 	@see GetTrueTypeTable */
       
   555 	virtual TBool HasTrueTypeTable(TUint32 aTag) = 0;
       
   556 	};
       
   557 
       
   558 class MOpenFontGlyphOutlineExtension 
       
   559     {
       
   560 public:
       
   561     virtual TInt GetGlyphOutline(TUint aCode, TBool aIsGlyphId, 
       
   562             TBool aHinted, TAny*& aOutline, TInt& aLength) = 0;
       
   563     };
       
   564 /** 
       
   565 Font attribute base class. 
       
   566 
       
   567 This class is not intended for user derivation.
       
   568 
       
   569 @see	TOpenFontFaceAttrib
       
   570 @see	TOpenFontSpec
       
   571 @publishedAll
       
   572 @released
       
   573 */
       
   574 class TOpenFontFaceAttribBase
       
   575 	{
       
   576 public:
       
   577 	inline TOpenFontFaceAttribBase();
       
   578 	inline TBool HasLatin() const;
       
   579 	inline TBool HasGreek() const;
       
   580 	inline TBool HasCyrillic() const;
       
   581 	inline TBool HasKana() const;
       
   582 	inline TBool HasHangul() const;
       
   583 	inline TBool HasCJK() const;
       
   584 	inline TBool IsSymbol() const;
       
   585 	inline TBool IsBold() const;
       
   586 	inline TBool IsItalic() const;
       
   587 	inline TBool IsSerif() const;
       
   588 	inline TBool IsMonoWidth() const;
       
   589 	inline TPtrC Name() const;
       
   590 	inline const TUint* Coverage() const;
       
   591 	inline void SetName(const TDesC& aName);
       
   592 	inline void SetCoverage(TUint aCoverage0,TUint aCoverage1 = 0,TUint aCoverage2 = 0,TUint aCoverage3 = 0);
       
   593 	inline void SetBold(TBool aBold);
       
   594 	inline void SetItalic(TBool aItalic);
       
   595 	inline void SetSerif(TBool aSerif);
       
   596 	inline void SetMonoWidth(TBool aMonoWidth);
       
   597 	inline TBool operator==(const TOpenFontFaceAttribBase& aAttrib) const;
       
   598 
       
   599 	// Unicode ranges for iCoverage[0] (see the TrueType documentation for other values which are not included)
       
   600 	enum
       
   601 		{
       
   602 		ELatinSet = 0x1,			// 0000-007F
       
   603 		EGreekSet = 0x80,			// 0370-03FF
       
   604 		ECyrillicSet = 0x200,		// 0400-04FF
       
   605 		EArmenianSet = 0x400,		// 0530-058F
       
   606 		EHebrewSet = 0x800,			// 0590-05FF
       
   607 		EArabicSet = 0x2000,		// 0600-06FF
       
   608 		EDevanagariSet = 0x8000,	// 0900-097F
       
   609 		EBengaliSet = 0x10000,		// 0980-09FF
       
   610 		EGurmukhiSet = 0x20000,		// 0A00-0A7F
       
   611 		EGujuratiSet = 0x40000,		// 0A80-0AFF
       
   612 		EOriyaSet = 0x80000,		// 0B00-0B7F
       
   613 		ETamilSet = 0x100000,		// 0B80-0BFF
       
   614 		ETeluguSet = 0x200000,		// 0C00-0C7F
       
   615 		EKannadaSet = 0x400000,		// 0C80-0CFF
       
   616 		EMalayalamSet = 0x800000,	// 0D00-0D7F
       
   617 		EThaiSet = 0x1000000,		// 0E00-0E7F
       
   618 		ELaoSet = 0x2000000,		// 0E80-0EFF
       
   619 		EGeorgianSet = 0x8000000,	// 10A0-10FF
       
   620 		EHangulJamoSet = 0x10000000,// 1100-11FF
       
   621 		};
       
   622 
       
   623 	// Unicode ranges for iCoverage[1]
       
   624 	enum
       
   625 		{
       
   626 		ESymbolSets = 0xFFFE,
       
   627 		EKanaSets = 0x60000,
       
   628 		EHangulSet = 0x100000,
       
   629 		ECJKSet = 0x8000000
       
   630 		};
       
   631 
       
   632 	// Attribute flags
       
   633 	enum
       
   634 		{
       
   635 		EBold = 0x1,			// weight > 500 in Windows terms
       
   636 		EItalic = 0x2,			// italic or oblique - any forward slant counts
       
   637 		ESerif = 0x4,			// characters have serifs
       
   638 		EMonoWidth = 0x8		// all characters are the same width
       
   639 		};
       
   640 
       
   641 	// Other constants
       
   642 	enum
       
   643 		{
       
   644 		ENameLength = 32		// we allow 32 but names that are compatible with old-style fonts are limited to 24
       
   645 		};
       
   646 protected:
       
   647 	TBufC<ENameLength> iName;				// the name of the typeface; whether this is the full name or family name
       
   648 											// or is in English or another language depends on the context
       
   649 	TUint iCoverage[4];						// bitmap of the character sets supported by the typeface;
       
   650 											// these are the same as the fields ulUnicodeRange1 .. ulUnicodeRange4
       
   651 											// in the OS/2 table in TrueType fonts
       
   652 	TInt iStyle;							// bold, italic serif, and mono-width
       
   653 	TInt32 iReserved;
       
   654 	};
       
   655 
       
   656 
       
   657 /** 
       
   658 Typeface attributes.
       
   659 
       
   660 These attributes include the name, family name, and supported scripts.
       
   661 
       
   662 @see	CFbsFont::GetFaceAttrib()
       
   663 @publishedAll
       
   664 @released
       
   665 */
       
   666 class TOpenFontFaceAttrib: public TOpenFontFaceAttribBase
       
   667 	{
       
   668 public:
       
   669 	inline TOpenFontFaceAttrib();
       
   670 	inline TBool operator==(const TOpenFontFaceAttrib& aAttrib) const;
       
   671 	inline TPtrC FullName() const;
       
   672 	inline TPtrC FamilyName() const;
       
   673 	inline TPtrC LocalFullName() const;
       
   674 	inline TPtrC LocalFamilyName() const;
       
   675 	inline TPtrC ShortFullName() const;
       
   676 	inline TPtrC ShortFamilyName() const;
       
   677 	inline TPtrC ShortLocalFullName() const;
       
   678 	inline TPtrC ShortLocalFamilyName() const;
       
   679 	inline void SetFullName(const TDesC& aName);
       
   680 	inline void SetFamilyName(const TDesC& aName);
       
   681 	inline void SetLocalFullName(const TDesC& aName);
       
   682 	inline void SetLocalFamilyName(const TDesC& aName);
       
   683 	inline TInt MinSizeInPixels() const;
       
   684 	inline void SetMinSizeInPixels(TInt aSize);
       
   685 private:
       
   686 	TBufC<ENameLength> iFamilyName;			// the name without any style suffixes; usually a truncation of iFullName
       
   687 	TBufC<ENameLength> iLocalFullName;		// the full name in the language of the current locale
       
   688 	TBufC<ENameLength> iLocalFamilyName;	// the family name in the language of the current locale
       
   689 	TInt iMinSizeInPixels;					// minimum supported size, (or readable size if scalable) in pixels
       
   690 	TInt32 iReserved2;
       
   691 	};
       
   692 
       
   693 
       
   694 /**
       
   695 Font specification allowing more attributes to be specified than TFontSpec.
       
   696 
       
   697 In addition to the attributes specified by TFontSpec, this font specification 
       
   698 allows stretching and slanting in the x dimension, and other algorithmic effects. 
       
   699 This is used to correct for non-square pixels, and to allow algorithmic slanting 
       
   700 and bold. The width factor and slant factor transform any point (x,y) to (x 
       
   701 * iWidthFactor + y * iSlantFactor,y). The width and slant factors are 16.16 
       
   702 fixed-point numbers.
       
   703 
       
   704 The font specification also provides access to information about the scripts 
       
   705 which are supported by the font. This information is not always reliable, 
       
   706 because it may be incorrectly specified, or not specified at all, by some 
       
   707 font manufacturers. 
       
   708 @publishedAll
       
   709 @released
       
   710 */
       
   711 class TOpenFontSpec : public TOpenFontFaceAttribBase
       
   712 	{
       
   713 public:
       
   714 	IMPORT_C TOpenFontSpec();
       
   715 	IMPORT_C TOpenFontSpec(const TFontSpec& aFontSpec);
       
   716 	IMPORT_C void operator=(const TFontSpec& aFontSpec);
       
   717 	inline TBool operator==(const TOpenFontSpec& aFontSpec) const;
       
   718 	TBool operator!=(const TOpenFontSpec& aOpenFontSpec) const;
       
   719 	IMPORT_C void SetAttrib(const TOpenFontFaceAttribBase& aAttrib);
       
   720 	IMPORT_C void GetTFontSpec(TFontSpec& aFontSpec) const;
       
   721 	IMPORT_C void CompensateForAspectRatio(TInt aPixelWidth,TInt aPixelHeight);
       
   722 	IMPORT_C void CompensateForAspectRatio(const MGraphicsDeviceMap& aMap);
       
   723 	inline TInt Height() const;
       
   724 	inline TInt32 WidthFactor() const;
       
   725 	inline TInt32 SlantFactor() const;
       
   726 	inline TGlyphBitmapType BitmapType() const;
       
   727 	inline TUint32 Effects() const;
       
   728 	inline TFontPrintPosition PrintPosition() const;
       
   729 	inline void SetHeight(TInt aHeight);
       
   730 	inline void SetWidthFactor(TInt32 aWidthFactor);
       
   731 	inline void SetSlantFactor(TInt32 aSlantFactor);
       
   732 	inline void SetBitmapType(TGlyphBitmapType aBitmapType);
       
   733 	inline void SetEffects(TUint32 aEffects);
       
   734 	IMPORT_C void SetEffects(FontEffect::TEffect aEffect, TBool aOn);
       
   735 	IMPORT_C TBool IsEffectOn(FontEffect::TEffect aEffect) const;
       
   736 	IMPORT_C void SetScriptTypeForMetrics(TLanguage aLanguage);
       
   737 	IMPORT_C TInt ScriptTypeForMetrics() const;
       
   738 	static TBool IsCompensationForAspectRatioNeeded(TInt aPixelWidth, TInt aPixelHeight);
       
   739 	static TInt ApplyRatio(TInt& aValue,TInt aNumerator,TInt aDenominator);
       
   740 	static TInt ApplyRatio(TInt32& aValue,TInt aNumerator,TInt aDenominator);
       
   741 public:
       
   742 	/** Algorithmic effects flags.
       
   743 
       
   744 	These can be combined using an OR operation.
       
   745 
       
   746 	WARNING: Enum for internal and partner use ONLY.  Compatibility is not guaranteed in future releases.
       
   747  
       
   748 	@deprecated Use FontEffect::TEffect instead.
       
   749 	*/
       
   750 	enum
       
   751 		{
       
   752 		/** Font is algorithmic bold. */
       
   753 		EAlgorithmicBold = 1,
       
   754 		/** Font has a drop shadow. */
       
   755 		EDropShadow = 2,
       
   756 		/** Font is an outline font. */
       
   757 		EOutline = 4
       
   758 		};
       
   759 private:
       
   760 	void SetScriptTypeForMetrics(TInt aScript);
       
   761 	void SetSymbol(TBool aSymbol);
       
   762 	TBool Symbol() const;
       
   763 	IMPORT_C TBool OperatorEquality(const TOpenFontSpec& aOpenFontSpec) const;
       
   764 	IMPORT_C TUint32 DoEffects() const;
       
   765 	IMPORT_C void DoSetEffects(TUint32 aEffects);
       
   766 private:
       
   767 	TInt iHeight;						// em height
       
   768 	TInt32 iWidthFactor;				// algorithmic width factor as a 16.16 fixed-point number
       
   769 	TInt32 iSlantFactor;				// algorithmic slant factor as a 16.16 fixed-point number
       
   770 	TInt iBitmapType;					// non-anti-aliased, standard anti-aliased, etc.; zero means 'default'
       
   771 	TUint32 iEffects;					// bit flags for font effects
       
   772 	TInt iSymbol;						// a symbol font as understood by TFontSpec (bit 1), script type (bits 2-5)
       
   773 	// The following data member exists only to allow round-trip conversion between TFontSpec and TOpenFontSpec
       
   774 	TFontPrintPosition iPrintPosition;	// normal, superscript or subscript
       
   775 
       
   776 	TInt iReserved2;
       
   777 	};
       
   778 
       
   779 /**
       
   780 Font file abstract base class.
       
   781 
       
   782 Write a class derived from COpenFontFile to manage a file with the font format 
       
   783 supported by your DLL. The derived class must implement the virtual 
       
   784 GetNearestFontInPixelsL() function. This function takes a font description 
       
   785 and creates a COpenFont derived object if the description matches a typeface 
       
   786 contained in the font file.
       
   787 
       
   788 Derived classes must also load typeface attributes from the file into the 
       
   789 protected typeface attribute array during construction. This array is what 
       
   790 is searched when getting font attribute information see AddFaceL(), 
       
   791 GetNearestFontHelper().
       
   792 
       
   793 Writing derived classes  construction:
       
   794 
       
   795 Call the COpenFontFile constructor in the constructor for your derived object, 
       
   796 passing it aUid and aFileName arguments. These values are the arguments passed 
       
   797 when the constructor is called by COpenFontRasterizer::NewFontFileL().
       
   798 
       
   799 A file may contain one or more typefaces. During construction the derived 
       
   800 object should extract the information for each typeface and add it to this 
       
   801 object's protected typeface attribute array see AddFaceL(). This process 
       
   802 will probably leave under some conditions. It should therefore be implemented 
       
   803 in a second phase constructor.
       
   804 
       
   805 Writing derived classes  implement the pure virtual functions:
       
   806 
       
   807 Derived classes must also implement the two pure virtual functions 
       
   808 GetNearestFontInPixelsL() and HasUnicodeCharacterL(). Information about 
       
   809 these functions is provided in the definitions below. Information about 
       
   810 deriving from this class is also provided in the API guide. 
       
   811 
       
   812 @see	COpenFontRasterizer::NewFontFileL()
       
   813 @see	CWsScreenDevice::AddFile()
       
   814 @publishedAll
       
   815 @released
       
   816 */
       
   817 class COpenFontFile : public CBase
       
   818 	{
       
   819 public:
       
   820 	/**
       
   821 	Gets the font which is the nearest to the given font specification.
       
   822 
       
   823 	Implementations of this pure virtual function should create the COpenFont 
       
   824 	derived object that most closely matches aDesiredFontSpec, while fitting within
       
   825 	aMaxHeight, and place a pointer to it in aFont. If this cannot be done,
       
   826 	e.g. if the font name doesn't match, aFont should be set to NULL.
       
   827 
       
   828 	The other two arguments, aHeap and aSessionCacheList, should be passed to 
       
   829 	the COpenFont constructor.
       
   830 
       
   831 	Implementations may use the utility function GetNearestFontHelper()
       
   832 	to get the attributes of the closest matching font.
       
   833 
       
   834 	@param	aHeap				Shared heap. This value should be passed to the 
       
   835 								COpenFont derived classes' constructor.
       
   836 	@param	aSessionCacheList	The session cache list. This value should be passed 
       
   837 								to the COpenFont derived classes' constructor.
       
   838 	@param	aDesiredFontSpec	The desired font specification.
       
   839 	@param	aPixelWidth			The width of a pixel. Used with aPixelHeight for calculating 
       
   840 								the algorithmic slant of the typeface.
       
   841 	@param	aPixelHeight		The height of a pixel. Used with aPixelWidth for calculating 
       
   842 								the algorithmic slant of the typeface.
       
   843 	@param	aFont				On return, contains a pointer to the newly created COpenFont 
       
   844 								derived object, or NULL if no font matching aDesiredFontSpec exists.
       
   845 	@param	aActualFontSpec		The actual font specification of the font retrieved into aFont.
       
   846 	@see	GetNearestFontHelper()
       
   847 	*/
       
   848 	virtual void GetNearestFontInPixelsL(
       
   849 		RHeap* aHeap, COpenFontSessionCacheList* aSessionCacheList,
       
   850 		const TOpenFontSpec& aDesiredFontSpec, TInt aPixelWidth, TInt aPixelHeight,
       
   851 		COpenFont*& aFont, TOpenFontSpec& aActualFontSpec) = 0;
       
   852 
       
   853 	/**
       
   854 	Gets the font which is the nearest to the given font specification.
       
   855 
       
   856 	Implementations of this pure virtual function should create the COpenFont 
       
   857 	derived object that most closely matches aDesiredFontSpec, while fitting within
       
   858 	aMaxHeight, and place a pointer to it in aFont. If this cannot be done,
       
   859 	e.g. if the font name doesn't match, aFont should be set to NULL.
       
   860 
       
   861 	The other two arguments, aHeap and aSessionCacheList, should be passed to 
       
   862 	the COpenFont constructor.
       
   863 
       
   864 	Implementations may use the utility function GetNearestFontHelper()
       
   865 	to get the attributes of the closest matching font.
       
   866 
       
   867 	@param	aHeap				Shared heap. This value should be passed to the COpenFont 
       
   868 								derived classes' constructor.
       
   869 	@param	aSessionCacheList	The session cache list. This value should be passed 
       
   870 								to the COpenFont derived classes' constructor.
       
   871 	@param	aDesiredFontSpec	The desired font specification.
       
   872 	@param	aPixelWidth			The width of a pixel. Used with aPixelHeight for calculating 
       
   873 								the algorithmic slant of the typeface.
       
   874 	@param	aPixelHeight		The height of a pixel. Used with aPixelWidth for calculating 
       
   875 								the algorithmic slant of the typeface.
       
   876 	@param	aFont				On return, contains a pointer to the newly created COpenFont 
       
   877 								derived object, or NULL if no font matching aDesiredFontSpec exists.
       
   878 	@param	aActualFontSpec		The actual font specification of the font retrieved into aFont.
       
   879 	@see	GetNearestFontHelper()
       
   880 	*/
       
   881 	virtual void GetNearestFontToDesignHeightInPixelsL(
       
   882 		RHeap* /*aHeap*/, COpenFontSessionCacheList* /*aSessionCacheList*/,
       
   883 		const TOpenFontSpec& /*aDesiredFontSpec*/, TInt /*aPixelWidth*/, TInt /*aPixelHeight*/,
       
   884 		COpenFont*& /*aFont*/, TOpenFontSpec& /*aActualFontSpec*/) {}
       
   885 	/**
       
   886 	Gets the font which is the nearest to the given font specification.
       
   887 
       
   888 	Implementations of this pure virtual function should create the COpenFont 
       
   889 	derived object that most closely matches aDesiredFontSpec, while fitting within
       
   890 	aMaxHeight, and place a pointer to it in aFont. If this cannot be done,
       
   891 	e.g. if the font name doesn't match, aFont should be set to NULL.
       
   892 
       
   893 	The other two arguments, aHeap and aSessionCacheList, should be passed to 
       
   894 	the COpenFont constructor.
       
   895 
       
   896 	Implementations may use the utility function GetNearestFontHelper()
       
   897 	to get the attributes of the closest matching font.
       
   898 
       
   899 	@param	aHeap				Shared heap. This value should be passed to the COpenFont 
       
   900 								derived classes' constructor.
       
   901 	@param	aSessionCacheList	The session cache list. This value should be passed 
       
   902 								to the COpenFont derived classes' constructor.
       
   903 	@param	aDesiredFontSpec	The desired font specification.
       
   904 	@param	aPixelWidth			The width of a pixel. Used with aPixelHeight for calculating 
       
   905 								the algorithmic slant of the typeface.
       
   906 	@param	aPixelHeight		The height of a pixel. Used with aPixelWidth for calculating 
       
   907 								the algorithmic slant of the typeface.
       
   908 	@param	aFont				On return, contains a pointer to the newly created COpenFont 
       
   909 								derived object, or NULL if no font matching aDesiredFontSpec exists.
       
   910 	@param	aActualFontSpec		The actual font specification of the font retrieved into aFont.
       
   911 	@param	aMaxHeight			The maximum height (vertical extent) within which the font must fit.
       
   912 	@see	GetNearestFontHelper()
       
   913 	*/
       
   914 	virtual void GetNearestFontToMaxHeightInPixelsL(
       
   915 		RHeap* /*aHeap*/, COpenFontSessionCacheList* /*aSessionCacheList*/,
       
   916 		const TOpenFontSpec& /*aDesiredFontSpec*/, TInt /*aPixelWidth*/, TInt /*aPixelHeight*/,
       
   917 		COpenFont*& /*aFont*/, TOpenFontSpec& /*aActualFontSpec*/, TInt /*aMaxHeight*/) {}
       
   918 
       
   919 	/** Tests whether a specified typeface contains a particular character.
       
   920 
       
   921 	@param	aFaceIndex	The index of the typeface to be tested.
       
   922 	@param	aCode		The Unicode character code for the character to be tested. 
       
   923 	@return	ETrue if the typeface contains aCode, otherwise EFalse. */
       
   924 	virtual TBool HasUnicodeCharacterL(TInt aFaceIndex,TInt aCode) const = 0; 
       
   925 	IMPORT_C virtual void ExtendedInterface(TUid aUid, TAny*& aParam);
       
   926 	IMPORT_C COpenFontFile(TInt aUid,const TDesC& aFileName);
       
   927 	IMPORT_C ~COpenFontFile();
       
   928 	IMPORT_C TBool GetNearestFontHelper(const TOpenFontSpec& aDesiredFontSpec,TInt aPixelWidth,TInt aPixelHeight,
       
   929 										TInt& aFaceIndex,TOpenFontSpec& aActualFontSpec) const;
       
   930 	IMPORT_C void AddFaceL(const TOpenFontFaceAttrib& aAttrib);
       
   931 	inline TUid Uid() const;
       
   932 	inline const TDesC& FileName() const;
       
   933 	inline const TOpenFontFaceAttrib& FaceAttrib(TInt aFaceIndex) const;
       
   934 	inline TInt FaceCount() const;
       
   935 	inline void IncRefCount();
       
   936 	inline TBool DecRefCount();
       
   937 	TInt GetNearestFontInPixels(
       
   938 		RHeap* aHeap, COpenFontSessionCacheList* aSessionCacheList,
       
   939 		const TOpenFontSpec& aDesiredFontSpec, TInt aPixelWidth, TInt aPixelHeight,
       
   940 		COpenFont*& aFont, TOpenFontSpec& aActualFontSpec);
       
   941 	TInt GetNearestFontToDesignHeightInPixels(
       
   942 		RHeap* aHeap, COpenFontSessionCacheList* aSessionCacheList,
       
   943 		const TOpenFontSpec& aDesiredFontSpec, TInt aPixelWidth, TInt aPixelHeight,
       
   944 		COpenFont*& aFont, TOpenFontSpec& aActualFontSpec);
       
   945 	TInt GetNearestFontToMaxHeightInPixels(
       
   946 		RHeap* aHeap, COpenFontSessionCacheList* aSessionCacheList,
       
   947 		const TOpenFontSpec& aDesiredFontSpec, TInt aPixelWidth, TInt aPixelHeight,
       
   948 		COpenFont*& aFont, TOpenFontSpec& aActualFontSpec, TInt aMaxHeight);
       
   949 	void RemoveFontFromList(const COpenFont* aFont);
       
   950 	void SetFontStoreL(CFontStore* aFontStore);
       
   951 	CFontStore* GetFontStore();
       
   952 	CArrayPtrFlat<COpenFont>* GetOpenFontList();
       
   953 protected:
       
   954 	IMPORT_C TBool GetNearestFontHelperOld(const TOpenFontSpec& aDesiredFontSpec,TInt aPixelWidth,TInt aPixelHeight,
       
   955 										TInt& aFaceIndex,TOpenFontSpec& aActualFontSpec) const;
       
   956 private:
       
   957 	// A class to contain the public font attributes and private positioning information (for kerning, ligatures, etc.)
       
   958 	class TAttrib: public TOpenFontFaceAttrib
       
   959 		{
       
   960 	public:
       
   961 		COpenFontPositioner* iPositioner;	// if non-null, positioning information for the typeface
       
   962 		};
       
   963 	static TInt ScoreByName(const TOpenFontSpec& aDesiredFontSpec, const TAttrib& aAttrib);
       
   964 	static TInt ScoreByStyle(const TOpenFontSpec& aDesiredFontSpec, const TAttrib& aAttrib);
       
   965 	void GetNearestFontToDesignHeightInPixelsAndAddToListL(
       
   966 		RHeap* aHeap, COpenFontSessionCacheList* aSessionCacheList,
       
   967 		const TOpenFontSpec& aDesiredFontSpec, TInt aPixelWidth, TInt aPixelHeight,
       
   968 		COpenFont*& aFont, TOpenFontSpec& aActualFontSpec);
       
   969 	void GetNearestFontToMaxHeightInPixelsAndAddToListL(
       
   970 		RHeap* aHeap, COpenFontSessionCacheList* aSessionCacheList,
       
   971 		const TOpenFontSpec& aDesiredFontSpec, TInt aPixelWidth, TInt aPixelHeight,
       
   972 		COpenFont*& aFont, TOpenFontSpec& aActualFontSpec, TInt aMaxHeight);
       
   973 
       
   974 private:
       
   975 	CArrayFixFlat<TAttrib> iFaceAttrib;
       
   976 	TUid iUid;
       
   977 	TBuf<KMaxFileName> iFileName;
       
   978 	TInt iRefCount;
       
   979 	CArrayPtrFlat<COpenFont> iFontList;
       
   980 	TOpenFontFileData* iData;
       
   981 	};
       
   982 
       
   983 /**
       
   984 Convenience class from which rasterizer contexts may be derived.
       
   985 
       
   986 A rasterizer context object may (optionally) be created to provide the link 
       
   987 between the rasterizer DLL code supported by the Open Font System, and the 
       
   988 rasterizer engine code. A rasterizer context object class should get the 
       
   989 requested bitmap from the associated rasterizer engine. It should then convert 
       
   990 this into Symbian run-length-encoded format. This class contains convenience 
       
   991 functions to make the conversion easier.
       
   992 
       
   993 Deriving from this class is described in greater detail in the API guide.
       
   994 @publishedAll
       
   995 @released
       
   996 */
       
   997 class COpenFontRasterizerContext: public CBase
       
   998 	{
       
   999 public:
       
  1000 	inline COpenFontRasterizerContext();
       
  1001 	inline void StartGlyph(TOpenFontGlyphData* aGlyphData);
       
  1002 	inline void WriteGlyphBit(TInt aBit);
       
  1003 	inline void WriteGlyphByte(TInt aByte);
       
  1004 	inline void EndGlyph();
       
  1005 private:
       
  1006 	TOpenFontGlyphData* iGlyphData;
       
  1007 	TUint8* iGlyphDataStart;
       
  1008 	TUint8* iGlyphDataPtr;
       
  1009 	TUint8* iGlyphDataEnd;
       
  1010 	TInt iGlyphBit;
       
  1011 	TInt iBytesNeeded;
       
  1012 	TBool iOverflow;
       
  1013 	TAny* iReserved; // unused; for future expansion
       
  1014 	};
       
  1015 
       
  1016 
       
  1017 /**
       
  1018 Shaper abstract class.  All shaper implementations derive from this
       
  1019 @publishedAll 
       
  1020 @released
       
  1021 */
       
  1022 class CShaper : public CBase
       
  1023 	{
       
  1024 public:
       
  1025 	class TInput
       
  1026 		{
       
  1027 	public:
       
  1028 		/** The text to be shaped possibly including context. */
       
  1029 		const TDesC* iText;
       
  1030 		/** The index of the first character in iText to be shaped. */
       
  1031 		TInt iStart;
       
  1032 		/** (One past) the end of the text in iText to be shaped. */
       
  1033 		TInt iEnd;
       
  1034 		/** Script code, for example 'd'<<24 | 'e'<<16 | 'v'<<8 | 'a'
       
  1035 		for Devanagari. */
       
  1036 		TInt iScript;
       
  1037 		/** Language code. 0 implies "default" */
       
  1038 		TUint32 iLanguage;
       
  1039 		/** Maximum advance in pixels. Shaping beyond this
       
  1040 		advance is not required (but is not harmful). */
       
  1041 		TInt iMaximumAdvance;
       
  1042 		/** Flags. Currently none is defined. */
       
  1043 		TInt iFlags;
       
  1044 		/** Session handle. To be used if rasterization is needed. */
       
  1045 		TInt iSessionHandle;
       
  1046 		/** Reserved for future expansion. Must be set to 0. */
       
  1047 		TInt iReserved1;
       
  1048 		};
       
  1049 	/** Constructor */
       
  1050 	IMPORT_C CShaper();
       
  1051 
       
  1052 	/** Destructor */
       
  1053 	IMPORT_C virtual ~CShaper();
       
  1054 
       
  1055 	/** construct a shaper object
       
  1056 	@param	aBitmapFont	The font to be shaped.
       
  1057 	@param	aHeap		The heap to be used by the shaper.
       
  1058 	@return	KErrNone if this font can be shaper or system wide error code*/
       
  1059 	virtual TInt ConstructL(CBitmapFont*  aBitmapFont, TInt aScript, TInt aLanguage, RHeap* iHeap) = 0;
       
  1060 
       
  1061 	/** If possible, shape the text described by aInput, placing the output on aHeapForOutput.
       
  1062 	@param	aOutput			The output, as a newly allocate object on aHeapForOutput.
       
  1063 	@param	aInput			The input text and other parameters.
       
  1064 	@param	aHeapForOutput	On success, aOutput should be allocated from this and nothing else. 
       
  1065 							On failure, nothing should be allocated from it.
       
  1066 	@return	Error value from one of the system-wide error codes on failure, KErrNone on success.
       
  1067 	@see	TShapeHeader */
       
  1068 	virtual TInt ShapeText(TShapeHeader*& aOutput, const TInput& aInput, RHeap* aHeapForOutput) = 0;
       
  1069 
       
  1070 	/** For future expansion. Any overriders must base-call
       
  1071 	if aInterface is unrecognized.
       
  1072 	
       
  1073 	WARNING: Function for internal use ONLY. Compatibility is not guaranteed in future releases.
       
  1074 	
       
  1075 	@param	aInterfaceId	The ID of the interface to return.
       
  1076 	@return	A pointer to the extension interface.
       
  1077 	*/
       
  1078 	IMPORT_C virtual void* ExtendedInterface(TUid aInterfaceId);
       
  1079 	};
       
  1080 
       
  1081 /** ECOM plug-in base class for shaper factories.
       
  1082 @publishedAll
       
  1083 @released
       
  1084 */
       
  1085 class CShaperFactory : public CBase
       
  1086 	{
       
  1087 public:
       
  1088 	/** Create a shaper if possible, for typeface aFaceIndex
       
  1089 	within file aFileName.
       
  1090 	@param	aFont	The font to be shaped.
       
  1091 	@param	iHeap	The heap to use for constructing the shaper.
       
  1092 	@return	0 If the font is not understood or inappropriate for any shaper that might be constructed 
       
  1093 			by this class, otherwise returns the newly-constructed shaper on iHeap. */
       
  1094 	virtual CShaper* NewShaperL(CBitmapFont* aFont, TInt aScript, TInt aLanguage, RHeap* iHeap) = 0;
       
  1095 
       
  1096 	inline static CShaperFactory* NewL(TUid aInterfaceImplUid);
       
  1097 	inline virtual ~CShaperFactory();
       
  1098 
       
  1099 	/** For future expansion. Any overriders must base-call if aInterface is unrecognized.
       
  1100 
       
  1101 	WARNING: Function for internal use ONLY. Compatibility is not guaranteed in future releases.
       
  1102 
       
  1103 	@param	aInterfaceId	The ID of the interface to return.
       
  1104 	@return	A pointer to the extension interface.	
       
  1105 	*/
       
  1106 	virtual void* ExtendedInterface(TUid aInterfaceId);
       
  1107 
       
  1108 private:
       
  1109 	TUid iDtor_ID_Key;//ECOM identifier used during destruction
       
  1110 	};
       
  1111 
       
  1112 // Inline functions start here.
       
  1113 /** Default C++ constructor.
       
  1114 
       
  1115 This creates then zero fills the object. */
       
  1116 inline TOpenFontMetrics::TOpenFontMetrics()
       
  1117 	{
       
  1118 	Mem::FillZ(this,sizeof(*this));
       
  1119 	}
       
  1120 
       
  1121 /** Gets the font's size.
       
  1122 
       
  1123 @return	The font's size. 
       
  1124 @see	SetSize() */
       
  1125 inline TInt TOpenFontMetrics::Size() const
       
  1126 	{
       
  1127 	return iDesignHeight;
       
  1128 	}
       
  1129 
       
  1130 /** Gets the font's ascent.
       
  1131 
       
  1132 This is the ascent for the Latin character which is highest above the baseline.
       
  1133 
       
  1134 @return The font's ascent, in pixels.
       
  1135 @see SetAscent() */
       
  1136 inline TInt TOpenFontMetrics::Ascent() const
       
  1137 	{
       
  1138 	return iAscent;
       
  1139 	}
       
  1140 
       
  1141 /** Gets the font's descent.
       
  1142 
       
  1143 This is the descent for the Latin character in the font which falls furthest below the baseline.
       
  1144 
       
  1145 @return The font's descent, in pixels. 
       
  1146 @see SetDescent() */
       
  1147 inline TInt TOpenFontMetrics::Descent() const
       
  1148 	{
       
  1149 	return iDescent;
       
  1150 	}
       
  1151 
       
  1152 /** Sets the font's maximum height.
       
  1153 
       
  1154 Note that if this object was initialised from the CFont this will be the same 
       
  1155 as the ascent.
       
  1156 
       
  1157 This is the ascent for the character which is highest above the baseline. 
       
  1158 In many fonts this will be the height of an accented character like Â, 
       
  1159 including the accent.
       
  1160 
       
  1161 @return The maximum height of the font, in pixels.
       
  1162 @see SetMaxDepth() */
       
  1163 inline TInt TOpenFontMetrics::MaxHeight() const
       
  1164 	{
       
  1165 	return iMaxHeight;
       
  1166 	}
       
  1167 
       
  1168 /** Gets the font's maximum depth.
       
  1169 
       
  1170 Note: If this object was initialised from the CFont this will be the same as the 
       
  1171 descent.
       
  1172 
       
  1173 This is the descent for the character in the font which falls furthest below 
       
  1174 the baseline.
       
  1175 
       
  1176 @return The font's maximum depth.
       
  1177 @see SetMaxDepth() */
       
  1178 inline TInt TOpenFontMetrics::MaxDepth() const
       
  1179 	{
       
  1180 	return iMaxDepth;
       
  1181 	}
       
  1182 
       
  1183 /** Gets the maximum character width, in pixels.
       
  1184 
       
  1185 @return The maximum character width, in pixels.
       
  1186 @see SetMaxWidth() */
       
  1187 inline TInt TOpenFontMetrics::MaxWidth() const
       
  1188 	{
       
  1189 	return iMaxWidth;
       
  1190 	}
       
  1191 
       
  1192 /** Sets the font's size.
       
  1193 
       
  1194 @param aSize The font's size.
       
  1195 @see Size() */
       
  1196 inline void TOpenFontMetrics::SetSize(TInt aSize)
       
  1197 	{
       
  1198 	iDesignHeight = static_cast<TInt16>(aSize);
       
  1199 	}
       
  1200 
       
  1201 /** Sets the ascent.
       
  1202 
       
  1203 @param aAscent The ascent, in pixels.
       
  1204 @see Ascent() */
       
  1205 inline void TOpenFontMetrics::SetAscent(TInt aAscent)
       
  1206 	{
       
  1207 	iAscent = static_cast<TInt16>(aAscent);
       
  1208 	}
       
  1209 
       
  1210 /** Sets the descent.
       
  1211 
       
  1212 @param aDescent The descent, in pixels.
       
  1213 @see Descent() */
       
  1214 inline void TOpenFontMetrics::SetDescent(TInt aDescent)
       
  1215 	{
       
  1216 	iDescent = static_cast<TInt16>(aDescent);
       
  1217 	}
       
  1218 
       
  1219 /** Sets the font's maximum height.
       
  1220 
       
  1221 @param aMaxHeight The font's maximum height, in pixels. 
       
  1222 @see MaxHeight() */
       
  1223 inline void TOpenFontMetrics::SetMaxHeight(TInt aMaxHeight)
       
  1224 	{
       
  1225 	iMaxHeight = static_cast<TInt16>(aMaxHeight);
       
  1226 	}
       
  1227 
       
  1228 /** Sets the font's maximum depth.
       
  1229 
       
  1230 @param aMaxDepth The font's maximum depth, in pixels.
       
  1231 @see MaxDepth() */
       
  1232 inline void TOpenFontMetrics::SetMaxDepth(TInt aMaxDepth)
       
  1233 	{
       
  1234 	iMaxDepth = static_cast<TInt16>(aMaxDepth);
       
  1235 	}
       
  1236 
       
  1237 /** Sets the maximum character width, in pixels.
       
  1238 
       
  1239 @param aMaxWidth The maximum character width, in pixels.
       
  1240 @see MaxWidth() */
       
  1241 inline void TOpenFontMetrics::SetMaxWidth(TInt aMaxWidth)
       
  1242 	{
       
  1243 	iMaxWidth = static_cast<TInt16>(aMaxWidth);
       
  1244 	}
       
  1245 
       
  1246 /** Default C++ constructor. 
       
  1247 
       
  1248 The constructor initialises all data members to zero. As for other T classes, 
       
  1249 there is no need to explicitly cleanup TOpenFontCharMetrics objects. */
       
  1250 inline TOpenFontCharMetrics::TOpenFontCharMetrics()
       
  1251 	{
       
  1252 	Mem::FillZ(this,sizeof(*this));
       
  1253 	}
       
  1254 
       
  1255 /** Gets the width of the character's bitmap.
       
  1256 
       
  1257 @return The width of the bitmap in pixels. */
       
  1258 inline TInt TOpenFontCharMetrics::Width() const
       
  1259 	{
       
  1260 	return iWidth;
       
  1261 	}
       
  1262 
       
  1263 /** Gets the height of the character's bitmap.
       
  1264 
       
  1265 @return The character's height in pixels. */
       
  1266 inline TInt TOpenFontCharMetrics::Height() const
       
  1267 	{
       
  1268 	return iHeight;
       
  1269 	}
       
  1270 
       
  1271 /** Gets the horizontal bearing X. 
       
  1272 
       
  1273 This is the distance in pixels from the pen point before the character is 
       
  1274 drawn (the origin) to the left edge of the bitmap, when drawing horizontally. 
       
  1275 A positive value means that the left edge of the bitmap is right of the origin.
       
  1276 
       
  1277 @return The horizontal bearing X in pixels */
       
  1278 inline TInt TOpenFontCharMetrics::HorizBearingX() const
       
  1279 	{
       
  1280 	return iHorizBearingX;
       
  1281 	}
       
  1282 
       
  1283 /** Gets horizontal bearing Y.
       
  1284 
       
  1285 This is the vertical distance in pixels from the pen point before the character 
       
  1286 is drawn (the origin) to the top edge of the bitmap, when drawing horizontally. 
       
  1287 A positive value means that the top edge of the bitmap is above the origin
       
  1288 
       
  1289 @return The horizontal bearing Y in pixels. */
       
  1290 inline TInt TOpenFontCharMetrics::HorizBearingY() const
       
  1291 	{
       
  1292 	return iHorizBearingY;
       
  1293 	}
       
  1294 
       
  1295 /** Gets the horizontal advance.
       
  1296 
       
  1297 This is the amount added to the x co-ordinate of the origin after the character 
       
  1298 is drawn   what most people understand by the width or escapement of a character. 
       
  1299 The origin here is the pen point before the character is drawn. 
       
  1300 
       
  1301 @return The horizontal advance in pixels */
       
  1302 inline TInt TOpenFontCharMetrics::HorizAdvance() const
       
  1303 	{
       
  1304 	return iHorizAdvance;
       
  1305 	}
       
  1306 
       
  1307 /** Gets the vertical bearing X.
       
  1308 
       
  1309 This is the distance in pixels from the pen point before the character is 
       
  1310 drawn (the origin) to the left edge of the bitmap, when drawing vertically. 
       
  1311 A positive value means that the left edge of the bitmap is right of the origin.
       
  1312 
       
  1313 @return The vertical bearing X in pixels. */
       
  1314 inline TInt TOpenFontCharMetrics::VertBearingX() const
       
  1315 	{
       
  1316 	return iVertBearingX;
       
  1317 	}
       
  1318 
       
  1319 /** Gets the vertical bearing Y.
       
  1320 
       
  1321 This is the distance in pixels from the pen point before the character is 
       
  1322 drawn (the origin) to the top edge of the bitmap, when drawing vertically. 
       
  1323 A positive value means that the top edge of the bitmap is above the origin.
       
  1324 
       
  1325 @return The vertical bearing Y in pixels. */
       
  1326 inline TInt TOpenFontCharMetrics::VertBearingY() const
       
  1327 	{
       
  1328 	return iVertBearingY;
       
  1329 	}
       
  1330 
       
  1331 /** Gets the vertical advance.
       
  1332 
       
  1333 When drawing vertically, this is the amount added to the y co-ordinate of 
       
  1334 the origin after the character is drawn what most people understand by 
       
  1335 the height of a character. The origin here is the pen point before the character 
       
  1336 is drawn.
       
  1337 
       
  1338 Note: Vertical drawing is not supported in v5.
       
  1339 
       
  1340 @return The vertical advance in pixels. */
       
  1341 inline TInt TOpenFontCharMetrics::VertAdvance() const
       
  1342 	{
       
  1343 	return iVertAdvance;
       
  1344 	}
       
  1345 
       
  1346 /** Gets the bounds of the character relative to its origin when setting text 
       
  1347 horizontally.
       
  1348 
       
  1349 The origin here is the pen point before the character is drawn. 
       
  1350 
       
  1351 @param aBounds The character's bounds. */
       
  1352 inline void TOpenFontCharMetrics::GetHorizBounds(TRect& aBounds) const
       
  1353 	{
       
  1354 	aBounds.iTl.iX = iHorizBearingX;
       
  1355 	aBounds.iTl.iY = -iHorizBearingY;
       
  1356 	aBounds.iBr.iX = aBounds.iTl.iX + iWidth;
       
  1357 	aBounds.iBr.iY = aBounds.iTl.iY + iHeight;
       
  1358 	}
       
  1359 
       
  1360 /** Gets the bounds of the character relative to its origin when setting text 
       
  1361 vertically. 
       
  1362 
       
  1363 The origin here is the pen point before the character is drawn.
       
  1364 
       
  1365 @param aBounds The character's bounds. */
       
  1366 inline void TOpenFontCharMetrics::GetVertBounds(TRect& aBounds) const
       
  1367 	{
       
  1368 	aBounds.iTl.iX = -iVertBearingX;
       
  1369 	aBounds.iTl.iY = iVertBearingY;
       
  1370 	aBounds.iBr.iX = aBounds.iTl.iX + iWidth;
       
  1371 	aBounds.iBr.iY = aBounds.iTl.iY + iHeight;
       
  1372 	}
       
  1373 
       
  1374 /** Sets the width of the character's bitmap.
       
  1375 
       
  1376 @param aWidth The width of the bitmap in pixels. */
       
  1377 inline void TOpenFontCharMetrics::SetWidth(TInt aWidth)
       
  1378 	{
       
  1379 	iWidth = (TInt16)aWidth;
       
  1380 	}
       
  1381 
       
  1382 /** Sets the height of the character's bitmap.
       
  1383 
       
  1384 @param aHeight The character height (in pixels). */
       
  1385 inline void TOpenFontCharMetrics::SetHeight(TInt aHeight)
       
  1386 	{
       
  1387 	iHeight = (TInt16)aHeight;
       
  1388 	}
       
  1389 
       
  1390 /** Sets the horizontal bearing X.
       
  1391 
       
  1392 This is the distance in pixels from the pen point before the character is 
       
  1393 drawn (the origin) to the left edge of the bitmap, when drawing horizontally. 
       
  1394 A positive value means that the left edge of the bitmap is right of the origin.
       
  1395 
       
  1396 @param aHorizBearingX The horizontal bearing X (in pixels). */
       
  1397 inline void TOpenFontCharMetrics::SetHorizBearingX(TInt aHorizBearingX)
       
  1398 	{
       
  1399 	iHorizBearingX = (TInt16)aHorizBearingX;
       
  1400 	}
       
  1401 
       
  1402 /** Sets the horizontal bearing Y.
       
  1403 
       
  1404 This is the distance in pixels from the pen point before the character is 
       
  1405 drawn (the origin) to the top edge of the bitmap, when drawing horizontally. 
       
  1406 A positive value means that the top edge of the bitmap is above the origin.
       
  1407 
       
  1408 @param aHorizBearingY The horizontal bearing Y (in pixels). */
       
  1409 inline void TOpenFontCharMetrics::SetHorizBearingY(TInt aHorizBearingY)
       
  1410 	{
       
  1411 	iHorizBearingY = (TInt16)aHorizBearingY;
       
  1412 	}
       
  1413 
       
  1414 /** Sets the horizontal advance.
       
  1415 
       
  1416 This is the amount added to the x co-ordinate of the origin after the character 
       
  1417 is drawn, what most people understand by the width or escapement of a character. 
       
  1418 The origin here is the pen point before the character is drawn.
       
  1419 
       
  1420 @param aHorizAdvance The horizontal advance (in pixels). */
       
  1421 inline void TOpenFontCharMetrics::SetHorizAdvance(TInt aHorizAdvance)
       
  1422 	{
       
  1423 	iHorizAdvance = (TInt16)aHorizAdvance;
       
  1424 	}
       
  1425 
       
  1426 /** Set vertical bearing X.
       
  1427 
       
  1428 This is the distance in pixels from the pen point before the character is 
       
  1429 drawn (the origin) to the left edge of the bitmap, when drawing vertically. 
       
  1430 A positive value means that the left edge of the bitmap is right of the origin.
       
  1431 
       
  1432 @param aVertBearingX The vertical bearing X (in pixels). */
       
  1433 inline void TOpenFontCharMetrics::SetVertBearingX(TInt aVertBearingX)
       
  1434 	{
       
  1435 	iVertBearingX = (TInt16)aVertBearingX;
       
  1436 	}
       
  1437 
       
  1438 /** Sets the vertical bearing Y.
       
  1439 
       
  1440 This is the distance in pixels from the pen point before the character is 
       
  1441 drawn (the origin) to the top edge of the bitmap, when drawing vertically. 
       
  1442 A positive value means that the top edge of the bitmap is above the origin.
       
  1443 
       
  1444 @param aVertBearingY The vertical bearing Y (in pixels). */
       
  1445 inline void TOpenFontCharMetrics::SetVertBearingY(TInt aVertBearingY)
       
  1446 	{
       
  1447 	iVertBearingY = (TInt16)aVertBearingY;
       
  1448 	}
       
  1449 
       
  1450 /** Sets the vertical advance.
       
  1451 
       
  1452 When drawing vertically, this is the amount added to the y co-ordinate of 
       
  1453 the origin after the character is drawn  what most people understand by 
       
  1454 the height of a character. The origin here is the pen point before the character 
       
  1455 is drawn.
       
  1456 
       
  1457 Note: Vertical drawing is not supported in v5.
       
  1458 
       
  1459 @param aVertAdvance The vertical advance (in pixels). */
       
  1460 inline void TOpenFontCharMetrics::SetVertAdvance(TInt aVertAdvance)
       
  1461 	{
       
  1462 	iVertAdvance = (TInt16)aVertAdvance;
       
  1463 	}
       
  1464 
       
  1465 /** Gets the character metrics for this font.
       
  1466 
       
  1467 @return The character metrics for this font. */
       
  1468 inline const TOpenFontMetrics& COpenFont::Metrics() const
       
  1469 	{
       
  1470 	return iMetrics;
       
  1471 	}
       
  1472 
       
  1473 /** Gets the glyph index.
       
  1474 
       
  1475 This is the index of a particular glyph within the font file.
       
  1476 
       
  1477 Note: This makes it possible to gain access to glyphs which are not referenced 
       
  1478 by the Unicode character set. However, this feature is not yet supported by 
       
  1479 Symbian OS.
       
  1480 
       
  1481 @return The glyph index.
       
  1482 @see SetGlyphIndex() */
       
  1483 inline TInt TOpenFontGlyphData::GlyphIndex() const
       
  1484 	{
       
  1485 	return iGlyphIndex;
       
  1486 	}
       
  1487 
       
  1488 /** Gets the typeface attributes.
       
  1489 
       
  1490 These are the attributes of the font represented by this object.
       
  1491 
       
  1492 @return The typeface attributes. */
       
  1493 inline const TOpenFontFaceAttrib* COpenFont::FaceAttrib() const
       
  1494 	{
       
  1495     return iFileOffset == 0 ? NULL : &File()->FaceAttrib(iFaceIndex);
       
  1496 	}
       
  1497 
       
  1498 /** Gets a pointer to the COpenFontFile which created this object.
       
  1499 
       
  1500 This is the COpenFontFile which owns the file that contains the definition 
       
  1501 of the typeface. It can be used to get information about the typeface, or 
       
  1502 to access the rasterizer context (engine).
       
  1503 
       
  1504 @return The COpenFontFile which created this object. */
       
  1505 inline COpenFontFile* COpenFont::File() const
       
  1506 	{
       
  1507     return iFileOffset == 0 ? NULL : reinterpret_cast<COpenFontFile*>(const_cast<COpenFont*>(PtrAdd(this, iFileOffset)));
       
  1508 	}
       
  1509 
       
  1510 /** Gets the index of this typeface within the font file.
       
  1511 
       
  1512 @return The index of this typeface within the font file. */
       
  1513 inline TInt COpenFont::FaceIndex() const
       
  1514 	{
       
  1515 	return iFaceIndex;
       
  1516 	}
       
  1517 
       
  1518 /** Tests whether or not a character needs to be rasterized.
       
  1519 
       
  1520 Characters that have been rasterized are cached  there is no need to regenerate 
       
  1521 the character bitmap. This function should only be called by the Font and 
       
  1522 Bitmap server.
       
  1523 
       
  1524 @param aSessionHandle A handle to the font and bitmap server session.
       
  1525 @param aCode The code for the Unicode character.
       
  1526 @return ETrue if the character needs to be rasterized, otherwise EFalse. */
       
  1527 inline TBool COpenFont::CharacterNeedsToBeRasterized(TInt aSessionHandle,TInt aCode) const
       
  1528 	{
       
  1529 	return Glyph(aSessionHandle,aCode) == NULL;
       
  1530 	}
       
  1531 
       
  1532 /** Gets the ascent of an ANSI capital letter in the font whether or not
       
  1533 there are any ANSI capitals in the font.
       
  1534 @return The positive distance from the font baseline to the top of a
       
  1535 standard ANSI capital letter
       
  1536 @publishedAll
       
  1537 @released
       
  1538 @see AscentInPixels()
       
  1539 */
       
  1540 inline TInt COpenFont::FontCapitalAscent() const
       
  1541 	{
       
  1542 	return iFontCapitalAscent;
       
  1543 	}
       
  1544 
       
  1545 /** Gets the max ascent of any pre-composed glyph in the font. This will
       
  1546 include accents or diacritics that form part of pre-composed glyphs. It is
       
  1547 not guaranteed to cover the max ascent of composite glyphs that have to be
       
  1548 created by a layout engine. This is also the recommended distance between
       
  1549 the top of a text box and the baseline of the first line of text. 
       
  1550 
       
  1551 The value may be affected by the TLanguage value set by SetScriptTypeForMetrics().
       
  1552 
       
  1553 @return The positive distance from the font baseline to the top of the
       
  1554 highest pre-composed glyph (including accents) above the baseline.
       
  1555 @publishedAll
       
  1556 @released
       
  1557 @see AscentInPixels()
       
  1558 @see SetScriptTypeForMetrics()
       
  1559 */
       
  1560 inline TInt COpenFont::FontMaxAscent() const
       
  1561 	{
       
  1562 	return iFontMaxAscent;
       
  1563 	}
       
  1564 
       
  1565 /** Gets the descent of an ANSI descending character in the font.
       
  1566 Whether or not there are any ANSI descenders in the font.
       
  1567 
       
  1568 The value may be affected by the TLanguage value set by SetScriptTypeForMetrics().
       
  1569 
       
  1570 @return The positive distance from the font baseline to the bottom of the
       
  1571 lowest ANSI descender.
       
  1572 @publishedAll
       
  1573 @released
       
  1574 @see DescentInPixels()
       
  1575 @see SetScriptTypeForMetrics()
       
  1576 */
       
  1577 inline TInt COpenFont::FontStandardDescent() const
       
  1578 	{
       
  1579 	return iFontStandardDescent;
       
  1580 	}
       
  1581 
       
  1582 /** Gets the max descent of any pre-composed glyph in the font. This will
       
  1583 include accents or diacritics that form part of pre-composed glyphs. It is
       
  1584 not guaranteed to cover the max descent of composite glyphs that have to be
       
  1585 created by a layout engine.
       
  1586 
       
  1587 The value may be affected by the TLanguage value set by SetScriptTypeForMetrics().
       
  1588 
       
  1589 @return The positive distance from the font baseline to the bottom of the
       
  1590 lowest pre-composed glyph (including accents) below the baseline
       
  1591 @publishedAll
       
  1592 @released
       
  1593 @see DescentInPixels()
       
  1594 @see SetScriptTypeForMetrics()
       
  1595 */
       
  1596 inline TInt COpenFont::FontMaxDescent() const
       
  1597 	{
       
  1598 	return iFontMaxDescent;
       
  1599 	}
       
  1600 
       
  1601 /** Gets the suggested line gap for the font. This is the recommended
       
  1602 baseline to baseline distance between successive lines of text in the font.
       
  1603 @return The positive recommended gap between successive lines
       
  1604 @publishedAll
       
  1605 @released
       
  1606 */
       
  1607 inline TInt COpenFont::FontLineGap() const
       
  1608 	{
       
  1609 	return iFontLineGap;
       
  1610 	}
       
  1611 
       
  1612 /** Gets the maximum height for the font. This is the sum of the max ascent 
       
  1613 of the font and the max descent of the font.
       
  1614 
       
  1615 The value may be affected by the TLanguage value set by SetScriptTypeForMetrics().
       
  1616 
       
  1617 @return The positive maximum height of the font
       
  1618 @publishedAll
       
  1619 @released
       
  1620 @see HeightInPixels()
       
  1621 @see SetScriptTypeForMetrics()
       
  1622 */
       
  1623 inline TInt COpenFont::FontMaxHeight() const
       
  1624 	{
       
  1625 	return iFontMaxAscent + iFontMaxDescent;
       
  1626 	}
       
  1627 
       
  1628 /** Default C++ constructor.
       
  1629 
       
  1630 This sets all attribute fields to zero. As for other T classes, there is no 
       
  1631 need to explicitly clean-up objects derived from this class. */
       
  1632 inline TOpenFontFaceAttribBase::TOpenFontFaceAttribBase()
       
  1633 	{
       
  1634 	Mem::FillZ(this,sizeof(*this));
       
  1635 	}
       
  1636 
       
  1637 /** Default C++ constructor.
       
  1638 
       
  1639 The function initialises the minimum typeface size to zero, the names to NULL, 
       
  1640 and the coverage and style flags to zero. */
       
  1641 inline TOpenFontFaceAttrib::TOpenFontFaceAttrib():
       
  1642 	iMinSizeInPixels(0),
       
  1643 	iReserved2(0)
       
  1644 	{
       
  1645 	}
       
  1646 
       
  1647 /** Tests for support of Latin characters.
       
  1648 
       
  1649 Note: A return value of ETrue implies that the font has a usable set of 
       
  1650 characters. It does not imply exhaustive coverage.
       
  1651 
       
  1652 @return ETrue if Latin characters are supported */
       
  1653 inline TBool TOpenFontFaceAttribBase::HasLatin() const
       
  1654 	{
       
  1655 	return iCoverage[0] & ELatinSet;
       
  1656 	}
       
  1657 
       
  1658 /** Tests for support of Greek characters.
       
  1659 
       
  1660 Note: A return value of ETrue implies that the font has a usable set of 
       
  1661 characters. It does not imply exhaustive coverage.
       
  1662 
       
  1663 @return ETrue if Greek characters are supported. */
       
  1664 inline TBool TOpenFontFaceAttribBase::HasGreek() const
       
  1665 	{
       
  1666 	return iCoverage[0] & EGreekSet;
       
  1667 	}
       
  1668 
       
  1669 /** Tests for support of Cyrillic characters.
       
  1670 
       
  1671 Note: A return value of ETrue implies that the font has a usable set of 
       
  1672 characters. It does not imply exhaustive coverage.
       
  1673 
       
  1674 @return ETrue if Cyrillic characters are supported. */
       
  1675 inline TBool TOpenFontFaceAttribBase::HasCyrillic() const
       
  1676 	{
       
  1677 	return iCoverage[0] & ECyrillicSet;
       
  1678 	}
       
  1679 
       
  1680 /** Tests for support of Japanese syllabic characters.
       
  1681 
       
  1682 This function tests for the presence of Hiragana and Katakana syllabic 
       
  1683 characters in the font, collectively called kana. These characters are not 
       
  1684 sufficient for the Japanese language, which also makes use of Chinese characters.
       
  1685 
       
  1686 Note: A return value of ETrue implies that the font has a usable set of 
       
  1687 characters. It does not imply exhaustive coverage.
       
  1688 
       
  1689 @return ETrue if Japanese characters are supported 
       
  1690 @see HasCJK() */
       
  1691 inline TBool TOpenFontFaceAttribBase::HasKana() const
       
  1692 	{
       
  1693 	return iCoverage[1] & EKanaSets;
       
  1694 	}
       
  1695 
       
  1696 /** Tests for support of Korean Hangul characters.
       
  1697 
       
  1698 Korean may also make use of Chinese characters.
       
  1699 
       
  1700 Note: A return value of ETrue implies that the font has a usable set of 
       
  1701 characters. It does not imply exhaustive coverage.
       
  1702 
       
  1703 @return ETrue if Korean characters are supported 
       
  1704 @see HasCJK() */
       
  1705 inline TBool TOpenFontFaceAttribBase::HasHangul() const
       
  1706 	{
       
  1707 	return iCoverage[1] & EHangulSet;
       
  1708 	}
       
  1709 
       
  1710 /** Tests for support of Chinese ideographic characters.
       
  1711 
       
  1712 These are used in Chinese, Japanese and Korean.
       
  1713 
       
  1714 Note: A return value of ETrue implies that the font has a usable set of 
       
  1715 characters. It does not imply exhaustive coverage.
       
  1716 
       
  1717 @return ETrue if Chinese ideographs are supported. */
       
  1718 inline TBool TOpenFontFaceAttribBase::HasCJK() const
       
  1719 	{
       
  1720 	return iCoverage[1] & ECJKSet;
       
  1721 	}
       
  1722 
       
  1723 /** Tests if the typeface contains symbols only.
       
  1724 
       
  1725 @return ETrue if the typeface contains symbols only. */
       
  1726 inline TBool TOpenFontFaceAttribBase::IsSymbol() const
       
  1727 	{
       
  1728 	return iCoverage[0] == 0 && iCoverage[2] == 0 && iCoverage[3] == 0 &&
       
  1729 		   iCoverage[1] & ESymbolSets && !(iCoverage[1] & ~ESymbolSets);
       
  1730 	}
       
  1731 
       
  1732 /** Tests if the typeface is inherently bold.
       
  1733 
       
  1734 @return ETrue if the typeface is inherently bold. */
       
  1735 inline TBool TOpenFontFaceAttribBase::IsBold() const
       
  1736 	{
       
  1737 	return iStyle & EBold;
       
  1738 	}
       
  1739 
       
  1740 /** Tests if the typeface is inherently italic.
       
  1741 
       
  1742 @return ETrue if the typeface is inherently italic. */
       
  1743 inline TBool TOpenFontFaceAttribBase::IsItalic() const
       
  1744 	{
       
  1745 	return iStyle & EItalic;
       
  1746 	}
       
  1747 
       
  1748 /** Tests if the typeface has serifs.
       
  1749 
       
  1750 @return ETrue if the typeface has serifs. */
       
  1751 inline TBool TOpenFontFaceAttribBase::IsSerif() const
       
  1752 	{
       
  1753 	return iStyle & ESerif;
       
  1754 	}
       
  1755 
       
  1756 /** Tests if all the characters have the same width.
       
  1757 
       
  1758 @return ETrue if all the characters have the same width. */
       
  1759 inline TBool TOpenFontFaceAttribBase::IsMonoWidth() const
       
  1760 	{
       
  1761 	return iStyle & EMonoWidth;
       
  1762 	}
       
  1763 
       
  1764 /** Gets the typeface's name.
       
  1765 
       
  1766 @return Descriptor containing typeface name. */
       
  1767 inline TPtrC TOpenFontFaceAttribBase::Name() const
       
  1768 	{
       
  1769 	return iName;
       
  1770 	}
       
  1771 
       
  1772 /** Gets the full name.
       
  1773 
       
  1774 The full name of the typeface includes style attributes like Italic, Bold, 
       
  1775 and Cursive.
       
  1776 
       
  1777 @return The full name of the typeface.
       
  1778 @see FamilyName() */
       
  1779 inline TPtrC TOpenFontFaceAttrib::FullName() const
       
  1780 	{
       
  1781 	return Name();
       
  1782 	}
       
  1783 
       
  1784 /** Gets the family name.
       
  1785 
       
  1786 Note: The family name of the typeface does not include style attributes like 
       
  1787 "Italic".
       
  1788 
       
  1789 @return The family name of the typeface. 
       
  1790 @see FullName() */
       
  1791 inline TPtrC TOpenFontFaceAttrib::FamilyName() const
       
  1792 	{
       
  1793 	return iFamilyName;
       
  1794 	}
       
  1795 
       
  1796 /** Gets the local full name.
       
  1797 
       
  1798 The local full name of the typeface includes style attributes like Italic, 
       
  1799 Bold, and Cursive.
       
  1800 
       
  1801 The local name of the typeface is the name in the language of the current 
       
  1802 locale, where this is provided by the font file. If the local name is not 
       
  1803 available then the local name will be the same as the ordinary name.
       
  1804 
       
  1805 @return The local full name of the typeface. */
       
  1806 inline TPtrC TOpenFontFaceAttrib::LocalFullName() const
       
  1807 	{
       
  1808 	return iLocalFullName;
       
  1809 	}
       
  1810 
       
  1811 /** Gets the local family name.
       
  1812 
       
  1813 The local name of the typeface is the name in the language of the current 
       
  1814 locale, where this is provided by the font file. If the local name is not 
       
  1815 available then the local name will be the same as the ordinary name.
       
  1816 
       
  1817 Note: The family name of the typeface does not include style attributes like 
       
  1818 'Italic'.
       
  1819 
       
  1820 @return The local family name of the typeface. */
       
  1821 inline TPtrC TOpenFontFaceAttrib::LocalFamilyName() const
       
  1822 	{
       
  1823 	return iLocalFamilyName;
       
  1824 	}
       
  1825 
       
  1826 /** Gets the short full name.
       
  1827 
       
  1828 This is the full name of the typeface, truncated to KMaxTypefaceNameLength, 
       
  1829 if necessary.
       
  1830 
       
  1831 Note: Short names are names truncated to KMaxTypefaceNameLength (24) characters 
       
  1832 where necessary so that they can be used in the TTypeFace class. The Open 
       
  1833 Font Framework allows 32 characters as a maximum name length.
       
  1834 
       
  1835 @return The short full name of the typeface.
       
  1836 @see FullName() */
       
  1837 inline TPtrC TOpenFontFaceAttrib::ShortFullName() const
       
  1838 	{
       
  1839 	// Can't use TDesC::Left for this because it panics if the desired length is > the existing length!
       
  1840 	return TPtrC(iName.Ptr(),Min(iName.Length(),KMaxTypefaceNameLength));
       
  1841 	}
       
  1842 
       
  1843 /** Gets the short family name.
       
  1844 
       
  1845 This is the family name, truncated to KMaxTypefaceNameLength, if necessary.
       
  1846 
       
  1847 Note: Short names are names truncated to KMaxTypefaceNameLength (24) characters 
       
  1848 where necessary so that they can be used in the TTypeFace class. The Open 
       
  1849 Font Framework allows 32 characters as a maximum name length.
       
  1850 
       
  1851 @return The short family name of the typeface. 
       
  1852 @see FamilyName() */
       
  1853 inline TPtrC TOpenFontFaceAttrib::ShortFamilyName() const
       
  1854 	{
       
  1855 	return TPtrC(iFamilyName.Ptr(),Min(iFamilyName.Length(),KMaxTypefaceNameLength));
       
  1856 	}
       
  1857 
       
  1858 /** Gets the short local full name.
       
  1859 
       
  1860 This is the local full name of the typeface, truncated to KMaxTypefaceNameLength, 
       
  1861 if necessary.
       
  1862 
       
  1863 Note: Short names are names truncated to KMaxTypefaceNameLength (24) characters 
       
  1864 where necessary so that they can be used in the TTypeFace class. The Open 
       
  1865 Font Framework allows 32 characters as a maximum name length.
       
  1866 
       
  1867 @return The short local full name of the typeface. 
       
  1868 @see LocalFullName() */
       
  1869 inline TPtrC TOpenFontFaceAttrib::ShortLocalFullName() const
       
  1870 	{
       
  1871 	return TPtrC(iLocalFullName.Ptr(),Min(iLocalFullName.Length(),KMaxTypefaceNameLength));
       
  1872 	}
       
  1873 
       
  1874 /** Gets the short local family name.
       
  1875 
       
  1876 This is the local family name of the typeface, truncated to KMaxTypefaceNameLength, 
       
  1877 if necessary.
       
  1878 
       
  1879 Note: Short names are names truncated to KMaxTypefaceNameLength (24) characters 
       
  1880 where necessary so that they can be used in the TTypeFace class. The Open 
       
  1881 Font Framework allows 32 characters as a maximum name length.
       
  1882 
       
  1883 @return The short local family name of the typeface.
       
  1884 @see LocalFamilyName() */
       
  1885 inline TPtrC TOpenFontFaceAttrib::ShortLocalFamilyName() const
       
  1886 	{
       
  1887 	return TPtrC(iLocalFamilyName.Ptr(),Min(iLocalFamilyName.Length(),KMaxTypefaceNameLength));
       
  1888 	}
       
  1889 
       
  1890 /** Gets a pointer to the sets of flags that indicate the font's Unicode coverage.
       
  1891 
       
  1892 Each flag that is set represents a supported Unicode range. The mapping is 
       
  1893 defined in the TrueType documentation under the OS/2 table. 
       
  1894 
       
  1895 Note: Some useful subsets are defined as anonymous enumerated constants at the end 
       
  1896 of this class, see ELatinSet etc.
       
  1897 
       
  1898 @return A pointer to the flags that indicate the font's Unicode coverage. 
       
  1899 The flags are stored in an array of four 32-bit integers. When no information 
       
  1900 is available, all four integers are zero.
       
  1901 @see SetCoverage() */
       
  1902 inline const TUint* TOpenFontFaceAttribBase::Coverage() const
       
  1903 	{
       
  1904 	return iCoverage;
       
  1905 	}
       
  1906 
       
  1907 /** Gets the minimum typeface size.
       
  1908 
       
  1909 This is the smallest size that can be drawn legibly.
       
  1910 
       
  1911 @return The minimum typeface size (in pixels). */
       
  1912 inline TInt TOpenFontFaceAttrib::MinSizeInPixels() const
       
  1913 	{
       
  1914 	return iMinSizeInPixels;
       
  1915 	}
       
  1916 
       
  1917 /** Sets the name attribute.
       
  1918 
       
  1919 @param aName Descriptor containing typeface name. */
       
  1920 inline void TOpenFontFaceAttribBase::SetName(const TDesC& aName)
       
  1921 	{
       
  1922 	iName = TPtrC(aName.Ptr(),Min(aName.Length(),(TInt)ENameLength));
       
  1923 	}
       
  1924 
       
  1925 /** Sets the full name.
       
  1926 
       
  1927 @param aName The full name of the typeface.
       
  1928 @see FullName() */
       
  1929 inline void TOpenFontFaceAttrib::SetFullName(const TDesC& aName)
       
  1930 	{
       
  1931 	SetName(aName);
       
  1932 	}
       
  1933 
       
  1934 /** Sets the family name.
       
  1935 
       
  1936 @param aName The family name of the typeface. 
       
  1937 @see FamilyName() */
       
  1938 inline void TOpenFontFaceAttrib::SetFamilyName(const TDesC& aName)
       
  1939 	{
       
  1940 	iFamilyName = TPtrC(aName.Ptr(),Min(aName.Length(),(TInt)ENameLength));
       
  1941 	}
       
  1942 
       
  1943 /** Sets the local full name.
       
  1944 
       
  1945 @param aName The local full name of the typeface. 
       
  1946 @see LocalFullName() */
       
  1947 inline void TOpenFontFaceAttrib::SetLocalFullName(const TDesC& aName)
       
  1948 	{
       
  1949 	iLocalFullName = TPtrC(aName.Ptr(),Min(aName.Length(),(TInt)ENameLength));
       
  1950 	}
       
  1951 
       
  1952 /** Sets the local family name.
       
  1953 
       
  1954 @param aName The local family name of the typeface. 
       
  1955 @see LocalFamilyName() */
       
  1956 inline void TOpenFontFaceAttrib::SetLocalFamilyName(const TDesC& aName)
       
  1957 	{
       
  1958 	iLocalFamilyName = TPtrC(aName.Ptr(),Min(aName.Length(),(TInt)ENameLength));
       
  1959 	}
       
  1960 
       
  1961 /** Sets the coverage flags.
       
  1962 
       
  1963 The flags are held in four 32 bit integers. Each flag that is set represents 
       
  1964 a range of Unicode characters that is supported by the typeface: Latin, 
       
  1965 Greek, Cyrillic etc. The mapping is defined in the TrueType documentation 
       
  1966 under the OS/2 table.
       
  1967 
       
  1968 Note: Some useful subsets are defined as anonymous enumerated constants at 
       
  1969 the end of this class, see ELatinSet etc.
       
  1970 
       
  1971 @param aCoverage0 The first set of coverage flags (bits 0-31).
       
  1972 @param aCoverage1 The second set of coverage flags (bits 32-63).
       
  1973 @param aCoverage2 The third set of coverage flags (bits 64-95). 
       
  1974 @param aCoverage3 The fourth set of coverage flags (bits 96-127). */
       
  1975 inline void TOpenFontFaceAttribBase::SetCoverage(TUint aCoverage0,TUint aCoverage1,TUint aCoverage2,TUint aCoverage3)
       
  1976 	{
       
  1977 	iCoverage[0] = aCoverage0;
       
  1978 	iCoverage[1] = aCoverage1;
       
  1979 	iCoverage[2] = aCoverage2;
       
  1980 	iCoverage[3] = aCoverage3;
       
  1981 	}
       
  1982 
       
  1983 /** Set the minimum typeface size.
       
  1984 
       
  1985 This is the smallest size that can be drawn legibly.
       
  1986 
       
  1987 @param aSize Sets the minimum typeface size (in pixels). 
       
  1988 @see MinSizeInPixels() */
       
  1989 inline void TOpenFontFaceAttrib::SetMinSizeInPixels(TInt aSize)
       
  1990 	{
       
  1991 	iMinSizeInPixels = aSize;
       
  1992 	}
       
  1993 
       
  1994 /** Equality operator.
       
  1995 
       
  1996 Compares this and another set of font attributes, including the coverage, 
       
  1997 the family name, the local full name, the local family name, and the minimum 
       
  1998 size in pixels.
       
  1999 
       
  2000 @param aAttrib Contains the font attributes and names to compare.
       
  2001 @return ETrue if all values are equal, EFalse if not. */
       
  2002 inline TBool TOpenFontFaceAttrib::operator==(const TOpenFontFaceAttrib& aAttrib) const
       
  2003 	{
       
  2004 	return TOpenFontFaceAttribBase::operator==(aAttrib) &&
       
  2005 		   iFamilyName == aAttrib.iFamilyName &&
       
  2006 		   iLocalFullName == aAttrib.iLocalFullName &&
       
  2007 		   iLocalFamilyName == aAttrib.iLocalFamilyName &&
       
  2008 		   iMinSizeInPixels == aAttrib.iMinSizeInPixels;
       
  2009 	}
       
  2010 
       
  2011 /** Sets the bold attribute.
       
  2012 
       
  2013 @param aBold The bold attribute takes this value: ETrue or EFalse. */
       
  2014 inline void TOpenFontFaceAttribBase::SetBold(TBool aBold)
       
  2015 	{
       
  2016 	if (aBold)
       
  2017 		iStyle |= EBold;
       
  2018 	else
       
  2019 		iStyle &= ~EBold;
       
  2020 	}
       
  2021 
       
  2022 /** Sets the italic attribute.
       
  2023 
       
  2024 @param aItalic The italic attribute takes this value   ETrue or EFalse. */
       
  2025 inline void TOpenFontFaceAttribBase::SetItalic(TBool aItalic)
       
  2026 	{
       
  2027 	if (aItalic)
       
  2028 		iStyle |= EItalic;
       
  2029 	else
       
  2030 		iStyle &= ~EItalic;
       
  2031 	}
       
  2032 
       
  2033 /** Sets the serif attribute.
       
  2034 
       
  2035 @param aSerif The serif attribute takes this value  ETrue or EFalse. */
       
  2036 inline void TOpenFontFaceAttribBase::SetSerif(TBool aSerif)
       
  2037 	{
       
  2038 	if (aSerif)
       
  2039 		iStyle |= ESerif;
       
  2040 	else
       
  2041 		iStyle &= ~ESerif;
       
  2042 	}
       
  2043 
       
  2044 /** Sets the mono-width attribute.
       
  2045 
       
  2046 @param aMonoWidth The mono-width attribute takes this value: ETrue or EFalse. */
       
  2047 inline void TOpenFontFaceAttribBase::SetMonoWidth(TBool aMonoWidth)
       
  2048 	{
       
  2049 	if (aMonoWidth)
       
  2050 		iStyle |= EMonoWidth;
       
  2051 	else
       
  2052 		iStyle &= ~EMonoWidth;
       
  2053 	}
       
  2054 
       
  2055 /** Equality operator. 
       
  2056 
       
  2057 Compares this and a specified set of font attributes, including the coverage 
       
  2058 and the typeface name.
       
  2059 
       
  2060 In version 6.1, and earlier, the return value was TInt.
       
  2061 
       
  2062 @param aAttrib The font attributes to compare. This is an object of TOpenFontFaceAttribBase 
       
  2063 or of a derived class. 
       
  2064 @return ETrue if the values are equal. */
       
  2065 inline TBool TOpenFontFaceAttribBase::operator==(const TOpenFontFaceAttribBase& aAttrib) const
       
  2066 	{
       
  2067 	return iStyle == aAttrib.iStyle &&
       
  2068 		   iCoverage[0] == aAttrib.iCoverage[0] &&
       
  2069 		   iCoverage[1] == aAttrib.iCoverage[1] &&
       
  2070 		   iCoverage[2] == aAttrib.iCoverage[2] &&
       
  2071 		   iCoverage[3] == aAttrib.iCoverage[3] &&
       
  2072 		   iName.CompareF(aAttrib.iName) == 0;
       
  2073 	}
       
  2074 
       
  2075 /** Compares this and another open font specification. Compares all the properties 
       
  2076 of the two fonts.
       
  2077 @publishedAll
       
  2078 @released
       
  2079 @param aFontSpec The open font specification to compare with this one.
       
  2080 @return ETrue if all values are equal, EFalse if not.
       
  2081 */
       
  2082 inline TBool TOpenFontSpec::operator==(const TOpenFontSpec& aOpenFontSpec) const
       
  2083 	{
       
  2084 	return
       
  2085 		iHeight			== aOpenFontSpec.iHeight &&
       
  2086 		iWidthFactor	== aOpenFontSpec.iWidthFactor &&
       
  2087 		iSlantFactor	== aOpenFontSpec.iSlantFactor &&
       
  2088 		iBitmapType		== aOpenFontSpec.iBitmapType &&
       
  2089 		iEffects		== aOpenFontSpec.iEffects &&
       
  2090 		iSymbol			== aOpenFontSpec.iSymbol &&
       
  2091 		iPrintPosition	== aOpenFontSpec.iPrintPosition &&
       
  2092 		TOpenFontFaceAttribBase::operator==(aOpenFontSpec);
       
  2093 	}
       
  2094 
       
  2095 /** Gets the height of the font.
       
  2096 
       
  2097 @return The height of the font, in pixels or twips. 
       
  2098 @see SetHeight() */
       
  2099 inline TInt TOpenFontSpec::Height() const
       
  2100 	{
       
  2101 	return iHeight;
       
  2102 	}
       
  2103 
       
  2104 /** Gets the algorithmic width factor.
       
  2105 
       
  2106 @return The algorithmic width factor as a 16.16 fixed-point number.
       
  2107 @see SetWidthFactor() */
       
  2108 inline TInt32 TOpenFontSpec::WidthFactor() const
       
  2109 	{
       
  2110 	return iWidthFactor;
       
  2111 	}
       
  2112 
       
  2113 /** Gets the algorithmic slant factor.
       
  2114 
       
  2115 @return The algorithmic slant factor as a 16.16 fixed-point number.
       
  2116 @see SetSlantFactor() */
       
  2117 inline TInt32 TOpenFontSpec::SlantFactor() const
       
  2118 	{
       
  2119 	return iSlantFactor;
       
  2120 	}
       
  2121 
       
  2122 /** Gets the anti-aliasing setting for the font, as set by SetBitmapType().
       
  2123 
       
  2124 @return Indicates whether or not the font should be drawn using anti-aliasing. */
       
  2125 inline TGlyphBitmapType TOpenFontSpec::BitmapType() const
       
  2126 	{
       
  2127 	return (TGlyphBitmapType)iBitmapType;
       
  2128 	}
       
  2129 
       
  2130 /** Gets the font effects flags.
       
  2131 Because the flags encoded in the Effects are anonymous, the return value should only
       
  2132  be tested for the specific bits that are of interest, and never tested as a whole.
       
  2133 @publishedAll
       
  2134 @released
       
  2135 @return The font effects flags.
       
  2136 @see TOpenFontSpec::SetEffects()
       
  2137 */
       
  2138 inline TUint32 TOpenFontSpec::Effects() const
       
  2139 	{
       
  2140 	return iEffects;
       
  2141 	}
       
  2142 
       
  2143 /** Gets the print position.
       
  2144 
       
  2145 @return The print position. */
       
  2146 inline TFontPrintPosition TOpenFontSpec::PrintPosition() const
       
  2147 	{
       
  2148 	return iPrintPosition;
       
  2149 	}
       
  2150 
       
  2151 /** Sets the font's height.
       
  2152 
       
  2153 @param aHeight The font's height, in pixels or twips.
       
  2154 @see Height() */
       
  2155 inline void TOpenFontSpec::SetHeight(TInt aHeight)
       
  2156 	{
       
  2157 	iHeight = aHeight;
       
  2158 	}
       
  2159 
       
  2160 /** Sets the algorithmic width factor.
       
  2161 
       
  2162 The width factor is multiplied by the pixel's x position to get the new position, 
       
  2163 causing characters to become wider or narrower. A width factor of 1 (65536 
       
  2164 in 16.16 fixed-point number format) should be used if the character width 
       
  2165 is not to be changed.
       
  2166 
       
  2167 @param aWidthFactor The algorithmic width factor as a 16.16 fixed-point number.
       
  2168 @see WidthFactor() */
       
  2169 inline void TOpenFontSpec::SetWidthFactor(TInt32 aWidthFactor)
       
  2170 	{
       
  2171 	iWidthFactor = aWidthFactor;
       
  2172 	}
       
  2173 
       
  2174 /** Sets the algorithmic slant factor.
       
  2175 
       
  2176 Note: The slant factor is used to create an italic effect for characters which 
       
  2177 do not have an italic glyph in the typeface. When slanting is active, pixel x 
       
  2178 co-ordinates are shifted by a factor relative to the y co-ordinate (i.e. x 
       
  2179 = x + y x slant factor).
       
  2180 
       
  2181 The slant factor is a 32 bit, 16.16 fixed-point number. This means that the 
       
  2182 first 16 bits are treated as a whole number, and the second 16 as the fractional 
       
  2183 part. e.g. if aSlantFactor=0, there is no slant. If aSlantFactor=65536 this 
       
  2184 is equivalent to an integer slant value of 1, which causes a 45 degree slant 
       
  2185 on the character.
       
  2186 
       
  2187 @param aSlantFactor The slant factor as a 16.16 fixed-point number.
       
  2188 @see SlantFactor() */
       
  2189 inline void TOpenFontSpec::SetSlantFactor(TInt32 aSlantFactor)
       
  2190 	{
       
  2191 	iSlantFactor = aSlantFactor;
       
  2192 	}
       
  2193 
       
  2194 /** Sets whether the font should be drawn using anti-aliasing. If set, this value 
       
  2195 overrides the default setting (set by CFbsTypefaceStore::SetDefaultBitmapType()) 
       
  2196 for this font.
       
  2197 
       
  2198 Anti-aliasing can only be used for scalable fonts. There is currently no anti-aliasing 
       
  2199 support for bitmapped fonts.
       
  2200 
       
  2201 @param aBitmapType Indicates whether or not the font should be drawn using 
       
  2202 anti-aliasing. */
       
  2203 inline void TOpenFontSpec::SetBitmapType(TGlyphBitmapType aBitmapType)
       
  2204 	{
       
  2205 	iBitmapType = aBitmapType;
       
  2206 	}
       
  2207 
       
  2208 /** Sets the font effects flags.
       
  2209 Prior to calling this routine, the value from Effects() should be read,
       
  2210  and its flags modified as required, before passing them back in.
       
  2211 @publishedAll
       
  2212 @released
       
  2213 @param aEffect The font effects flags to be set.
       
  2214 @see TOpenFontSpec::Effects()
       
  2215 */
       
  2216 inline void TOpenFontSpec::SetEffects(TUint32 aEffects)
       
  2217 	{
       
  2218 	iEffects = aEffects;
       
  2219 	}
       
  2220 
       
  2221 /** Gets the font file's UID.
       
  2222 
       
  2223 @return The uid of the file. */
       
  2224 inline TUid COpenFontFile::Uid() const
       
  2225 	{
       
  2226 	return iUid;
       
  2227 	}
       
  2228 
       
  2229 /** Gets the full path and filename of the font file
       
  2230 
       
  2231 This is the filename that was passed to the constructor when the object is 
       
  2232 created.
       
  2233 
       
  2234 @return The filename of the font file. */
       
  2235 inline const TDesC& COpenFontFile::FileName() const
       
  2236 	{
       
  2237 	return iFileName;
       
  2238 	}
       
  2239 
       
  2240 /** Gets the typeface at a specified index in the typeface attribute array.
       
  2241 
       
  2242 @param aFaceIndex The index of the typeface for which the attributes are required.
       
  2243 @return The attributes of the typeface with the specified index.
       
  2244 @see AddFaceL()
       
  2245 @see FaceCount() */
       
  2246 inline const TOpenFontFaceAttrib& COpenFontFile::FaceAttrib(TInt aFaceIndex) const
       
  2247 	{
       
  2248 	return iFaceAttrib[aFaceIndex];
       
  2249 	}
       
  2250 
       
  2251 /** Gets the number of typefaces in the typeface attributes array.
       
  2252 
       
  2253 This is the number of typefaces in the font file: the attributes for each 
       
  2254 typeface should be loaded into the array when the derived object is constructed.
       
  2255 
       
  2256 @return The number of typefaces in the font file.
       
  2257 @see AddFaceL()
       
  2258 @see FaceAttrib() */
       
  2259 inline TInt COpenFontFile::FaceCount() const
       
  2260 	{
       
  2261 	return iFaceAttrib.Count();
       
  2262 	}
       
  2263 
       
  2264 /** Increments a reference count by one.
       
  2265 
       
  2266 @see DecRefCount() */
       
  2267 inline void COpenFontFile::IncRefCount()
       
  2268 	{
       
  2269 	iRefCount++;
       
  2270 	}
       
  2271 
       
  2272 /** Decrement a reference count by one.
       
  2273 
       
  2274 @return ETrue if the reference count has reached zero (i.e. is less than or 
       
  2275 equal to zero); EFalse if the reference count has not yet reached zero (i.e. 
       
  2276 is positive).
       
  2277 @see IncRefCount() */
       
  2278 inline TBool COpenFontFile::DecRefCount()
       
  2279 	{
       
  2280 	iRefCount--;
       
  2281 	return iRefCount <= 0;
       
  2282 	}
       
  2283 
       
  2284 /** Default C++ constructor. */
       
  2285 inline COpenFontRasterizerContext::COpenFontRasterizerContext():
       
  2286 	iGlyphData(NULL)
       
  2287 	{
       
  2288 	}
       
  2289 
       
  2290 /** Start writing the glyph data.
       
  2291 
       
  2292 Use this function to initialise the buffer to which the glyph bitmap is to 
       
  2293 be written. Call WriteGlyphBit() to add bits to the buffer.
       
  2294 
       
  2295 @param aGlyphData A pointer to the glyph data. */
       
  2296 inline void COpenFontRasterizerContext::StartGlyph(TOpenFontGlyphData* aGlyphData)
       
  2297 	{
       
  2298 	aGlyphData->SetPointersToInternalBuffers();
       
  2299 	iGlyphData = aGlyphData;
       
  2300 	iGlyphDataStart = iGlyphDataPtr = aGlyphData->BufferStart();
       
  2301 	// Allow 4 extra bytes; BITGDI requires this.
       
  2302 	iGlyphDataEnd = aGlyphData->BufferEnd() - 4;
       
  2303 	iGlyphBit = 1;
       
  2304 	*iGlyphDataPtr = 0;
       
  2305 	iBytesNeeded = 1;
       
  2306 	iOverflow = FALSE;
       
  2307 	}
       
  2308 
       
  2309 /** Writes a bit to the glyph buffer.
       
  2310 
       
  2311 Before calling this function you should first call StartGlyph().
       
  2312 
       
  2313 @param aBit The bit to be added to the buffer. */
       
  2314 inline void COpenFontRasterizerContext::WriteGlyphBit(TInt aBit)
       
  2315 	{
       
  2316 	if (aBit && !iOverflow)
       
  2317 		*iGlyphDataPtr |= iGlyphBit;
       
  2318 	iGlyphBit <<= 1;
       
  2319 	if (iGlyphBit == 256)
       
  2320 		{
       
  2321 		iGlyphBit = 1;
       
  2322 		iBytesNeeded++;
       
  2323 		if (++iGlyphDataPtr < iGlyphDataEnd)
       
  2324 			*iGlyphDataPtr = 0;
       
  2325 		else
       
  2326 			iOverflow = TRUE;
       
  2327 		}
       
  2328 	}
       
  2329 
       
  2330 /** Writes a byte to the glyph buffer.
       
  2331 
       
  2332 Before calling this function you should first call StartGlyph().
       
  2333 
       
  2334 @param aByte The byte to be added to the buffer. */	
       
  2335 inline void COpenFontRasterizerContext::WriteGlyphByte(TInt aByte)
       
  2336  	{
       
  2337 	if (iGlyphDataPtr < iGlyphDataEnd)
       
  2338 		*iGlyphDataPtr++ = (TUint8)aByte;
       
  2339 	else
       
  2340 		iOverflow = TRUE;
       
  2341 	iBytesNeeded++;
       
  2342 	}
       
  2343 
       
  2344 /** Completes writing glyph data.
       
  2345 
       
  2346 Use this function to complete writing the glyph bitmap to the buffer. Call 
       
  2347 it after adding all necessary bits using WriteGlyphBit(). */
       
  2348 inline void COpenFontRasterizerContext::EndGlyph()
       
  2349 	{
       
  2350 	// Add 4 bytes to the data size; some BITGDI functions require this.
       
  2351 	iGlyphData->SetBytesNeeded(iBytesNeeded + 4);
       
  2352 	iGlyphData = NULL;
       
  2353 	}
       
  2354 
       
  2355 /** Tests whether the bitmap buffer is large enough to hold the bitmap.
       
  2356 
       
  2357 @return ETrue if the bitmap will overflow its buffer, otherwise EFalse. */
       
  2358 inline TBool TOpenFontGlyphData::Overflow() const
       
  2359 	{
       
  2360 	return iBytesNeeded > iBitmapBufferSize;
       
  2361 	}
       
  2362 
       
  2363 /** Gets the number of bytes needed to store the glyph bitmap.
       
  2364 
       
  2365 @return The number of bytes needed to store the glyph bitmap.
       
  2366 @see SetBytesNeeded() */
       
  2367 inline TInt TOpenFontGlyphData::BytesNeeded() const
       
  2368 	{
       
  2369 	return iBytesNeeded;
       
  2370 	}
       
  2371 
       
  2372 /** Gets a constant pointer descriptor containing the bitmap this object 
       
  2373 represents. 
       
  2374 
       
  2375 @return Pointer descriptor for the glyph. */
       
  2376 inline TPtrC8 TOpenFontGlyphData::Bitmap() const
       
  2377 	{
       
  2378 	return TPtrC8(iBitmap,iBytesNeeded);
       
  2379 	}
       
  2380 
       
  2381 /** Gets a pointer to the bitmap.
       
  2382 
       
  2383 This points either to the buffer used to write the bitmap when it is first 
       
  2384 rasterized, or to the cache if the character was already rasterized.
       
  2385 
       
  2386 @return A pointer to the bitmap. */
       
  2387 inline const TUint8* TOpenFontGlyphData::BitmapPointer() const
       
  2388 	{
       
  2389 	return iBitmap;
       
  2390 	}
       
  2391 
       
  2392 /** Gets the character's metrics.
       
  2393 
       
  2394 @return The character's open font metrics. */
       
  2395 inline const TOpenFontCharMetrics* TOpenFontGlyphData::Metrics() const
       
  2396 	{
       
  2397 	return iMetrics;
       
  2398 	}
       
  2399 
       
  2400 /** Gets a pointer to the start of the bitmap buffer.
       
  2401 
       
  2402 @return A pointer to the start of the bitmap buffer. */
       
  2403 inline TUint8* TOpenFontGlyphData::BufferStart()
       
  2404 	{
       
  2405 	return iBitmapBuffer;
       
  2406 	}
       
  2407 
       
  2408 /** Gets a pointer to the end of the bitmap buffer.
       
  2409 
       
  2410 @return A pointer to the end of the bitmap buffer. */
       
  2411 inline TUint8* TOpenFontGlyphData::BufferEnd()
       
  2412 	{
       
  2413 	return iBitmapBuffer + iBitmapBufferSize;
       
  2414 	}
       
  2415 
       
  2416 /** Sets the number of bytes needed to store the glyph bitmap.
       
  2417 
       
  2418 @param aBytes The number of bytes needed to store the glyph bitmap.
       
  2419 @see BytesNeeded() */
       
  2420 inline void TOpenFontGlyphData::SetBytesNeeded(TInt aBytes)
       
  2421 	{
       
  2422 	iBytesNeeded = aBytes;
       
  2423 	}
       
  2424 
       
  2425 /** Sets the pointer to the bitmap buffer.
       
  2426 
       
  2427 @param aBitmap The pointer to the bitmap buffer. */
       
  2428 inline void TOpenFontGlyphData::SetBitmapPointer(const TUint8* aBitmap)
       
  2429 	{
       
  2430 	iBitmap = aBitmap;
       
  2431 	}
       
  2432 
       
  2433 /** Sets the character's metrics, passing a pointer to a TOpenFontCharMetrics object.
       
  2434 
       
  2435 @param aMetrics A pointer to the character's open font character metrics. */
       
  2436 inline void TOpenFontGlyphData::SetMetricsPointer(const TOpenFontCharMetrics* aMetrics)
       
  2437 	{
       
  2438 	iMetrics = aMetrics;
       
  2439 	}
       
  2440 
       
  2441 /** Sets the bitmap and metrics pointers to point to the internal buffers.
       
  2442 
       
  2443 The alternative is that the pointers point to the cache of metrics and bitmaps 
       
  2444 that have already been rasterized. */
       
  2445 inline void TOpenFontGlyphData::SetPointersToInternalBuffers()
       
  2446 	{
       
  2447 	iBitmap = iBitmapBuffer;
       
  2448 	iMetrics = &iMetricsBuffer;
       
  2449 	}
       
  2450 
       
  2451 /** Sets the character's metrics, passing a reference to a TOpenFontCharMetrics 
       
  2452 object.
       
  2453 
       
  2454 @param	aMetrics	The character's open font character metrics. */
       
  2455 inline void TOpenFontGlyphData::SetMetrics(TOpenFontCharMetrics& aMetrics)
       
  2456 	{
       
  2457 	iMetricsBuffer = aMetrics;
       
  2458 	iMetrics = &iMetricsBuffer;
       
  2459 	}
       
  2460 
       
  2461 /** Sets the glyph index.
       
  2462 
       
  2463 @param	aGlyphIndex	The glyph index. */
       
  2464 inline void TOpenFontGlyphData::SetGlyphIndex(TInt aGlyphIndex)
       
  2465 	{
       
  2466 	iGlyphIndex = aGlyphIndex;
       
  2467 	}
       
  2468 
       
  2469 /** Uses ECOM plug-in framework to instantiate the shaper factory interface 
       
  2470 implementation given its implementation UID. 
       
  2471 
       
  2472 @param	aInterfaceImplUid	The UID of the interface implementation required
       
  2473 
       
  2474 @return	CShaperFactory*	A pointer to a CShaperFactory object. */
       
  2475 inline CShaperFactory* CShaperFactory::NewL(TUid aInterfaceImplUid)
       
  2476 	{
       
  2477 	return reinterpret_cast <CShaperFactory*> (
       
  2478 		REComSession::CreateImplementationL( 
       
  2479 			aInterfaceImplUid,
       
  2480 			_FOFF(CShaperFactory, iDtor_ID_Key))); 
       
  2481 	}
       
  2482 
       
  2483 /** Default destructor */
       
  2484 inline CShaperFactory::~CShaperFactory()
       
  2485 {
       
  2486 	REComSession::DestroyedImplementation(iDtor_ID_Key);
       
  2487 }
       
  2488 
       
  2489 #endif	// __OPENFONT_H__