/*
* Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description:
* A header for the open font system, which allows SymbianOS
* to use fonts of arbitrary types, including TrueType/OpenType
* and other outline font formats.
*
*/
#ifndef __OPENFONT_H__
#define __OPENFONT_H__
#include <e32base.h>
#include <gdi.h>
#include <ecom/ecom.h>
#ifndef SYMBIAN_ENABLE_SPLIT_HEADERS
#include <linkedfonts.h>
#include <graphics/openfontconstants.h>
#include <graphics/openfontrasterizer.h>
#include <openfontlinkedtypefaceelementspec.h>
#include <graphics/openfontlinkedtypefacespecification.h>
#include <graphics/openfontlinkedtypefaceextension.h>
#endif
class CFont;
class COpenFontFile;
class COpenFontGlyph;
class COpenFontGlyphCache;
class COpenFontGlyphTreeEntry;
class COpenFontPositioner;
class COpenFontSessionCache;
class COpenFontSessionCacheList;
class RFs;
class TCharacterMetrics;
class TFontSpec;
class TOpenFontFaceAttrib;
class CFontStore;
class TOpenFontFileData;
class TShapeHeader;
class CBitmapFont;
class CShaperFactory;
class CShaper;
class TShapeHeader;
class TFontShapeFunctionParameters;
class TFontShapeDeleteFunctionParameters;
class RShapeInfo;
class TShapeMessageParameters;
class CRasterizerLinkedTypefaceSpecification;
class TLinkedTypefaceSpecificationArgs;
/**
Supplied to COpenFont::ExtendedInterface() to access the extended
API interface MOpenFontShapingExtension.
@see COpenFont::ExtendedInterface()
@see MOpenFontShapingExtension
@publishedAll
@released
*/
const TUid KUidOpenFontShapingExtension = {0x10274DB9};
/**
Supplied to COpenFont::ExtendedInterface() to access the extended
API interface MOpenFontTrueTypeExtension.
@see COpenFont::ExtendedInterface()
@see MOpenFontTrueTypeExtension
@publishedAll
@released
*/
const TUid KUidOpenFontTrueTypeExtension = {0x1027553E};
/**
Supplied to CShaper::ExtendedInterface() to get the language and script
code with which the current shaper is instatsiated.
@see CShaper::ExtendedInterface()
@publishedAll
@released
*/
const TUid KUidShaperGetScript = {0x20009966};
const TUid KUidShaperGetLang = {0x20009967};
/**
Font metrics.
@see CFbsFont::GetFontMetrics()
@publishedAll
@released
*/
class TOpenFontMetrics
{
public:
inline TOpenFontMetrics();
IMPORT_C TOpenFontMetrics(const CFont* aFont);
inline TInt Size() const;
inline TInt Ascent() const;
inline TInt Descent() const;
inline TInt MaxHeight() const;
inline TInt MaxDepth() const;
inline TInt MaxWidth() const;
inline void SetSize(TInt aSize);
inline void SetAscent(TInt aAscent);
inline void SetDescent(TInt aDescent);
inline void SetMaxHeight(TInt aMaxHeight);
inline void SetMaxDepth(TInt aMaxDepth);
inline void SetMaxWidth(TInt aMaxWidth);
/** WARNING: Function for internal and partner use ONLY. Compatibility is not guaranteed in future releases.*/
IMPORT_C void SetBaselineCorrection(TInt aBaselineCorrection);
IMPORT_C TInt BaselineCorrection();
private:
TInt16 iDesignHeight; // size of the font ('pointsize' in pixels)
TInt16 iAscent; // typographic ascent
TInt16 iDescent; // typographic descent
TInt16 iMaxHeight; // maximum height of a character; may be greater than iAscent
TInt16 iMaxDepth; // maximum depth of a character; may be greater than iDescent
TInt16 iMaxWidth; // maximum width of a character
TInt16 iBaselineCorrection;
TInt16 iReserved;
};
/**
Character metrics includes more information than TCharacterMetrics.
Character metrics allow characters to be placed horizontally or vertically.
The character metrics encapsulated by this class are: Height, Width, Horizontal
Bearing X, Horizontal Bearing Y, Horizontal Advance, Vertical Bearing X,
Vertical Bearing Y, and Vertical Advance. Their meanings are described in the
associated setter and getter functions.
Note :
Vertical drawing (in the sense of characters drawn with horizontal baselines,
but in a vertical line) is not yet supported by Symbian OS.
@see CFont::GetCharacterData()
@see CFbsFont::GetCharacterData()
@publishedAll
@released
*/
class TOpenFontCharMetrics
{
public:
enum TUninitialized { EUninitialized };
public:
/** Default constructor initializes all members to 0. */
inline TOpenFontCharMetrics();
/** Constructor that does not initialize any members. */
TOpenFontCharMetrics(TUninitialized) {}
IMPORT_C TOpenFontCharMetrics(const TCharacterMetrics& aMetrics);
IMPORT_C TBool GetTCharacterMetrics(TCharacterMetrics& aMetrics) const;
inline TInt Width() const;
inline TInt Height() const;
inline TInt HorizBearingX() const;
inline TInt HorizBearingY() const;
inline TInt HorizAdvance() const;
inline TInt VertBearingX() const;
inline TInt VertBearingY() const;
inline TInt VertAdvance() const;
inline void GetHorizBounds(TRect& aBounds) const;
inline void GetVertBounds(TRect& aBounds) const;
inline void SetWidth(TInt aWidth);
inline void SetHeight(TInt aHeight);
inline void SetHorizBearingX(TInt aHorizBearingX);
inline void SetHorizBearingY(TInt aHorizBearingY);
inline void SetHorizAdvance(TInt aHorizAdvance);
inline void SetVertBearingX(TInt aVertBearingX);
inline void SetVertBearingY(TInt aVertBearingY);
inline void SetVertAdvance(TInt aVertAdvance);
IMPORT_C void SetGlyphType(TGlyphBitmapType);
IMPORT_C TGlyphBitmapType GlyphType() const;
private:
TInt16 iWidth; // width of the glyph
TInt16 iHeight; // height of the glyph
TInt16 iHorizBearingX; // x component of horizontal bearing
TInt16 iHorizBearingY; // y component of horizontal bearing
TInt16 iHorizAdvance; // horizontal advance
TInt16 iVertBearingX; // x component of vertical bearing
TInt16 iVertBearingY; // y component of vertical bearing
TInt16 iVertAdvance; // vertical advance
TUint16 iGlyphBitmapType;// Glyph bitmap type; TGlyphBitmapType
TInt16 iReserved;
};
/**
Font glyph data.
Objects of this type are used by rasterizers to supply glyph data to font
and bitmap server clients. Unless you are writing a rasterizer you will not
need to use an object of this type.
The object cannot be constructed and destroyed by normal means. It resides
on a specified heap. It is created by New() and deleted by RHeap::Free().
@see COpenFont::RasterizeL()
@publishedAll
@released
*/
class TOpenFontGlyphData
{
public:
IMPORT_C static TOpenFontGlyphData* New(RHeap* aHeap,TInt aBufferSize);
inline TBool Overflow() const;
inline TInt BytesNeeded() const;
inline TPtrC8 Bitmap() const;
inline const TUint8* BitmapPointer() const;
inline const TOpenFontCharMetrics* Metrics() const;
inline TInt GlyphIndex() const;
inline TUint8* BufferStart();
inline TUint8* BufferEnd();
inline void SetBytesNeeded(TInt aBytes);
inline void SetBitmapPointer(const TUint8* aBitmap);
inline void SetMetricsPointer(const TOpenFontCharMetrics* aMetrics);
inline void SetPointersToInternalBuffers();
inline void SetMetrics(TOpenFontCharMetrics& aMetrics);
inline void SetGlyphIndex(TInt aGlyphIndex);
private:
/*
Prevent construction and destruction by normal means; the object resides
on a specified heap and is created by New and deleted by RHeap::Free.
*/
TOpenFontGlyphData();
~TOpenFontGlyphData();
private:
TInt iBitmapBufferSize; // size of the buffer in bytes
TInt iBytesNeeded; // bytes needed for the bitmap
TOpenFontCharMetrics iMetricsBuffer; // the metrics
const TUint8* iBitmap; // pointer to the bitmap; points either to iBitmapBuffer or to
// the cache if the character was already rasterized
const TOpenFontCharMetrics* iMetrics; // pointer to the metrics; points either to iMetricsBuffer or to
// the cache if the character was already rasterized
TInt iGlyphIndex; // the glyph index
TAny* iReserved; // unused; for future expansion
TUint8 iBitmapBuffer[1]; // buffer used to write the bitmap when it is first rasterized; this
// is actually of size iBitmapBufferSize.
};
class COpenFontGlyph;
/**
Open Font System font abstract base class.
Derive a class from this class to represent an instance of a typeface at a
particular size, provide bitmaps of the glyphs, and determine whether
characters exist in the typeface.
Writing derived classes construction:
You must call the constructor of this class when creating your derived object,
passing the arguments aHeap and aSessionCacheList supplied to
COpenFontFile::GetNearestFontInPixelsL(), and the address of the COpenFontFile
object that creates the object as aFile.
The derived object must be created on the shared heap aHeap because it is
shared by several processes: the font and bitmap server and its clients.
To do this, use aHeap->AllocL() to obtain memory, then construct in place
using a placement argument to new.
Derived classes must implement the pure virtual function RasterizeL().
Information about this function is provided in the function definition below.
Information about deriving from this class is also provided in the API guide.
@see COpenFontFile::GetNearestFontInPixelsL()
@publishedAll
@released
*/
class COpenFont: public CBase
{
public:
/** Creates a bitmap for the specified Unicode character.
Implementations of this function should put the bitmap in
aGlyphData->iBitmapBuffer, and the character metrics are placed in
aGlyphData->iMetricsBuffer. The other parts of aGlyphData should be left
alone.
There are a number of strategies for achieving this, e.g. pass the
rasterization task all the way up to the rasterizer engine. These are
discussed in the API guide.
At present you must write the bitmap in the Symbian platform's
run-length-encoded format. This is a packed binary format starting on a
byte boundary and made up of a number of sections. Each section starts
with a five-bit header. If the first bit of the header is 0 the next four
bits are a repeat count, starting with the least significant bit, and a
single row of bits (the number of bits in a row is specified by
aGlyphData->iMetricsBuffer.Width()) follows. If the first bit of the header
is 1 the next four bits are a count of non-repeating rows, again starting
with the least significant bit, and that many rows of bits follow.
@param aCode The character code of the Unicode character for which the
bitmap is required.
@param aGlyphData On return, contains a pointer to a TOpenFontGlyphData
containing the character's bitmap and metrics. */
virtual void RasterizeL(TInt aCode,TOpenFontGlyphData* aGlyphData) = 0;
IMPORT_C virtual void ExtendedInterface(TUid aUid, TAny*& aParam);
IMPORT_C COpenFont(RHeap* aHeap,COpenFontSessionCacheList* aSessionCacheList,COpenFontFile* aFile);
IMPORT_C COpenFont(RHeap* aHeap,COpenFontSessionCacheList* aSessionCacheList,COpenFontFile* aFile,TInt aFaceIndex);
IMPORT_C ~COpenFont();
IMPORT_C void operator delete(TAny*);
inline const TOpenFontMetrics& Metrics() const;
inline const TOpenFontFaceAttrib* FaceAttrib() const;
inline COpenFontFile* File() const;
inline TInt FaceIndex() const;
inline TBool CharacterNeedsToBeRasterized(TInt aSessionHandle,TInt aCode) const;
void SetShaper(CShaper* aShaper);
CShaper* GetShaper();
TBool HasShaper() const;
TShapeHeader* GetShapedData(TInt aSessionHandle,TFontShapeFunctionParameters* aParams);
TShapeHeader* InsertShapedDataIntoCache(TInt aSessionHandle,TFontShapeFunctionParameters* aParams, TShapeHeader* aShapeHeader);
TInt FreeShaperCacheMemory(TInt aBytesNeeded);
TInt DecrementCachedRefCount(TInt aSessionHandle,TShapeHeader* aShapeHeader,TBool aResetAll=EFalse);
TBool Rasterize(TInt aSessionHandle,TInt aCode,TOpenFontGlyphData* aGlyphData);
TBool HasCharacterL(TInt aCode) const;
TBool GetCharacterData(TInt aSessionHandle,TInt aCode,const TOpenFontCharMetrics*& aMetrics,const TUint8*& aBitmap) const;
void OnFileDeleted();
COpenFontGlyphCache* GetGlyphCache();
inline TInt FontCapitalAscent() const;
inline TInt FontMaxAscent() const;
inline TInt FontStandardDescent() const;
inline TInt FontMaxDescent() const;
inline TInt FontLineGap() const;
inline TInt FontMaxHeight() const;
void DeleteShaper() const;
protected:
/** WARNING: Function for internal use ONLY. Compatibility is not guaranteed in future releases.
*/
TInt PointerToThisOffset(const TAny* aAny);
/** WARNING: Function for internal use ONLY. Compatibility is not guaranteed in future releases.
*/
TAny* ThisOffsetToPointer(const TInt aOffset);
protected:
RHeap* iHeap;
TOpenFontMetrics iMetrics;
private:
/** The shaper for performing complex character positioning and
substitution, if available. Null otherwise.
WARNING: Member variable for internal use ONLY. Compatibility is not guaranteed in future releases. Please access using the provided get/set APIs only.
*/
CShaper* iShaper;
protected:
/** The positive distance in pixels from the baseline to
the top of an ANSI capital (whether or not there are
ANSI capitals in the font) */
TInt iFontCapitalAscent;
/** The positive distance in pixels from the baseline to
the top of the highest pre-composed glyph in the font */
TInt iFontMaxAscent;
/** The positive distance in pixels from the baseline to
the bottom of the lowest ANSI descender (whether or
not there are ANSI chars in the font)*/
TInt iFontStandardDescent;
/** The positive distance in pixels from the baseline to
the bottom of the lowest pre-composed glyph in the font */
TInt iFontMaxDescent;
/** The recommended baseline to baseline gap for successive
lines of text in the font */
TInt iFontLineGap;
private:
const COpenFontGlyph* Glyph(TInt aSessionHandle,TInt aCode) const;
protected:
/** WARNING: Function for internal use ONLY. Compatibility is not guaranteed in future releases.
*/
const COpenFontGlyph* FontCacheGlyph(TInt aCode,TInt*& aNode);
const COpenFontGlyph* FontCacheGlyph(TInt aCode);
void SetGlyphCache(COpenFontGlyphCache* aGlyphCache);
private:
const COpenFontGlyph* SessionCacheGlyph(RHeap* aHeap,TInt aSessionHandle,TInt aCode,
COpenFontSessionCache*& aCache,TInt& aIndex,TBool aCreate) const;
void RasterizeHelperL(TInt aCode,TOpenFontGlyphData* aGlyphData,TOpenFontGlyphData*& aTempGlyphData);
COpenFontSessionCacheList* SessionCacheList()const;
void SetSessionCacheList(COpenFontSessionCacheList* aSessionCacheList);
void SetFile(COpenFontFile* aFile);
private:
// Offset from the address of the file used by this font.
// If the file has been deleted or cannot be used, the offest will be zero.
TInt iFileOffset;
TInt iFaceIndex; // index of the face in the font file
protected:
/**
WARNING: Compatibility is not guaranteed in future releases. Please use the provided APIs only.
Offset from the address of this font of the per-font glyph cache which is owned by the font
@internalTechnology
*/
TInt iGlyphCacheOffset;
private:
// Offset from the address of this font of the list of per-session glyph
// caches which are owned by CFontStore
TInt iSessionCacheListOffset;
TAny* iReserved; // unused; for future expansion
};
/** Open Font System Extension Interface abstract base class.
COpenFont derivers should also derive from this interface to enable complex
font "shaping".
This interface should be returned by the overridden
COpenFont::ExtendedInterface function when KUidOpenFontShapingExtension is
supplied as the UID.
@see COpenFont
@see KUidOpenFontShapingExtension
@publishedAll
@released
*/
class MOpenFontShapingExtension
{
public:
/** Various font metrics. */
class TExtensionFontMetrics
{
public:
/** The number of font design units per em. */
TInt iUnitsPerEm;
/** The width of the font's em square in pixels. */
TReal iXPixelsPerEm;
/** The height of the font's em square in pixels. */
TReal iYPixelsPerEm;
/** The horizontal scaling factor from the font's transform;
the number of horizontal pixels per font unit. */
TReal iXScaleFactor;
/** The vertical scaling factor from the font's transform;
the number of vertical pixels per font unit. */
TReal iYScaleFactor;
private:
/** Reserved for future expansion. */
TInt iReserved[4];
};
/** Creates a bitmap for the specified Glyph code.
Implementations of this function should put the bitmap in
aGlyphData->iBitmapBuffer, and the character metrics are placed in
aGlyphData->iMetricsBuffer. The other parts of aGlyphData should be left
alone.
This function provides the same functionality as the
COpenFont::RasterizeL() except that the glyph code is supplied rather than
the unicode.
For more information:
@see COpenFont::RasterizeL()
@param aCode The glyph code of the character for which the bitmap is required.
@param aGlyphData The function puts its output here.
*/
virtual void RasterizeGlyphL(TInt aCode,TOpenFontGlyphData* aGlyphData) = 0;
/** Maps a character to a glyph index.
@param aUnicodeCharacter Unicode character code to be mapped.
@return Glyph code corresponding to aUnicodeCharacter. */
virtual TInt GlyphIndex(TInt aUnicodeCharacter) const = 0;
/** Returns the hinted pixel coordinates of a particular point in the
outline of the given glyph.
@param aGlyphPoint The glyph index.
@param aPointNumber The number of the point.
@param aX Returns the point's X pixel value.
@param aY Returns the point's Y pixel value.
@return True on success, false otherwise. */
virtual TBool GlyphPointInHintedPixels(TInt aGlyphIndex, TInt aPointNumber,
TReal& aX, TReal& aY) const = 0;
/** Returns the coordinates of a particular (unhinted) point in the outline
of the given glyph in font units.
@param aGlyphPoint The glyph index.
@param aPointNumber The number of the point.
@param aX Returns the point's X co-ordinate in font units.
@param aY Returns the point's Y co-ordinate in font units.
@return True on success, false otherwise. */
virtual TBool GlyphPointInFontUnits(TInt aGlyphIndex, TInt aPointNumber,
TInt& aX, TInt& aY) const = 0;
/** Returns font metrics.
@param aOut Font metrics returned. */
virtual void GetExtensionFontMetrics(TExtensionFontMetrics& aOut) = 0;
};
/** TrueType extension for Open Fonts.
If an open font is able to load TrueType or OpenType tables it should derive
from this class.
This class will be used by
This interface should be returned by the overridden
COpenFont::ExtendedInterface function when KUidOpenFontTrueTypeExtension is
supplied as the UID.
@see KUidOpenFontTrueTypeExtension
@publishedAll
@released
*/
class MOpenFontTrueTypeExtension
{
public:
/** Returns the specified table. The table need not be released by the
caller, so the deriver is responsible for ensuring that any memory
allocated is ultimately cleaned up. The caller must not delete or modify
the data returned.
@param aError
Returns KErrNone if successful or one of the system-wide error codes if
unsuccessful. Returns KErrNotSupported if the table does not exist in
the font file.
@param aTag
The tag of the table, with the first character in the most significant
byte. For example, the "vhea" table is obtained by passing in 'v'<<24 |
'h'<<16 | 'e'<<8 | 'a'.
@param aLength
The length of the table in bytes that has been returned or 0 if
unsuccessful.
@return The table, if successful.
@see ReleaseTrueTypeTable */
virtual TAny* GetTrueTypeTable(TInt& aError, TUint32 aTag, TInt* aLength) = 0;
/** Releases a table obtained by GetTrueTypeTable. The caller must not
use the table after this call.
@param aTable The table to be released.
@see GetTrueTypeTable */
virtual TInt ReleaseTrueTypeTable(TAny* aTable) = 0;
/** Determines if the font file has a particular table.
@param aTag The tag of the table as for GetTrueTypeTable.
@return True if the table exists in the font file, false otherwise.
@see GetTrueTypeTable */
virtual TBool HasTrueTypeTable(TUint32 aTag) = 0;
};
/**
Font attribute base class.
This class is not intended for user derivation.
@see TOpenFontFaceAttrib
@see TOpenFontSpec
@publishedAll
@released
*/
class TOpenFontFaceAttribBase
{
public:
inline TOpenFontFaceAttribBase();
inline TBool HasLatin() const;
inline TBool HasGreek() const;
inline TBool HasCyrillic() const;
inline TBool HasKana() const;
inline TBool HasHangul() const;
inline TBool HasCJK() const;
inline TBool IsSymbol() const;
inline TBool IsBold() const;
inline TBool IsItalic() const;
inline TBool IsSerif() const;
inline TBool IsMonoWidth() const;
inline TPtrC Name() const;
inline const TUint* Coverage() const;
inline void SetName(const TDesC& aName);
inline void SetCoverage(TUint aCoverage0,TUint aCoverage1 = 0,TUint aCoverage2 = 0,TUint aCoverage3 = 0);
inline void SetBold(TBool aBold);
inline void SetItalic(TBool aItalic);
inline void SetSerif(TBool aSerif);
inline void SetMonoWidth(TBool aMonoWidth);
inline TBool operator==(const TOpenFontFaceAttribBase& aAttrib) const;
// Unicode ranges for iCoverage[0] (see the TrueType documentation for other values which are not included)
enum
{
ELatinSet = 0x1, // 0000-007F
EGreekSet = 0x80, // 0370-03FF
ECyrillicSet = 0x200, // 0400-04FF
EArmenianSet = 0x400, // 0530-058F
EHebrewSet = 0x800, // 0590-05FF
EArabicSet = 0x2000, // 0600-06FF
EDevanagariSet = 0x8000, // 0900-097F
EBengaliSet = 0x10000, // 0980-09FF
EGurmukhiSet = 0x20000, // 0A00-0A7F
EGujuratiSet = 0x40000, // 0A80-0AFF
EOriyaSet = 0x80000, // 0B00-0B7F
ETamilSet = 0x100000, // 0B80-0BFF
ETeluguSet = 0x200000, // 0C00-0C7F
EKannadaSet = 0x400000, // 0C80-0CFF
EMalayalamSet = 0x800000, // 0D00-0D7F
EThaiSet = 0x1000000, // 0E00-0E7F
ELaoSet = 0x2000000, // 0E80-0EFF
EGeorgianSet = 0x8000000, // 10A0-10FF
EHangulJamoSet = 0x10000000,// 1100-11FF
};
// Unicode ranges for iCoverage[1]
enum
{
ESymbolSets = 0xFFFE,
EKanaSets = 0x60000,
EHangulSet = 0x100000,
ECJKSet = 0x8000000
};
// Attribute flags
enum
{
EBold = 0x1, // weight > 500 in Windows terms
EItalic = 0x2, // italic or oblique - any forward slant counts
ESerif = 0x4, // characters have serifs
EMonoWidth = 0x8 // all characters are the same width
};
// Other constants
enum
{
ENameLength = 32 // we allow 32 but names that are compatible with old-style fonts are limited to 24
};
protected:
TBufC<ENameLength> iName; // the name of the typeface; whether this is the full name or family name
// or is in English or another language depends on the context
TUint iCoverage[4]; // bitmap of the character sets supported by the typeface;
// these are the same as the fields ulUnicodeRange1 .. ulUnicodeRange4
// in the OS/2 table in TrueType fonts
TInt iStyle; // bold, italic serif, and mono-width
TInt32 iReserved;
};
/**
Typeface attributes.
These attributes include the name, family name, and supported scripts.
@see CFbsFont::GetFaceAttrib()
@publishedAll
@released
*/
class TOpenFontFaceAttrib: public TOpenFontFaceAttribBase
{
public:
inline TOpenFontFaceAttrib();
inline TBool operator==(const TOpenFontFaceAttrib& aAttrib) const;
inline TPtrC FullName() const;
inline TPtrC FamilyName() const;
inline TPtrC LocalFullName() const;
inline TPtrC LocalFamilyName() const;
inline TPtrC ShortFullName() const;
inline TPtrC ShortFamilyName() const;
inline TPtrC ShortLocalFullName() const;
inline TPtrC ShortLocalFamilyName() const;
inline void SetFullName(const TDesC& aName);
inline void SetFamilyName(const TDesC& aName);
inline void SetLocalFullName(const TDesC& aName);
inline void SetLocalFamilyName(const TDesC& aName);
inline TInt MinSizeInPixels() const;
inline void SetMinSizeInPixels(TInt aSize);
private:
TBufC<ENameLength> iFamilyName; // the name without any style suffixes; usually a truncation of iFullName
TBufC<ENameLength> iLocalFullName; // the full name in the language of the current locale
TBufC<ENameLength> iLocalFamilyName; // the family name in the language of the current locale
TInt iMinSizeInPixels; // minimum supported size, (or readable size if scalable) in pixels
TInt32 iReserved2;
};
/**
Font specification allowing more attributes to be specified than TFontSpec.
In addition to the attributes specified by TFontSpec, this font specification
allows stretching and slanting in the x dimension, and other algorithmic effects.
This is used to correct for non-square pixels, and to allow algorithmic slanting
and bold. The width factor and slant factor transform any point (x,y) to (x
* iWidthFactor + y * iSlantFactor,y). The width and slant factors are 16.16
fixed-point numbers.
The font specification also provides access to information about the scripts
which are supported by the font. This information is not always reliable,
because it may be incorrectly specified, or not specified at all, by some
font manufacturers.
@publishedAll
@released
*/
class TOpenFontSpec : public TOpenFontFaceAttribBase
{
public:
IMPORT_C TOpenFontSpec();
IMPORT_C TOpenFontSpec(const TFontSpec& aFontSpec);
IMPORT_C void operator=(const TFontSpec& aFontSpec);
inline TBool operator==(const TOpenFontSpec& aFontSpec) const;
TBool operator!=(const TOpenFontSpec& aOpenFontSpec) const;
IMPORT_C void SetAttrib(const TOpenFontFaceAttribBase& aAttrib);
IMPORT_C void GetTFontSpec(TFontSpec& aFontSpec) const;
IMPORT_C void CompensateForAspectRatio(TInt aPixelWidth,TInt aPixelHeight);
IMPORT_C void CompensateForAspectRatio(const MGraphicsDeviceMap& aMap);
inline TInt Height() const;
inline TInt32 WidthFactor() const;
inline TInt32 SlantFactor() const;
inline TGlyphBitmapType BitmapType() const;
inline TUint32 Effects() const;
inline TFontPrintPosition PrintPosition() const;
inline void SetHeight(TInt aHeight);
inline void SetWidthFactor(TInt32 aWidthFactor);
inline void SetSlantFactor(TInt32 aSlantFactor);
inline void SetBitmapType(TGlyphBitmapType aBitmapType);
inline void SetEffects(TUint32 aEffects);
IMPORT_C void SetEffects(FontEffect::TEffect aEffect, TBool aOn);
IMPORT_C TBool IsEffectOn(FontEffect::TEffect aEffect) const;
IMPORT_C void SetScriptTypeForMetrics(TLanguage aLanguage);
IMPORT_C TInt ScriptTypeForMetrics() const;
static TBool IsCompensationForAspectRatioNeeded(TInt aPixelWidth, TInt aPixelHeight);
static TInt ApplyRatio(TInt& aValue,TInt aNumerator,TInt aDenominator);
static TInt ApplyRatio(TInt32& aValue,TInt aNumerator,TInt aDenominator);
public:
/** Algorithmic effects flags.
These can be combined using an OR operation.
WARNING: Enum for internal and partner use ONLY. Compatibility is not guaranteed in future releases.
@deprecated Use FontEffect::TEffect instead.
*/
enum
{
/** Font is algorithmic bold. */
EAlgorithmicBold = 1,
/** Font has a drop shadow. */
EDropShadow = 2,
/** Font is an outline font. */
EOutline = 4
};
private:
void SetScriptTypeForMetrics(TInt aScript);
void SetSymbol(TBool aSymbol);
TBool Symbol() const;
IMPORT_C TBool OperatorEquality(const TOpenFontSpec& aOpenFontSpec) const;
IMPORT_C TUint32 DoEffects() const;
IMPORT_C void DoSetEffects(TUint32 aEffects);
private:
TInt iHeight; // em height
TInt32 iWidthFactor; // algorithmic width factor as a 16.16 fixed-point number
TInt32 iSlantFactor; // algorithmic slant factor as a 16.16 fixed-point number
TInt iBitmapType; // non-anti-aliased, standard anti-aliased, etc.; zero means 'default'
TUint32 iEffects; // bit flags for font effects
TInt iSymbol; // a symbol font as understood by TFontSpec (bit 1), script type (bits 2-5)
// The following data member exists only to allow round-trip conversion between TFontSpec and TOpenFontSpec
TFontPrintPosition iPrintPosition; // normal, superscript or subscript
TInt iReserved2;
};
/**
Font file abstract base class.
Write a class derived from COpenFontFile to manage a file with the font format
supported by your DLL. The derived class must implement the virtual
GetNearestFontInPixelsL() function. This function takes a font description
and creates a COpenFont derived object if the description matches a typeface
contained in the font file.
Derived classes must also load typeface attributes from the file into the
protected typeface attribute array during construction. This array is what
is searched when getting font attribute information see AddFaceL(),
GetNearestFontHelper().
Writing derived classes construction:
Call the COpenFontFile constructor in the constructor for your derived object,
passing it aUid and aFileName arguments. These values are the arguments passed
when the constructor is called by COpenFontRasterizer::NewFontFileL().
A file may contain one or more typefaces. During construction the derived
object should extract the information for each typeface and add it to this
object's protected typeface attribute array see AddFaceL(). This process
will probably leave under some conditions. It should therefore be implemented
in a second phase constructor.
Writing derived classes implement the pure virtual functions:
Derived classes must also implement the two pure virtual functions
GetNearestFontInPixelsL() and HasUnicodeCharacterL(). Information about
these functions is provided in the definitions below. Information about
deriving from this class is also provided in the API guide.
@see COpenFontRasterizer::NewFontFileL()
@see CWsScreenDevice::AddFile()
@publishedAll
@released
*/
class COpenFontFile : public CBase
{
public:
/**
Gets the font which is the nearest to the given font specification.
Implementations of this pure virtual function should create the COpenFont
derived object that most closely matches aDesiredFontSpec, while fitting within
aMaxHeight, and place a pointer to it in aFont. If this cannot be done,
e.g. if the font name doesn't match, aFont should be set to NULL.
The other two arguments, aHeap and aSessionCacheList, should be passed to
the COpenFont constructor.
Implementations may use the utility function GetNearestFontHelper()
to get the attributes of the closest matching font.
@param aHeap Shared heap. This value should be passed to the
COpenFont derived classes' constructor.
@param aSessionCacheList The session cache list. This value should be passed
to the COpenFont derived classes' constructor.
@param aDesiredFontSpec The desired font specification.
@param aPixelWidth The width of a pixel. Used with aPixelHeight for calculating
the algorithmic slant of the typeface.
@param aPixelHeight The height of a pixel. Used with aPixelWidth for calculating
the algorithmic slant of the typeface.
@param aFont On return, contains a pointer to the newly created COpenFont
derived object, or NULL if no font matching aDesiredFontSpec exists.
@param aActualFontSpec The actual font specification of the font retrieved into aFont.
@see GetNearestFontHelper()
*/
virtual void GetNearestFontInPixelsL(
RHeap* aHeap, COpenFontSessionCacheList* aSessionCacheList,
const TOpenFontSpec& aDesiredFontSpec, TInt aPixelWidth, TInt aPixelHeight,
COpenFont*& aFont, TOpenFontSpec& aActualFontSpec) = 0;
/**
Gets the font which is the nearest to the given font specification.
Implementations of this pure virtual function should create the COpenFont
derived object that most closely matches aDesiredFontSpec, while fitting within
aMaxHeight, and place a pointer to it in aFont. If this cannot be done,
e.g. if the font name doesn't match, aFont should be set to NULL.
The other two arguments, aHeap and aSessionCacheList, should be passed to
the COpenFont constructor.
Implementations may use the utility function GetNearestFontHelper()
to get the attributes of the closest matching font.
@param aHeap Shared heap. This value should be passed to the COpenFont
derived classes' constructor.
@param aSessionCacheList The session cache list. This value should be passed
to the COpenFont derived classes' constructor.
@param aDesiredFontSpec The desired font specification.
@param aPixelWidth The width of a pixel. Used with aPixelHeight for calculating
the algorithmic slant of the typeface.
@param aPixelHeight The height of a pixel. Used with aPixelWidth for calculating
the algorithmic slant of the typeface.
@param aFont On return, contains a pointer to the newly created COpenFont
derived object, or NULL if no font matching aDesiredFontSpec exists.
@param aActualFontSpec The actual font specification of the font retrieved into aFont.
@see GetNearestFontHelper()
*/
virtual void GetNearestFontToDesignHeightInPixelsL(
RHeap* /*aHeap*/, COpenFontSessionCacheList* /*aSessionCacheList*/,
const TOpenFontSpec& /*aDesiredFontSpec*/, TInt /*aPixelWidth*/, TInt /*aPixelHeight*/,
COpenFont*& /*aFont*/, TOpenFontSpec& /*aActualFontSpec*/) {}
/**
Gets the font which is the nearest to the given font specification.
Implementations of this pure virtual function should create the COpenFont
derived object that most closely matches aDesiredFontSpec, while fitting within
aMaxHeight, and place a pointer to it in aFont. If this cannot be done,
e.g. if the font name doesn't match, aFont should be set to NULL.
The other two arguments, aHeap and aSessionCacheList, should be passed to
the COpenFont constructor.
Implementations may use the utility function GetNearestFontHelper()
to get the attributes of the closest matching font.
@param aHeap Shared heap. This value should be passed to the COpenFont
derived classes' constructor.
@param aSessionCacheList The session cache list. This value should be passed
to the COpenFont derived classes' constructor.
@param aDesiredFontSpec The desired font specification.
@param aPixelWidth The width of a pixel. Used with aPixelHeight for calculating
the algorithmic slant of the typeface.
@param aPixelHeight The height of a pixel. Used with aPixelWidth for calculating
the algorithmic slant of the typeface.
@param aFont On return, contains a pointer to the newly created COpenFont
derived object, or NULL if no font matching aDesiredFontSpec exists.
@param aActualFontSpec The actual font specification of the font retrieved into aFont.
@param aMaxHeight The maximum height (vertical extent) within which the font must fit.
@see GetNearestFontHelper()
*/
virtual void GetNearestFontToMaxHeightInPixelsL(
RHeap* /*aHeap*/, COpenFontSessionCacheList* /*aSessionCacheList*/,
const TOpenFontSpec& /*aDesiredFontSpec*/, TInt /*aPixelWidth*/, TInt /*aPixelHeight*/,
COpenFont*& /*aFont*/, TOpenFontSpec& /*aActualFontSpec*/, TInt /*aMaxHeight*/) {}
/** Tests whether a specified typeface contains a particular character.
@param aFaceIndex The index of the typeface to be tested.
@param aCode The Unicode character code for the character to be tested.
@return ETrue if the typeface contains aCode, otherwise EFalse. */
virtual TBool HasUnicodeCharacterL(TInt aFaceIndex,TInt aCode) const = 0;
IMPORT_C virtual void ExtendedInterface(TUid aUid, TAny*& aParam);
IMPORT_C COpenFontFile(TInt aUid,const TDesC& aFileName);
IMPORT_C ~COpenFontFile();
IMPORT_C TBool GetNearestFontHelper(const TOpenFontSpec& aDesiredFontSpec,TInt aPixelWidth,TInt aPixelHeight,
TInt& aFaceIndex,TOpenFontSpec& aActualFontSpec) const;
IMPORT_C void AddFaceL(const TOpenFontFaceAttrib& aAttrib);
inline TUid Uid() const;
inline const TDesC& FileName() const;
inline const TOpenFontFaceAttrib& FaceAttrib(TInt aFaceIndex) const;
inline TInt FaceCount() const;
inline void IncRefCount();
inline TBool DecRefCount();
TInt GetNearestFontInPixels(
RHeap* aHeap, COpenFontSessionCacheList* aSessionCacheList,
const TOpenFontSpec& aDesiredFontSpec, TInt aPixelWidth, TInt aPixelHeight,
COpenFont*& aFont, TOpenFontSpec& aActualFontSpec);
TInt GetNearestFontToDesignHeightInPixels(
RHeap* aHeap, COpenFontSessionCacheList* aSessionCacheList,
const TOpenFontSpec& aDesiredFontSpec, TInt aPixelWidth, TInt aPixelHeight,
COpenFont*& aFont, TOpenFontSpec& aActualFontSpec);
TInt GetNearestFontToMaxHeightInPixels(
RHeap* aHeap, COpenFontSessionCacheList* aSessionCacheList,
const TOpenFontSpec& aDesiredFontSpec, TInt aPixelWidth, TInt aPixelHeight,
COpenFont*& aFont, TOpenFontSpec& aActualFontSpec, TInt aMaxHeight);
void RemoveFontFromList(const COpenFont* aFont);
void SetFontStoreL(CFontStore* aFontStore);
CFontStore* GetFontStore();
CArrayPtrFlat<COpenFont>* GetOpenFontList();
protected:
IMPORT_C TBool GetNearestFontHelperOld(const TOpenFontSpec& aDesiredFontSpec,TInt aPixelWidth,TInt aPixelHeight,
TInt& aFaceIndex,TOpenFontSpec& aActualFontSpec) const;
private:
// A class to contain the public font attributes and private positioning information (for kerning, ligatures, etc.)
class TAttrib: public TOpenFontFaceAttrib
{
public:
COpenFontPositioner* iPositioner; // if non-null, positioning information for the typeface
};
static TInt ScoreByName(const TOpenFontSpec& aDesiredFontSpec, const TAttrib& aAttrib);
static TInt ScoreByStyle(const TOpenFontSpec& aDesiredFontSpec, const TAttrib& aAttrib);
void GetNearestFontToDesignHeightInPixelsAndAddToListL(
RHeap* aHeap, COpenFontSessionCacheList* aSessionCacheList,
const TOpenFontSpec& aDesiredFontSpec, TInt aPixelWidth, TInt aPixelHeight,
COpenFont*& aFont, TOpenFontSpec& aActualFontSpec);
void GetNearestFontToMaxHeightInPixelsAndAddToListL(
RHeap* aHeap, COpenFontSessionCacheList* aSessionCacheList,
const TOpenFontSpec& aDesiredFontSpec, TInt aPixelWidth, TInt aPixelHeight,
COpenFont*& aFont, TOpenFontSpec& aActualFontSpec, TInt aMaxHeight);
private:
CArrayFixFlat<TAttrib> iFaceAttrib;
TUid iUid;
TBuf<KMaxFileName> iFileName;
TInt iRefCount;
CArrayPtrFlat<COpenFont> iFontList;
TOpenFontFileData* iData;
};
/**
Convenience class from which rasterizer contexts may be derived.
A rasterizer context object may (optionally) be created to provide the link
between the rasterizer DLL code supported by the Open Font System, and the
rasterizer engine code. A rasterizer context object class should get the
requested bitmap from the associated rasterizer engine. It should then convert
this into Symbian run-length-encoded format. This class contains convenience
functions to make the conversion easier.
Deriving from this class is described in greater detail in the API guide.
@publishedAll
@released
*/
class COpenFontRasterizerContext: public CBase
{
public:
inline COpenFontRasterizerContext();
inline void StartGlyph(TOpenFontGlyphData* aGlyphData);
inline void WriteGlyphBit(TInt aBit);
inline void WriteGlyphByte(TInt aByte);
inline void EndGlyph();
private:
TOpenFontGlyphData* iGlyphData;
TUint8* iGlyphDataStart;
TUint8* iGlyphDataPtr;
TUint8* iGlyphDataEnd;
TInt iGlyphBit;
TInt iBytesNeeded;
TBool iOverflow;
TAny* iReserved; // unused; for future expansion
};
/**
Shaper abstract class. All shaper implementations derive from this
@publishedAll
@released
*/
class CShaper : public CBase
{
public:
class TInput
{
public:
/** The text to be shaped possibly including context. */
const TDesC* iText;
/** The index of the first character in iText to be shaped. */
TInt iStart;
/** (One past) the end of the text in iText to be shaped. */
TInt iEnd;
/** Script code, for example 'd'<<24 | 'e'<<16 | 'v'<<8 | 'a'
for Devanagari. */
TInt iScript;
/** Language code. 0 implies "default" */
TUint32 iLanguage;
/** Maximum advance in pixels. Shaping beyond this
advance is not required (but is not harmful). */
TInt iMaximumAdvance;
/** Flags. Currently none is defined. */
TInt iFlags;
/** Session handle. To be used if rasterization is needed. */
TInt iSessionHandle;
/** Reserved for future expansion. Must be set to 0. */
TInt iReserved1;
};
/** Constructor */
IMPORT_C CShaper();
/** Destructor */
IMPORT_C virtual ~CShaper();
/** construct a shaper object
@param aBitmapFont The font to be shaped.
@param aHeap The heap to be used by the shaper.
@return KErrNone if this font can be shaper or system wide error code*/
virtual TInt ConstructL(CBitmapFont* aBitmapFont, TInt aScript, TInt aLanguage, RHeap* iHeap) = 0;
/** If possible, shape the text described by aInput, placing the output on aHeapForOutput.
@param aOutput The output, as a newly allocate object on aHeapForOutput.
@param aInput The input text and other parameters.
@param aHeapForOutput On success, aOutput should be allocated from this and nothing else.
On failure, nothing should be allocated from it.
@return Error value from one of the system-wide error codes on failure, KErrNone on success.
@see TShapeHeader */
virtual TInt ShapeText(TShapeHeader*& aOutput, const TInput& aInput, RHeap* aHeapForOutput) = 0;
/** For future expansion. Any overriders must base-call
if aInterface is unrecognized.
WARNING: Function for internal use ONLY. Compatibility is not guaranteed in future releases.
@param aInterfaceId The ID of the interface to return.
@return A pointer to the extension interface.
*/
IMPORT_C virtual void* ExtendedInterface(TUid aInterfaceId);
};
/** ECOM plug-in base class for shaper factories.
@publishedAll
@released
*/
class CShaperFactory : public CBase
{
public:
/** Create a shaper if possible, for typeface aFaceIndex
within file aFileName.
@param aFont The font to be shaped.
@param iHeap The heap to use for constructing the shaper.
@return 0 If the font is not understood or inappropriate for any shaper that might be constructed
by this class, otherwise returns the newly-constructed shaper on iHeap. */
virtual CShaper* NewShaperL(CBitmapFont* aFont, TInt aScript, TInt aLanguage, RHeap* iHeap) = 0;
inline static CShaperFactory* NewL(TUid aInterfaceImplUid);
inline virtual ~CShaperFactory();
/** For future expansion. Any overriders must base-call if aInterface is unrecognized.
WARNING: Function for internal use ONLY. Compatibility is not guaranteed in future releases.
@param aInterfaceId The ID of the interface to return.
@return A pointer to the extension interface.
*/
virtual void* ExtendedInterface(TUid aInterfaceId);
private:
TUid iDtor_ID_Key;//ECOM identifier used during destruction
};
// Inline functions start here.
/** Default C++ constructor.
This creates then zero fills the object. */
inline TOpenFontMetrics::TOpenFontMetrics()
{
Mem::FillZ(this,sizeof(*this));
}
/** Gets the font's size.
@return The font's size.
@see SetSize() */
inline TInt TOpenFontMetrics::Size() const
{
return iDesignHeight;
}
/** Gets the font's ascent.
This is the ascent for the Latin character which is highest above the baseline.
@return The font's ascent, in pixels.
@see SetAscent() */
inline TInt TOpenFontMetrics::Ascent() const
{
return iAscent;
}
/** Gets the font's descent.
This is the descent for the Latin character in the font which falls furthest below the baseline.
@return The font's descent, in pixels.
@see SetDescent() */
inline TInt TOpenFontMetrics::Descent() const
{
return iDescent;
}
/** Sets the font's maximum height.
Note that if this object was initialised from the CFont this will be the same
as the ascent.
This is the ascent for the character which is highest above the baseline.
In many fonts this will be the height of an accented character like Â,
including the accent.
@return The maximum height of the font, in pixels.
@see SetMaxDepth() */
inline TInt TOpenFontMetrics::MaxHeight() const
{
return iMaxHeight;
}
/** Gets the font's maximum depth.
Note: If this object was initialised from the CFont this will be the same as the
descent.
This is the descent for the character in the font which falls furthest below
the baseline.
@return The font's maximum depth.
@see SetMaxDepth() */
inline TInt TOpenFontMetrics::MaxDepth() const
{
return iMaxDepth;
}
/** Gets the maximum character width, in pixels.
@return The maximum character width, in pixels.
@see SetMaxWidth() */
inline TInt TOpenFontMetrics::MaxWidth() const
{
return iMaxWidth;
}
/** Sets the font's size.
@param aSize The font's size.
@see Size() */
inline void TOpenFontMetrics::SetSize(TInt aSize)
{
iDesignHeight = static_cast<TInt16>(aSize);
}
/** Sets the ascent.
@param aAscent The ascent, in pixels.
@see Ascent() */
inline void TOpenFontMetrics::SetAscent(TInt aAscent)
{
iAscent = static_cast<TInt16>(aAscent);
}
/** Sets the descent.
@param aDescent The descent, in pixels.
@see Descent() */
inline void TOpenFontMetrics::SetDescent(TInt aDescent)
{
iDescent = static_cast<TInt16>(aDescent);
}
/** Sets the font's maximum height.
@param aMaxHeight The font's maximum height, in pixels.
@see MaxHeight() */
inline void TOpenFontMetrics::SetMaxHeight(TInt aMaxHeight)
{
iMaxHeight = static_cast<TInt16>(aMaxHeight);
}
/** Sets the font's maximum depth.
@param aMaxDepth The font's maximum depth, in pixels.
@see MaxDepth() */
inline void TOpenFontMetrics::SetMaxDepth(TInt aMaxDepth)
{
iMaxDepth = static_cast<TInt16>(aMaxDepth);
}
/** Sets the maximum character width, in pixels.
@param aMaxWidth The maximum character width, in pixels.
@see MaxWidth() */
inline void TOpenFontMetrics::SetMaxWidth(TInt aMaxWidth)
{
iMaxWidth = static_cast<TInt16>(aMaxWidth);
}
/** Default C++ constructor.
The constructor initialises all data members to zero. As for other T classes,
there is no need to explicitly cleanup TOpenFontCharMetrics objects. */
inline TOpenFontCharMetrics::TOpenFontCharMetrics()
{
Mem::FillZ(this,sizeof(*this));
}
/** Gets the width of the character's bitmap.
@return The width of the bitmap in pixels. */
inline TInt TOpenFontCharMetrics::Width() const
{
return iWidth;
}
/** Gets the height of the character's bitmap.
@return The character's height in pixels. */
inline TInt TOpenFontCharMetrics::Height() const
{
return iHeight;
}
/** Gets the horizontal bearing X.
This is the distance in pixels from the pen point before the character is
drawn (the origin) to the left edge of the bitmap, when drawing horizontally.
A positive value means that the left edge of the bitmap is right of the origin.
@return The horizontal bearing X in pixels */
inline TInt TOpenFontCharMetrics::HorizBearingX() const
{
return iHorizBearingX;
}
/** Gets horizontal bearing Y.
This is the vertical distance in pixels from the pen point before the character
is drawn (the origin) to the top edge of the bitmap, when drawing horizontally.
A positive value means that the top edge of the bitmap is above the origin
@return The horizontal bearing Y in pixels. */
inline TInt TOpenFontCharMetrics::HorizBearingY() const
{
return iHorizBearingY;
}
/** Gets the horizontal advance.
This is the amount added to the x co-ordinate of the origin after the character
is drawn what most people understand by the width or escapement of a character.
The origin here is the pen point before the character is drawn.
@return The horizontal advance in pixels */
inline TInt TOpenFontCharMetrics::HorizAdvance() const
{
return iHorizAdvance;
}
/** Gets the vertical bearing X.
This is the distance in pixels from the pen point before the character is
drawn (the origin) to the left edge of the bitmap, when drawing vertically.
A positive value means that the left edge of the bitmap is right of the origin.
@return The vertical bearing X in pixels. */
inline TInt TOpenFontCharMetrics::VertBearingX() const
{
return iVertBearingX;
}
/** Gets the vertical bearing Y.
This is the distance in pixels from the pen point before the character is
drawn (the origin) to the top edge of the bitmap, when drawing vertically.
A positive value means that the top edge of the bitmap is above the origin.
@return The vertical bearing Y in pixels. */
inline TInt TOpenFontCharMetrics::VertBearingY() const
{
return iVertBearingY;
}
/** Gets the vertical advance.
When drawing vertically, this is the amount added to the y co-ordinate of
the origin after the character is drawn what most people understand by
the height of a character. The origin here is the pen point before the character
is drawn.
Note: Vertical drawing is not supported in v5.
@return The vertical advance in pixels. */
inline TInt TOpenFontCharMetrics::VertAdvance() const
{
return iVertAdvance;
}
/** Gets the bounds of the character relative to its origin when setting text
horizontally.
The origin here is the pen point before the character is drawn.
@param aBounds The character's bounds. */
inline void TOpenFontCharMetrics::GetHorizBounds(TRect& aBounds) const
{
aBounds.iTl.iX = iHorizBearingX;
aBounds.iTl.iY = -iHorizBearingY;
aBounds.iBr.iX = aBounds.iTl.iX + iWidth;
aBounds.iBr.iY = aBounds.iTl.iY + iHeight;
}
/** Gets the bounds of the character relative to its origin when setting text
vertically.
The origin here is the pen point before the character is drawn.
@param aBounds The character's bounds. */
inline void TOpenFontCharMetrics::GetVertBounds(TRect& aBounds) const
{
aBounds.iTl.iX = -iVertBearingX;
aBounds.iTl.iY = iVertBearingY;
aBounds.iBr.iX = aBounds.iTl.iX + iWidth;
aBounds.iBr.iY = aBounds.iTl.iY + iHeight;
}
/** Sets the width of the character's bitmap.
@param aWidth The width of the bitmap in pixels. */
inline void TOpenFontCharMetrics::SetWidth(TInt aWidth)
{
iWidth = (TInt16)aWidth;
}
/** Sets the height of the character's bitmap.
@param aHeight The character height (in pixels). */
inline void TOpenFontCharMetrics::SetHeight(TInt aHeight)
{
iHeight = (TInt16)aHeight;
}
/** Sets the horizontal bearing X.
This is the distance in pixels from the pen point before the character is
drawn (the origin) to the left edge of the bitmap, when drawing horizontally.
A positive value means that the left edge of the bitmap is right of the origin.
@param aHorizBearingX The horizontal bearing X (in pixels). */
inline void TOpenFontCharMetrics::SetHorizBearingX(TInt aHorizBearingX)
{
iHorizBearingX = (TInt16)aHorizBearingX;
}
/** Sets the horizontal bearing Y.
This is the distance in pixels from the pen point before the character is
drawn (the origin) to the top edge of the bitmap, when drawing horizontally.
A positive value means that the top edge of the bitmap is above the origin.
@param aHorizBearingY The horizontal bearing Y (in pixels). */
inline void TOpenFontCharMetrics::SetHorizBearingY(TInt aHorizBearingY)
{
iHorizBearingY = (TInt16)aHorizBearingY;
}
/** Sets the horizontal advance.
This is the amount added to the x co-ordinate of the origin after the character
is drawn, what most people understand by the width or escapement of a character.
The origin here is the pen point before the character is drawn.
@param aHorizAdvance The horizontal advance (in pixels). */
inline void TOpenFontCharMetrics::SetHorizAdvance(TInt aHorizAdvance)
{
iHorizAdvance = (TInt16)aHorizAdvance;
}
/** Set vertical bearing X.
This is the distance in pixels from the pen point before the character is
drawn (the origin) to the left edge of the bitmap, when drawing vertically.
A positive value means that the left edge of the bitmap is right of the origin.
@param aVertBearingX The vertical bearing X (in pixels). */
inline void TOpenFontCharMetrics::SetVertBearingX(TInt aVertBearingX)
{
iVertBearingX = (TInt16)aVertBearingX;
}
/** Sets the vertical bearing Y.
This is the distance in pixels from the pen point before the character is
drawn (the origin) to the top edge of the bitmap, when drawing vertically.
A positive value means that the top edge of the bitmap is above the origin.
@param aVertBearingY The vertical bearing Y (in pixels). */
inline void TOpenFontCharMetrics::SetVertBearingY(TInt aVertBearingY)
{
iVertBearingY = (TInt16)aVertBearingY;
}
/** Sets the vertical advance.
When drawing vertically, this is the amount added to the y co-ordinate of
the origin after the character is drawn what most people understand by
the height of a character. The origin here is the pen point before the character
is drawn.
Note: Vertical drawing is not supported in v5.
@param aVertAdvance The vertical advance (in pixels). */
inline void TOpenFontCharMetrics::SetVertAdvance(TInt aVertAdvance)
{
iVertAdvance = (TInt16)aVertAdvance;
}
/** Gets the character metrics for this font.
@return The character metrics for this font. */
inline const TOpenFontMetrics& COpenFont::Metrics() const
{
return iMetrics;
}
/** Gets the glyph index.
This is the index of a particular glyph within the font file.
Note: This makes it possible to gain access to glyphs which are not referenced
by the Unicode character set. However, this feature is not yet supported by
Symbian OS.
@return The glyph index.
@see SetGlyphIndex() */
inline TInt TOpenFontGlyphData::GlyphIndex() const
{
return iGlyphIndex;
}
/** Gets the typeface attributes.
These are the attributes of the font represented by this object.
@return The typeface attributes. */
inline const TOpenFontFaceAttrib* COpenFont::FaceAttrib() const
{
return iFileOffset == 0 ? NULL : &File()->FaceAttrib(iFaceIndex);
}
/** Gets a pointer to the COpenFontFile which created this object.
This is the COpenFontFile which owns the file that contains the definition
of the typeface. It can be used to get information about the typeface, or
to access the rasterizer context (engine).
@return The COpenFontFile which created this object. */
inline COpenFontFile* COpenFont::File() const
{
return iFileOffset == 0 ? NULL : reinterpret_cast<COpenFontFile*>(const_cast<COpenFont*>(PtrAdd(this, iFileOffset)));
}
/** Gets the index of this typeface within the font file.
@return The index of this typeface within the font file. */
inline TInt COpenFont::FaceIndex() const
{
return iFaceIndex;
}
/** Tests whether or not a character needs to be rasterized.
Characters that have been rasterized are cached there is no need to regenerate
the character bitmap. This function should only be called by the Font and
Bitmap server.
@param aSessionHandle A handle to the font and bitmap server session.
@param aCode The code for the Unicode character.
@return ETrue if the character needs to be rasterized, otherwise EFalse. */
inline TBool COpenFont::CharacterNeedsToBeRasterized(TInt aSessionHandle,TInt aCode) const
{
return Glyph(aSessionHandle,aCode) == NULL;
}
/** Gets the ascent of an ANSI capital letter in the font whether or not
there are any ANSI capitals in the font.
@return The positive distance from the font baseline to the top of a
standard ANSI capital letter
@publishedAll
@released
@see AscentInPixels()
*/
inline TInt COpenFont::FontCapitalAscent() const
{
return iFontCapitalAscent;
}
/** Gets the max ascent of any pre-composed glyph in the font. This will
include accents or diacritics that form part of pre-composed glyphs. It is
not guaranteed to cover the max ascent of composite glyphs that have to be
created by a layout engine. This is also the recommended distance between
the top of a text box and the baseline of the first line of text.
The value may be affected by the TLanguage value set by SetScriptTypeForMetrics().
@return The positive distance from the font baseline to the top of the
highest pre-composed glyph (including accents) above the baseline.
@publishedAll
@released
@see AscentInPixels()
@see SetScriptTypeForMetrics()
*/
inline TInt COpenFont::FontMaxAscent() const
{
return iFontMaxAscent;
}
/** Gets the descent of an ANSI descending character in the font.
Whether or not there are any ANSI descenders in the font.
The value may be affected by the TLanguage value set by SetScriptTypeForMetrics().
@return The positive distance from the font baseline to the bottom of the
lowest ANSI descender.
@publishedAll
@released
@see DescentInPixels()
@see SetScriptTypeForMetrics()
*/
inline TInt COpenFont::FontStandardDescent() const
{
return iFontStandardDescent;
}
/** Gets the max descent of any pre-composed glyph in the font. This will
include accents or diacritics that form part of pre-composed glyphs. It is
not guaranteed to cover the max descent of composite glyphs that have to be
created by a layout engine.
The value may be affected by the TLanguage value set by SetScriptTypeForMetrics().
@return The positive distance from the font baseline to the bottom of the
lowest pre-composed glyph (including accents) below the baseline
@publishedAll
@released
@see DescentInPixels()
@see SetScriptTypeForMetrics()
*/
inline TInt COpenFont::FontMaxDescent() const
{
return iFontMaxDescent;
}
/** Gets the suggested line gap for the font. This is the recommended
baseline to baseline distance between successive lines of text in the font.
@return The positive recommended gap between successive lines
@publishedAll
@released
*/
inline TInt COpenFont::FontLineGap() const
{
return iFontLineGap;
}
/** Gets the maximum height for the font. This is the sum of the max ascent
of the font and the max descent of the font.
The value may be affected by the TLanguage value set by SetScriptTypeForMetrics().
@return The positive maximum height of the font
@publishedAll
@released
@see HeightInPixels()
@see SetScriptTypeForMetrics()
*/
inline TInt COpenFont::FontMaxHeight() const
{
return iFontMaxAscent + iFontMaxDescent;
}
/** Default C++ constructor.
This sets all attribute fields to zero. As for other T classes, there is no
need to explicitly clean-up objects derived from this class. */
inline TOpenFontFaceAttribBase::TOpenFontFaceAttribBase()
{
Mem::FillZ(this,sizeof(*this));
}
/** Default C++ constructor.
The function initialises the minimum typeface size to zero, the names to NULL,
and the coverage and style flags to zero. */
inline TOpenFontFaceAttrib::TOpenFontFaceAttrib():
iMinSizeInPixels(0),
iReserved2(0)
{
}
/** Tests for support of Latin characters.
Note: A return value of ETrue implies that the font has a usable set of
characters. It does not imply exhaustive coverage.
@return ETrue if Latin characters are supported */
inline TBool TOpenFontFaceAttribBase::HasLatin() const
{
return iCoverage[0] & ELatinSet;
}
/** Tests for support of Greek characters.
Note: A return value of ETrue implies that the font has a usable set of
characters. It does not imply exhaustive coverage.
@return ETrue if Greek characters are supported. */
inline TBool TOpenFontFaceAttribBase::HasGreek() const
{
return iCoverage[0] & EGreekSet;
}
/** Tests for support of Cyrillic characters.
Note: A return value of ETrue implies that the font has a usable set of
characters. It does not imply exhaustive coverage.
@return ETrue if Cyrillic characters are supported. */
inline TBool TOpenFontFaceAttribBase::HasCyrillic() const
{
return iCoverage[0] & ECyrillicSet;
}
/** Tests for support of Japanese syllabic characters.
This function tests for the presence of Hiragana and Katakana syllabic
characters in the font, collectively called kana. These characters are not
sufficient for the Japanese language, which also makes use of Chinese characters.
Note: A return value of ETrue implies that the font has a usable set of
characters. It does not imply exhaustive coverage.
@return ETrue if Japanese characters are supported
@see HasCJK() */
inline TBool TOpenFontFaceAttribBase::HasKana() const
{
return iCoverage[1] & EKanaSets;
}
/** Tests for support of Korean Hangul characters.
Korean may also make use of Chinese characters.
Note: A return value of ETrue implies that the font has a usable set of
characters. It does not imply exhaustive coverage.
@return ETrue if Korean characters are supported
@see HasCJK() */
inline TBool TOpenFontFaceAttribBase::HasHangul() const
{
return iCoverage[1] & EHangulSet;
}
/** Tests for support of Chinese ideographic characters.
These are used in Chinese, Japanese and Korean.
Note: A return value of ETrue implies that the font has a usable set of
characters. It does not imply exhaustive coverage.
@return ETrue if Chinese ideographs are supported. */
inline TBool TOpenFontFaceAttribBase::HasCJK() const
{
return iCoverage[1] & ECJKSet;
}
/** Tests if the typeface contains symbols only.
@return ETrue if the typeface contains symbols only. */
inline TBool TOpenFontFaceAttribBase::IsSymbol() const
{
return iCoverage[0] == 0 && iCoverage[2] == 0 && iCoverage[3] == 0 &&
iCoverage[1] & ESymbolSets && !(iCoverage[1] & ~ESymbolSets);
}
/** Tests if the typeface is inherently bold.
@return ETrue if the typeface is inherently bold. */
inline TBool TOpenFontFaceAttribBase::IsBold() const
{
return iStyle & EBold;
}
/** Tests if the typeface is inherently italic.
@return ETrue if the typeface is inherently italic. */
inline TBool TOpenFontFaceAttribBase::IsItalic() const
{
return iStyle & EItalic;
}
/** Tests if the typeface has serifs.
@return ETrue if the typeface has serifs. */
inline TBool TOpenFontFaceAttribBase::IsSerif() const
{
return iStyle & ESerif;
}
/** Tests if all the characters have the same width.
@return ETrue if all the characters have the same width. */
inline TBool TOpenFontFaceAttribBase::IsMonoWidth() const
{
return iStyle & EMonoWidth;
}
/** Gets the typeface's name.
@return Descriptor containing typeface name. */
inline TPtrC TOpenFontFaceAttribBase::Name() const
{
return iName;
}
/** Gets the full name.
The full name of the typeface includes style attributes like Italic, Bold,
and Cursive.
@return The full name of the typeface.
@see FamilyName() */
inline TPtrC TOpenFontFaceAttrib::FullName() const
{
return Name();
}
/** Gets the family name.
Note: The family name of the typeface does not include style attributes like
"Italic".
@return The family name of the typeface.
@see FullName() */
inline TPtrC TOpenFontFaceAttrib::FamilyName() const
{
return iFamilyName;
}
/** Gets the local full name.
The local full name of the typeface includes style attributes like Italic,
Bold, and Cursive.
The local name of the typeface is the name in the language of the current
locale, where this is provided by the font file. If the local name is not
available then the local name will be the same as the ordinary name.
@return The local full name of the typeface. */
inline TPtrC TOpenFontFaceAttrib::LocalFullName() const
{
return iLocalFullName;
}
/** Gets the local family name.
The local name of the typeface is the name in the language of the current
locale, where this is provided by the font file. If the local name is not
available then the local name will be the same as the ordinary name.
Note: The family name of the typeface does not include style attributes like
'Italic'.
@return The local family name of the typeface. */
inline TPtrC TOpenFontFaceAttrib::LocalFamilyName() const
{
return iLocalFamilyName;
}
/** Gets the short full name.
This is the full name of the typeface, truncated to KMaxTypefaceNameLength,
if necessary.
Note: Short names are names truncated to KMaxTypefaceNameLength (24) characters
where necessary so that they can be used in the TTypeFace class. The Open
Font Framework allows 32 characters as a maximum name length.
@return The short full name of the typeface.
@see FullName() */
inline TPtrC TOpenFontFaceAttrib::ShortFullName() const
{
// Can't use TDesC::Left for this because it panics if the desired length is > the existing length!
return TPtrC(iName.Ptr(),Min(iName.Length(),KMaxTypefaceNameLength));
}
/** Gets the short family name.
This is the family name, truncated to KMaxTypefaceNameLength, if necessary.
Note: Short names are names truncated to KMaxTypefaceNameLength (24) characters
where necessary so that they can be used in the TTypeFace class. The Open
Font Framework allows 32 characters as a maximum name length.
@return The short family name of the typeface.
@see FamilyName() */
inline TPtrC TOpenFontFaceAttrib::ShortFamilyName() const
{
return TPtrC(iFamilyName.Ptr(),Min(iFamilyName.Length(),KMaxTypefaceNameLength));
}
/** Gets the short local full name.
This is the local full name of the typeface, truncated to KMaxTypefaceNameLength,
if necessary.
Note: Short names are names truncated to KMaxTypefaceNameLength (24) characters
where necessary so that they can be used in the TTypeFace class. The Open
Font Framework allows 32 characters as a maximum name length.
@return The short local full name of the typeface.
@see LocalFullName() */
inline TPtrC TOpenFontFaceAttrib::ShortLocalFullName() const
{
return TPtrC(iLocalFullName.Ptr(),Min(iLocalFullName.Length(),KMaxTypefaceNameLength));
}
/** Gets the short local family name.
This is the local family name of the typeface, truncated to KMaxTypefaceNameLength,
if necessary.
Note: Short names are names truncated to KMaxTypefaceNameLength (24) characters
where necessary so that they can be used in the TTypeFace class. The Open
Font Framework allows 32 characters as a maximum name length.
@return The short local family name of the typeface.
@see LocalFamilyName() */
inline TPtrC TOpenFontFaceAttrib::ShortLocalFamilyName() const
{
return TPtrC(iLocalFamilyName.Ptr(),Min(iLocalFamilyName.Length(),KMaxTypefaceNameLength));
}
/** Gets a pointer to the sets of flags that indicate the font's Unicode coverage.
Each flag that is set represents a supported Unicode range. The mapping is
defined in the TrueType documentation under the OS/2 table.
Note: Some useful subsets are defined as anonymous enumerated constants at the end
of this class, see ELatinSet etc.
@return A pointer to the flags that indicate the font's Unicode coverage.
The flags are stored in an array of four 32-bit integers. When no information
is available, all four integers are zero.
@see SetCoverage() */
inline const TUint* TOpenFontFaceAttribBase::Coverage() const
{
return iCoverage;
}
/** Gets the minimum typeface size.
This is the smallest size that can be drawn legibly.
@return The minimum typeface size (in pixels). */
inline TInt TOpenFontFaceAttrib::MinSizeInPixels() const
{
return iMinSizeInPixels;
}
/** Sets the name attribute.
@param aName Descriptor containing typeface name. */
inline void TOpenFontFaceAttribBase::SetName(const TDesC& aName)
{
iName = TPtrC(aName.Ptr(),Min(aName.Length(),(TInt)ENameLength));
}
/** Sets the full name.
@param aName The full name of the typeface.
@see FullName() */
inline void TOpenFontFaceAttrib::SetFullName(const TDesC& aName)
{
SetName(aName);
}
/** Sets the family name.
@param aName The family name of the typeface.
@see FamilyName() */
inline void TOpenFontFaceAttrib::SetFamilyName(const TDesC& aName)
{
iFamilyName = TPtrC(aName.Ptr(),Min(aName.Length(),(TInt)ENameLength));
}
/** Sets the local full name.
@param aName The local full name of the typeface.
@see LocalFullName() */
inline void TOpenFontFaceAttrib::SetLocalFullName(const TDesC& aName)
{
iLocalFullName = TPtrC(aName.Ptr(),Min(aName.Length(),(TInt)ENameLength));
}
/** Sets the local family name.
@param aName The local family name of the typeface.
@see LocalFamilyName() */
inline void TOpenFontFaceAttrib::SetLocalFamilyName(const TDesC& aName)
{
iLocalFamilyName = TPtrC(aName.Ptr(),Min(aName.Length(),(TInt)ENameLength));
}
/** Sets the coverage flags.
The flags are held in four 32 bit integers. Each flag that is set represents
a range of Unicode characters that is supported by the typeface: Latin,
Greek, Cyrillic etc. The mapping is defined in the TrueType documentation
under the OS/2 table.
Note: Some useful subsets are defined as anonymous enumerated constants at
the end of this class, see ELatinSet etc.
@param aCoverage0 The first set of coverage flags (bits 0-31).
@param aCoverage1 The second set of coverage flags (bits 32-63).
@param aCoverage2 The third set of coverage flags (bits 64-95).
@param aCoverage3 The fourth set of coverage flags (bits 96-127). */
inline void TOpenFontFaceAttribBase::SetCoverage(TUint aCoverage0,TUint aCoverage1,TUint aCoverage2,TUint aCoverage3)
{
iCoverage[0] = aCoverage0;
iCoverage[1] = aCoverage1;
iCoverage[2] = aCoverage2;
iCoverage[3] = aCoverage3;
}
/** Set the minimum typeface size.
This is the smallest size that can be drawn legibly.
@param aSize Sets the minimum typeface size (in pixels).
@see MinSizeInPixels() */
inline void TOpenFontFaceAttrib::SetMinSizeInPixels(TInt aSize)
{
iMinSizeInPixels = aSize;
}
/** Equality operator.
Compares this and another set of font attributes, including the coverage,
the family name, the local full name, the local family name, and the minimum
size in pixels.
@param aAttrib Contains the font attributes and names to compare.
@return ETrue if all values are equal, EFalse if not. */
inline TBool TOpenFontFaceAttrib::operator==(const TOpenFontFaceAttrib& aAttrib) const
{
return TOpenFontFaceAttribBase::operator==(aAttrib) &&
iFamilyName == aAttrib.iFamilyName &&
iLocalFullName == aAttrib.iLocalFullName &&
iLocalFamilyName == aAttrib.iLocalFamilyName &&
iMinSizeInPixels == aAttrib.iMinSizeInPixels;
}
/** Sets the bold attribute.
@param aBold The bold attribute takes this value: ETrue or EFalse. */
inline void TOpenFontFaceAttribBase::SetBold(TBool aBold)
{
if (aBold)
iStyle |= EBold;
else
iStyle &= ~EBold;
}
/** Sets the italic attribute.
@param aItalic The italic attribute takes this value ETrue or EFalse. */
inline void TOpenFontFaceAttribBase::SetItalic(TBool aItalic)
{
if (aItalic)
iStyle |= EItalic;
else
iStyle &= ~EItalic;
}
/** Sets the serif attribute.
@param aSerif The serif attribute takes this value ETrue or EFalse. */
inline void TOpenFontFaceAttribBase::SetSerif(TBool aSerif)
{
if (aSerif)
iStyle |= ESerif;
else
iStyle &= ~ESerif;
}
/** Sets the mono-width attribute.
@param aMonoWidth The mono-width attribute takes this value: ETrue or EFalse. */
inline void TOpenFontFaceAttribBase::SetMonoWidth(TBool aMonoWidth)
{
if (aMonoWidth)
iStyle |= EMonoWidth;
else
iStyle &= ~EMonoWidth;
}
/** Equality operator.
Compares this and a specified set of font attributes, including the coverage
and the typeface name.
In version 6.1, and earlier, the return value was TInt.
@param aAttrib The font attributes to compare. This is an object of TOpenFontFaceAttribBase
or of a derived class.
@return ETrue if the values are equal. */
inline TBool TOpenFontFaceAttribBase::operator==(const TOpenFontFaceAttribBase& aAttrib) const
{
return iStyle == aAttrib.iStyle &&
iCoverage[0] == aAttrib.iCoverage[0] &&
iCoverage[1] == aAttrib.iCoverage[1] &&
iCoverage[2] == aAttrib.iCoverage[2] &&
iCoverage[3] == aAttrib.iCoverage[3] &&
iName.CompareF(aAttrib.iName) == 0;
}
/** Compares this and another open font specification. Compares all the properties
of the two fonts.
@publishedAll
@released
@param aFontSpec The open font specification to compare with this one.
@return ETrue if all values are equal, EFalse if not.
*/
inline TBool TOpenFontSpec::operator==(const TOpenFontSpec& aOpenFontSpec) const
{
return
iHeight == aOpenFontSpec.iHeight &&
iWidthFactor == aOpenFontSpec.iWidthFactor &&
iSlantFactor == aOpenFontSpec.iSlantFactor &&
iBitmapType == aOpenFontSpec.iBitmapType &&
iEffects == aOpenFontSpec.iEffects &&
iSymbol == aOpenFontSpec.iSymbol &&
iPrintPosition == aOpenFontSpec.iPrintPosition &&
TOpenFontFaceAttribBase::operator==(aOpenFontSpec);
}
/** Gets the height of the font.
@return The height of the font, in pixels or twips.
@see SetHeight() */
inline TInt TOpenFontSpec::Height() const
{
return iHeight;
}
/** Gets the algorithmic width factor.
@return The algorithmic width factor as a 16.16 fixed-point number.
@see SetWidthFactor() */
inline TInt32 TOpenFontSpec::WidthFactor() const
{
return iWidthFactor;
}
/** Gets the algorithmic slant factor.
@return The algorithmic slant factor as a 16.16 fixed-point number.
@see SetSlantFactor() */
inline TInt32 TOpenFontSpec::SlantFactor() const
{
return iSlantFactor;
}
/** Gets the anti-aliasing setting for the font, as set by SetBitmapType().
@return Indicates whether or not the font should be drawn using anti-aliasing. */
inline TGlyphBitmapType TOpenFontSpec::BitmapType() const
{
return (TGlyphBitmapType)iBitmapType;
}
/** Gets the font effects flags.
Because the flags encoded in the Effects are anonymous, the return value should only
be tested for the specific bits that are of interest, and never tested as a whole.
@publishedAll
@released
@return The font effects flags.
@see TOpenFontSpec::SetEffects()
*/
inline TUint32 TOpenFontSpec::Effects() const
{
return iEffects;
}
/** Gets the print position.
@return The print position. */
inline TFontPrintPosition TOpenFontSpec::PrintPosition() const
{
return iPrintPosition;
}
/** Sets the font's height.
@param aHeight The font's height, in pixels or twips.
@see Height() */
inline void TOpenFontSpec::SetHeight(TInt aHeight)
{
iHeight = aHeight;
}
/** Sets the algorithmic width factor.
The width factor is multiplied by the pixel's x position to get the new position,
causing characters to become wider or narrower. A width factor of 1 (65536
in 16.16 fixed-point number format) should be used if the character width
is not to be changed.
@param aWidthFactor The algorithmic width factor as a 16.16 fixed-point number.
@see WidthFactor() */
inline void TOpenFontSpec::SetWidthFactor(TInt32 aWidthFactor)
{
iWidthFactor = aWidthFactor;
}
/** Sets the algorithmic slant factor.
Note: The slant factor is used to create an italic effect for characters which
do not have an italic glyph in the typeface. When slanting is active, pixel x
co-ordinates are shifted by a factor relative to the y co-ordinate (i.e. x
= x + y x slant factor).
The slant factor is a 32 bit, 16.16 fixed-point number. This means that the
first 16 bits are treated as a whole number, and the second 16 as the fractional
part. e.g. if aSlantFactor=0, there is no slant. If aSlantFactor=65536 this
is equivalent to an integer slant value of 1, which causes a 45 degree slant
on the character.
@param aSlantFactor The slant factor as a 16.16 fixed-point number.
@see SlantFactor() */
inline void TOpenFontSpec::SetSlantFactor(TInt32 aSlantFactor)
{
iSlantFactor = aSlantFactor;
}
/** Sets whether the font should be drawn using anti-aliasing. If set, this value
overrides the default setting (set by CFbsTypefaceStore::SetDefaultBitmapType())
for this font.
Anti-aliasing can only be used for scalable fonts. There is currently no anti-aliasing
support for bitmapped fonts.
@param aBitmapType Indicates whether or not the font should be drawn using
anti-aliasing. */
inline void TOpenFontSpec::SetBitmapType(TGlyphBitmapType aBitmapType)
{
iBitmapType = aBitmapType;
}
/** Sets the font effects flags.
Prior to calling this routine, the value from Effects() should be read,
and its flags modified as required, before passing them back in.
@publishedAll
@released
@param aEffect The font effects flags to be set.
@see TOpenFontSpec::Effects()
*/
inline void TOpenFontSpec::SetEffects(TUint32 aEffects)
{
iEffects = aEffects;
}
/** Gets the font file's UID.
@return The uid of the file. */
inline TUid COpenFontFile::Uid() const
{
return iUid;
}
/** Gets the full path and filename of the font file
This is the filename that was passed to the constructor when the object is
created.
@return The filename of the font file. */
inline const TDesC& COpenFontFile::FileName() const
{
return iFileName;
}
/** Gets the typeface at a specified index in the typeface attribute array.
@param aFaceIndex The index of the typeface for which the attributes are required.
@return The attributes of the typeface with the specified index.
@see AddFaceL()
@see FaceCount() */
inline const TOpenFontFaceAttrib& COpenFontFile::FaceAttrib(TInt aFaceIndex) const
{
return iFaceAttrib[aFaceIndex];
}
/** Gets the number of typefaces in the typeface attributes array.
This is the number of typefaces in the font file: the attributes for each
typeface should be loaded into the array when the derived object is constructed.
@return The number of typefaces in the font file.
@see AddFaceL()
@see FaceAttrib() */
inline TInt COpenFontFile::FaceCount() const
{
return iFaceAttrib.Count();
}
/** Increments a reference count by one.
@see DecRefCount() */
inline void COpenFontFile::IncRefCount()
{
iRefCount++;
}
/** Decrement a reference count by one.
@return ETrue if the reference count has reached zero (i.e. is less than or
equal to zero); EFalse if the reference count has not yet reached zero (i.e.
is positive).
@see IncRefCount() */
inline TBool COpenFontFile::DecRefCount()
{
iRefCount--;
return iRefCount <= 0;
}
/** Default C++ constructor. */
inline COpenFontRasterizerContext::COpenFontRasterizerContext():
iGlyphData(NULL)
{
}
/** Start writing the glyph data.
Use this function to initialise the buffer to which the glyph bitmap is to
be written. Call WriteGlyphBit() to add bits to the buffer.
@param aGlyphData A pointer to the glyph data. */
inline void COpenFontRasterizerContext::StartGlyph(TOpenFontGlyphData* aGlyphData)
{
aGlyphData->SetPointersToInternalBuffers();
iGlyphData = aGlyphData;
iGlyphDataStart = iGlyphDataPtr = aGlyphData->BufferStart();
// Allow 4 extra bytes; BITGDI requires this.
iGlyphDataEnd = aGlyphData->BufferEnd() - 4;
iGlyphBit = 1;
*iGlyphDataPtr = 0;
iBytesNeeded = 1;
iOverflow = FALSE;
}
/** Writes a bit to the glyph buffer.
Before calling this function you should first call StartGlyph().
@param aBit The bit to be added to the buffer. */
inline void COpenFontRasterizerContext::WriteGlyphBit(TInt aBit)
{
if (aBit && !iOverflow)
*iGlyphDataPtr |= iGlyphBit;
iGlyphBit <<= 1;
if (iGlyphBit == 256)
{
iGlyphBit = 1;
iBytesNeeded++;
if (++iGlyphDataPtr < iGlyphDataEnd)
*iGlyphDataPtr = 0;
else
iOverflow = TRUE;
}
}
/** Writes a byte to the glyph buffer.
Before calling this function you should first call StartGlyph().
@param aByte The byte to be added to the buffer. */
inline void COpenFontRasterizerContext::WriteGlyphByte(TInt aByte)
{
if (iGlyphDataPtr < iGlyphDataEnd)
*iGlyphDataPtr++ = (TUint8)aByte;
else
iOverflow = TRUE;
iBytesNeeded++;
}
/** Completes writing glyph data.
Use this function to complete writing the glyph bitmap to the buffer. Call
it after adding all necessary bits using WriteGlyphBit(). */
inline void COpenFontRasterizerContext::EndGlyph()
{
// Add 4 bytes to the data size; some BITGDI functions require this.
iGlyphData->SetBytesNeeded(iBytesNeeded + 4);
iGlyphData = NULL;
}
/** Tests whether the bitmap buffer is large enough to hold the bitmap.
@return ETrue if the bitmap will overflow its buffer, otherwise EFalse. */
inline TBool TOpenFontGlyphData::Overflow() const
{
return iBytesNeeded > iBitmapBufferSize;
}
/** Gets the number of bytes needed to store the glyph bitmap.
@return The number of bytes needed to store the glyph bitmap.
@see SetBytesNeeded() */
inline TInt TOpenFontGlyphData::BytesNeeded() const
{
return iBytesNeeded;
}
/** Gets a constant pointer descriptor containing the bitmap this object
represents.
@return Pointer descriptor for the glyph. */
inline TPtrC8 TOpenFontGlyphData::Bitmap() const
{
return TPtrC8(iBitmap,iBytesNeeded);
}
/** Gets a pointer to the bitmap.
This points either to the buffer used to write the bitmap when it is first
rasterized, or to the cache if the character was already rasterized.
@return A pointer to the bitmap. */
inline const TUint8* TOpenFontGlyphData::BitmapPointer() const
{
return iBitmap;
}
/** Gets the character's metrics.
@return The character's open font metrics. */
inline const TOpenFontCharMetrics* TOpenFontGlyphData::Metrics() const
{
return iMetrics;
}
/** Gets a pointer to the start of the bitmap buffer.
@return A pointer to the start of the bitmap buffer. */
inline TUint8* TOpenFontGlyphData::BufferStart()
{
return iBitmapBuffer;
}
/** Gets a pointer to the end of the bitmap buffer.
@return A pointer to the end of the bitmap buffer. */
inline TUint8* TOpenFontGlyphData::BufferEnd()
{
return iBitmapBuffer + iBitmapBufferSize;
}
/** Sets the number of bytes needed to store the glyph bitmap.
@param aBytes The number of bytes needed to store the glyph bitmap.
@see BytesNeeded() */
inline void TOpenFontGlyphData::SetBytesNeeded(TInt aBytes)
{
iBytesNeeded = aBytes;
}
/** Sets the pointer to the bitmap buffer.
@param aBitmap The pointer to the bitmap buffer. */
inline void TOpenFontGlyphData::SetBitmapPointer(const TUint8* aBitmap)
{
iBitmap = aBitmap;
}
/** Sets the character's metrics, passing a pointer to a TOpenFontCharMetrics object.
@param aMetrics A pointer to the character's open font character metrics. */
inline void TOpenFontGlyphData::SetMetricsPointer(const TOpenFontCharMetrics* aMetrics)
{
iMetrics = aMetrics;
}
/** Sets the bitmap and metrics pointers to point to the internal buffers.
The alternative is that the pointers point to the cache of metrics and bitmaps
that have already been rasterized. */
inline void TOpenFontGlyphData::SetPointersToInternalBuffers()
{
iBitmap = iBitmapBuffer;
iMetrics = &iMetricsBuffer;
}
/** Sets the character's metrics, passing a reference to a TOpenFontCharMetrics
object.
@param aMetrics The character's open font character metrics. */
inline void TOpenFontGlyphData::SetMetrics(TOpenFontCharMetrics& aMetrics)
{
iMetricsBuffer = aMetrics;
iMetrics = &iMetricsBuffer;
}
/** Sets the glyph index.
@param aGlyphIndex The glyph index. */
inline void TOpenFontGlyphData::SetGlyphIndex(TInt aGlyphIndex)
{
iGlyphIndex = aGlyphIndex;
}
/** Uses ECOM plug-in framework to instantiate the shaper factory interface
implementation given its implementation UID.
@param aInterfaceImplUid The UID of the interface implementation required
@return CShaperFactory* A pointer to a CShaperFactory object. */
inline CShaperFactory* CShaperFactory::NewL(TUid aInterfaceImplUid)
{
return reinterpret_cast <CShaperFactory*> (
REComSession::CreateImplementationL(
aInterfaceImplUid,
_FOFF(CShaperFactory, iDtor_ID_Key)));
}
/** Default destructor */
inline CShaperFactory::~CShaperFactory()
{
REComSession::DestroyedImplementation(iDtor_ID_Key);
}
#endif // __OPENFONT_H__