williamr@4: /* williamr@4: * Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@4: * All rights reserved. williamr@4: * This component and the accompanying materials are made available williamr@4: * under the terms of "Eclipse Public License v1.0" williamr@4: * which accompanies this distribution, and is available williamr@4: * at the URL "http://www.eclipse.org/legal/epl-v10.html". williamr@4: * williamr@4: * Initial Contributors: williamr@4: * Nokia Corporation - initial contribution. williamr@4: * williamr@4: * Contributors: williamr@4: * williamr@4: * Description: williamr@4: * williamr@4: */ williamr@4: williamr@2: williamr@2: #ifndef FNTSTORE_H__ williamr@2: #define FNTSTORE_H__ williamr@2: williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: #include williamr@4: #include williamr@4: williamr@4: williamr@4: /** Defines the maximum number of linked typefaces that may be placed in a linked typeface specification williamr@4: WARNING: Constant for internal use ONLY. Compatibility is not guaranteed in future releases. williamr@4: @publishedAll williamr@4: @released williamr@4: */ williamr@4: const TInt KMaxLinkedTypefaces = 12; williamr@4: /** Defines the maximum number of linked typeface groups that may be placed in a linked typeface specification williamr@4: WARNING: Constant for internal use ONLY. Compatibility is not guaranteed in future releases. williamr@4: @publishedAll williamr@4: @released williamr@4: */ williamr@4: const TInt KMaxLinkedTypefaceGroups = 12; williamr@4: williamr@4: /** Defines the maximun number of threads that may tranverse the COpenFontSessionCacheList (read-only) williamr@4: @publishedAll williamr@4: @released williamr@4: */ williamr@4: const TInt KSessionCacheSemaphoreCount = 12; williamr@4: williamr@4: /** Defines the name of the semaphore which is used to exclude threads that may tranverse williamr@4: * the COpenFontSessionCacheList (read-only) with FBserv. williamr@4: @publishedAll williamr@4: @released williamr@4: */ williamr@4: _LIT(KSessionCacheSemaphoreName,"FBSSessionCacheSemaphore"); williamr@2: williamr@2: class CLinkedTypefaceSpecification; williamr@4: class TLinkedTypefaceSpecificationArgs; williamr@2: class CFbClient; williamr@2: class CFontStoreFile; williamr@2: class CFontBitmap; williamr@2: class RReadStream; williamr@2: class TTypefaceFontBitmap; williamr@2: class TShapeHeader; williamr@2: class TShapeMessageParameters; williamr@2: class CTypefaceSupportInfo; williamr@4: class COpenFontRasterizer; williamr@4: class CLinkedTypefaceGroup; williamr@4: IMPORT_C extern const TInt8 KLinkedFontDrive; williamr@4: IMPORT_C extern const TUint32 KFontTable_GlyphOutline_CacheMaxMem; williamr@2: williamr@2: /** williamr@4: WARNING: Class for internal use ONLY. Compatibility is not guaranteed in future releases. williamr@4: @publishedAll williamr@4: @released williamr@4: */ williamr@2: class TCharacterMetrics williamr@2: { williamr@4: public: williamr@2: IMPORT_C TCharacterMetrics(); williamr@2: williamr@4: public: williamr@2: TInt16 iAscentInPixels; williamr@2: TInt16 iHeightInPixels; williamr@2: TInt16 iLeftAdjustInPixels; williamr@2: TInt16 iMoveInPixels; williamr@2: TInt16 iRightAdjustInPixels; williamr@2: }; williamr@2: williamr@2: /** williamr@2: An algorithmic style for how a font is drawn. williamr@2: williamr@2: Holds attributes such as whether the font is bold or italic, and the width williamr@2: and height factors. This is used as an input parameter for the GetFontById() method williamr@2: of some font management classes. See CWsScreenDevice::GetFontById() for more information. williamr@2: @publishedAll williamr@2: @released williamr@2: @see CWsScreenDevice::GetFontById() williamr@2: @see CFbsTypefaceStore::GetFontById() williamr@2: @see CFbsDevice::GetFontById() williamr@2: */ williamr@4: class TAlgStyle williamr@2: { williamr@2: public: williamr@2: IMPORT_C TAlgStyle(); williamr@2: IMPORT_C void SetIsBold(TBool aIsBold); williamr@2: IMPORT_C void SetIsItalic(TBool aIsItalic); williamr@2: IMPORT_C void SetIsMono(TBool aIsMono); williamr@2: IMPORT_C void SetWidthFactor(TInt aWidthFactor); williamr@2: IMPORT_C void SetHeightFactor(TInt aHeightFactor); williamr@2: IMPORT_C TBool IsBold() const; williamr@2: IMPORT_C TBool IsItalic() const; williamr@2: IMPORT_C TBool IsMono() const; williamr@2: IMPORT_C TInt WidthFactor() const; williamr@2: IMPORT_C TInt HeightFactor() const; williamr@2: IMPORT_C TBool operator==(const TAlgStyle& aAlgStyle) const; williamr@2: TBool operator!=(const TAlgStyle& aAlgStyle) const; williamr@2: public: williamr@2: /** Baseline offset in pixels. */ williamr@2: TInt iBaselineOffsetInPixels; williamr@2: private: williamr@2: enum williamr@2: { williamr@2: EBold=1, williamr@2: EItalic=2, williamr@2: EMono=4, williamr@2: }; williamr@2: /** This member is private and not intended for use. */ williamr@2: TInt8 iFlags; williamr@2: /** This member is private and not intended for use. */ williamr@2: TInt8 iWidthFactor; williamr@2: /** This member is private and not intended for use. */ williamr@2: TInt8 iHeightFactor; williamr@2: }; williamr@2: williamr@2: /** williamr@2: Bitmap font class. williamr@2: An object of this class may either access and use a bitmap font (a CFontBitmap) williamr@2: or an open font (a COpenFont). williamr@2: Stored in a CFontStore. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: class CBitmapFont : public CFont williamr@2: { williamr@4: friend class CFbsFont; williamr@2: friend class CFontStore; williamr@4: friend class CFbsBitGc; williamr@2: public: williamr@2: // New functions williamr@2: TUid Uid() const; williamr@2: IMPORT_C TCharacterMetrics CharacterMetrics(TInt aCode,const TUint8*& aBytes) const; williamr@2: IMPORT_C TBool GetCharacterData(TInt aSessionHandle, TInt aCode, TOpenFontCharMetrics& aMetrics, const TUint8*& aBitmap) const; williamr@2: IMPORT_C TBool Rasterize(TInt aSessionHandle,TInt aCode,TOpenFontGlyphData* aGlyphData) const; williamr@2: IMPORT_C void GetFontMetrics(TOpenFontMetrics& aMetrics) const; williamr@2: IMPORT_C TBool GetFaceAttrib(TOpenFontFaceAttrib& aAttrib) const; williamr@2: IMPORT_C TInt BitmapEncoding() const; williamr@2: IMPORT_C TBool HasCharacterL(TInt aCode) const; williamr@2: IMPORT_C TBool CharacterNeedsToBeRasterized(TInt aSessionHandle,TInt aCode) const; williamr@2: IMPORT_C TShapeHeader* ShapeTextL(const TDesC16& aText, williamr@2: TInt aSessionHandle, const TShapeMessageParameters& aParams); williamr@2: IMPORT_C void DeleteShape(TInt aSessionHandle,TShapeHeader* aHeader); williamr@2: IMPORT_C void operator delete(TAny*); williamr@2: inline TBool IsOpenFont() const; williamr@2: inline COpenFont* OpenFont() const; williamr@2: inline TGlyphBitmapType GlyphBitmapType() const; williamr@4: IMPORT_C TUint32 UniqueFontId(); williamr@4: IMPORT_C TInt GetFontTable(TUint32 aTag, TAny*& aTableContent, williamr@4: TInt& aLength, TInt aSessionHandle); williamr@4: IMPORT_C TInt GetGlyphOutline(TUint aCode, williamr@4: TBool aHinted, TAny*& aOutline, TInt& aLength, TInt aSessionHandle); williamr@4: IMPORT_C void ReleaseGlyphOutlines(TInt aCount, const TUint* aCodes, williamr@4: TBool aHinted, TInt aSessionHandle); williamr@4: IMPORT_C void ReleaseFontTable(TUint32 aTag, TInt aSessionHandle); williamr@4: williamr@2: private: williamr@2: // From CFont williamr@2: IMPORT_C virtual TUid DoTypeUid() const; williamr@2: IMPORT_C virtual TInt DoHeightInPixels() const; williamr@2: IMPORT_C virtual TInt DoAscentInPixels() const; williamr@2: IMPORT_C virtual TInt DoCharWidthInPixels(TChar aChar) const; williamr@2: IMPORT_C virtual TInt DoTextWidthInPixels(const TDesC &aText) const; williamr@2: IMPORT_C virtual TInt DoBaselineOffsetInPixels() const; williamr@2: IMPORT_C virtual TInt DoTextCount(const TDesC &aText, TInt aWidthInPixels) const; williamr@2: IMPORT_C virtual TInt DoTextCount(const TDesC &aText, TInt aWidthInPixels, TInt &aExcessWidthInPixels) const; williamr@2: IMPORT_C virtual TInt DoMaxCharWidthInPixels() const; williamr@2: IMPORT_C virtual TInt DoMaxNormalCharWidthInPixels() const; williamr@2: IMPORT_C virtual TFontSpec DoFontSpecInTwips() const; williamr@2: IMPORT_C virtual TInt DoExtendedFunction(TUid aFunctionId, TAny* aParam = NULL) const; williamr@2: williamr@2: private: williamr@2: CBitmapFont(RHeap* aHeap,const TFontSpec& aFontSpecInTwips, const TAlgStyle& aAlgStyle, CFontBitmap* aFontBitmap); williamr@2: CBitmapFont(RHeap* aHeap,const TFontSpec& aFontSpecInTwips, const TAlgStyle& aAlgStyle, COpenFont* aOpenFont); williamr@2: void ConstructL(); williamr@2: ~CBitmapFont(); williamr@2: static CBitmapFont* NewL(RHeap* aHeap, const TFontSpec& aFontSpecInTwips, const TAlgStyle& aAlgStyle, CFontBitmap* aFontBitmap); williamr@2: static CBitmapFont* NewL(RHeap* aHeap, const TFontSpec& aFontSpecInTwips, const TAlgStyle& aAlgStyle, COpenFont* aOpenFont); williamr@2: inline void operator delete(TAny*, TAny*) {} williamr@2: TInt Width(TInt aNum) const; williamr@2: TInt Height(TInt aNum) const; williamr@2: CFontBitmap* FontBitmap() const; williamr@2: void InstallOpenFontShaper(COpenFont* aOpenFont, CShaper::TInput& aShaperInput); williamr@4: TInt DoTextWidthInPixels(const TDesC &aText, const TMeasureTextInput* aParam) const; williamr@4: void SetUniqueFontId(TUint32 aUniqueFontId); williamr@2: williamr@2: private: williamr@2: TFontSpec iFontSpecInTwips; williamr@2: williamr@2: public: williamr@2: /** The algorithmic font style. */ williamr@2: TAlgStyle iAlgStyle; // must not move this member williamr@2: williamr@2: private: williamr@4: // Binary Compatibility warning - data member iOpenFont is referenced by inline methods williamr@4: RHeap* iHeap; williamr@4: TInt iFontBitmapOffset; williamr@4: williamr@4: // In order to be able to work with the flexible memory model, iOpenFont is williamr@4: // actually an offset from the address of this class. williamr@4: // iOpenFont's type remains unchanged. williamr@4: // As Qt code that uses OpenFont() must be able to run on new and old versions williamr@4: // of Symbian OS, it must be able to determine whether iOpenFont is a pointer or williamr@4: // an offset at run-time. Therefore an offset will have its lowest significant bit set to 1. williamr@4: // If iOpenFont is null, this object is not an open font. williamr@4: // Assumption: a pointer always has least significant bit value of zero. williamr@4: COpenFont* iOpenFont; // if iOpenFont is non-null this is an open font and many functions are forwarded to it williamr@2: williamr@4: TUint32 iReserved; williamr@4: TUint32 iUniqueFontId; // unique id for this instance of this font williamr@4: }; williamr@4: williamr@4: /** williamr@4: WARNING: Class for internal and partner use ONLY. Compatibility is not guaranteed in future releases. williamr@4: @publishedAll williamr@4: @released williamr@4: */ williamr@4: class TLinkedTypefaceGroupArgs williamr@4: { williamr@4: public: williamr@4: TInt iGroupId; williamr@4: CLinkedTypefaceGroup::TScalingOption iScalingOption; williamr@4: CLinkedTypefaceGroup::TBaselineShift iBaselineShift; williamr@4: TInt iAntialiasingThreshold; williamr@4: TInt iBoldnessPercentage; williamr@4: TInt iItalicAngle; williamr@4: public: williamr@4: void operator =(const CLinkedTypefaceGroup* aRhs); williamr@4: }; williamr@4: williamr@4: class COpenFontLinkedTypefaceElementSpec; williamr@4: class COpenFontLinkedTypefaceSpecification; williamr@4: williamr@4: /** williamr@4: WARNING: Class for internal and partner use ONLY. Compatibility is not guaranteed in future releases. williamr@4: @publishedAll williamr@4: @released williamr@4: */ williamr@4: class TLinkedTypefaceElementSpecArgs williamr@4: { williamr@4: public: williamr@4: TBufC iName; williamr@4: TBool iIsCanonical; williamr@4: TInt iGroupId; williamr@4: williamr@4: void operator = (const CLinkedTypefaceElementSpec* aRhs); williamr@4: void operator = (const COpenFontLinkedTypefaceElementSpec* aRhs); williamr@4: }; williamr@4: williamr@4: /** williamr@4: WARNING: Class for internal and partner use ONLY. Compatibility is not guaranteed in future releases. williamr@4: @publishedAll williamr@4: @released williamr@4: */ williamr@4: class TLinkedTypefaceSpecificationArgs williamr@4: { williamr@4: public: williamr@4: TBufC iName; williamr@4: TLinkedTypefaceElementSpecArgs iTypefaces[KMaxLinkedTypefaces]; williamr@4: TLinkedTypefaceGroupArgs iGroups[KMaxLinkedTypefaceGroups]; williamr@4: TInt iSize; williamr@4: TInt iGroupSize; williamr@4: TInt iCanonicalIndex; williamr@4: williamr@4: IMPORT_C void operator = (const CLinkedTypefaceSpecification& aRhs); williamr@4: IMPORT_C void operator = (const COpenFontLinkedTypefaceSpecification& aRhs); williamr@2: }; williamr@2: williamr@4: williamr@4: williamr@4: class TUnhintedOutlineId; williamr@4: class THintedOutlineId; williamr@4: class CFontTableCache; williamr@4: class CUnhintedOutlineCache; williamr@4: class CHintedOutlineCache; williamr@4: class TFontTableGlyphOutlineCacheMemMonitor; williamr@4: williamr@2: class CFontStore : public CTypefaceStore williamr@2: /** williamr@2: A store for fonts. williamr@2: williamr@2: Stores and handles both open and fixed-size fonts. Open fonts are made from williamr@2: open (scalable) typefaces by Open Font plug-in rasterizers. Fonts of other williamr@2: typefaces are stored in a limited number of fixed sizes. However, which is williamr@2: being used is transparent to the user of this class. For example the GetNearestFont...() williamr@2: functions get a bitmap font which may be retrieved from memory or generated williamr@2: via a rasterizer. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: friend class CLinkedFonts; williamr@2: friend class CLinkedTypefaceSpecification; williamr@2: williamr@2: public: williamr@2: IMPORT_C static CFontStore* NewL(RHeap* aHeap); williamr@2: IMPORT_C ~CFontStore(); williamr@2: IMPORT_C TUid AddFileL(const TDesC& aName); williamr@2: IMPORT_C void RemoveFile(TUid aFileUid); williamr@2: IMPORT_C TInt GetNearestFontInTwips(CFont *&aFont, const TFontSpec& aFontSpec); williamr@2: IMPORT_C TInt GetNearestFontInPixels(CFont *&aFont, const TFontSpec &aFontSpec); williamr@2: IMPORT_C TInt GetNearestFontToDesignHeightInTwips(CFont *&aFont, const TFontSpec& aFontSpec); williamr@2: IMPORT_C TInt GetNearestFontToDesignHeightInPixels(CFont *&aFont, const TFontSpec& aFontSpec); williamr@2: IMPORT_C TInt GetNearestFontToMaxHeightInTwips(CFont*& aFont, const TFontSpec& aFontSpec, TInt aMaxHeight); williamr@2: IMPORT_C TInt GetNearestFontToMaxHeightInPixels(CFont*& aFont, const TFontSpec& aFontSpec, TInt aMaxHeight); williamr@2: IMPORT_C TInt GetNearestFontInTwips(CFont *&aFont, const TOpenFontSpec& aFontSpec); williamr@2: IMPORT_C TInt GetNearestFontInPixels(CFont *&aFont, const TOpenFontSpec &aFontSpec); williamr@2: IMPORT_C TInt GetNearestFontToDesignHeightInTwips(CFont *&aFont, const TOpenFontSpec& aFontSpec); williamr@2: IMPORT_C TInt GetNearestFontToDesignHeightInPixels(CFont *&aFont, const TOpenFontSpec& aFontSpec); williamr@2: IMPORT_C TInt GetNearestFontToMaxHeightInTwips(CFont*& aFont, const TOpenFontSpec& aFontSpec, TInt aMaxHeight); williamr@2: IMPORT_C TInt GetNearestFontToMaxHeightInPixels(CFont*& aFont, const TOpenFontSpec& aFontSpec, TInt aMaxHeight); williamr@2: IMPORT_C TInt GetFontById(CFont *&aFont,TUid aUid,const TAlgStyle& aAlgStyle); williamr@2: IMPORT_C TInt NumTypefaces() const; williamr@2: IMPORT_C void TypefaceSupport(TTypefaceSupport &aTypefaceSupport,TInt aTypefaceIndex) const; williamr@2: IMPORT_C TInt FontHeightInTwips(TInt aTypefaceIndex,TInt aHeightIndex) const; williamr@2: IMPORT_C TInt FontHeightInPixels(TInt aTypefaceIndex,TInt aHeightIndex) const; williamr@2: IMPORT_C void InstallRasterizerL(COpenFontRasterizer* aRasterizer); williamr@2: IMPORT_C void DeleteSessionCache(TInt aSessionHandle); williamr@2: inline TGlyphBitmapType DefaultBitmapType() const; williamr@2: inline void SetDefaultBitmapType(TGlyphBitmapType aType); williamr@2: IMPORT_C void InstallShaperFactoryL(CShaperFactory* aShaperFactory); williamr@2: const CArrayPtrFlat* ShaperFactoryList() const; williamr@2: COpenFontSessionCacheList* GetSessionCacheList(); williamr@2: TInt GetShaperCacheMemUsage(); williamr@2: void SetShaperCacheMemUsage(TInt aUsage); williamr@2: CArrayPtrFlat* GetOpenFontFileList(); williamr@2: void IncNumShaperCaches(); williamr@2: void DecNumShaperCaches(); williamr@2: TInt GetNumShaperCaches(); williamr@4: IMPORT_C TInt CreateLinkedTypeface(const TLinkedTypefaceSpecificationArgs &aLinkedTypefaceSpec, TInt aSession, TInt& aId); williamr@4: IMPORT_C void GetLinkedTypefaceL(TLinkedTypefaceSpecificationArgs &aLinkedTypefaceSpec); williamr@2: IMPORT_C TBool HaveTypefaceFamilyName(const TDesC& aName); williamr@4: IMPORT_C void UpdateLinkedTypefaceL(const TLinkedTypefaceSpecificationArgs& aLinkedTypefaceSpec); williamr@4: IMPORT_C void LoadFontsAtStartupL(); williamr@4: IMPORT_C TBool GetFontFilePath(const TDesC& aFontName, TFileName& aFilePath) const; williamr@4: IMPORT_C void CleanupCacheOnFbsSessionTermination(TInt aSessionHandle); williamr@4: williamr@4: TInt CacheFontTable(TUid aFileUid, TUint32 aTag, TAny*& aContent, TInt aLength); williamr@4: TInt ReleaseFontTable(TUid aFileUid, TUint32 aTag, TInt aSessionHandle); williamr@4: TInt FindFontTableInCache(TUid aFileUid, TUint32 aTag, TAny*& aContent, TInt& aLength); williamr@4: TInt IncFontTableRefCount(TUid aFileUid, TUint32 aTag, TInt aSessionHandle); williamr@4: TInt DecFontTableRefCount(TUid aFileUid, TUint32 aTag, TInt aSessionHandle); williamr@4: TInt CacheUnhintedOutline(const TUnhintedOutlineId& aOutlineId, TAny* aData, williamr@4: TInt aLength, TAny*& aOutline, TInt& aLen); williamr@4: TInt CacheHintedOutline(const THintedOutlineId& aOutlineId, TAny* aData, TInt aLength, williamr@4: TAny*& aOutline, TInt& aLen); williamr@4: TInt ReleaseUnhintedOutline(const TUnhintedOutlineId& aOutlineId, TInt aSessionHandle); williamr@4: TInt ReleaseHintedOutline(const THintedOutlineId& aOutlineId, TInt aSessionHandle); williamr@4: TInt IncreaseUnhintedOutlineRefCount(const TUnhintedOutlineId& aOutlineId, TInt aSessionHandle); williamr@4: TInt IncreaseHintedOutlineRefCount(const THintedOutlineId& aOutlineId, TInt aSessionHandle); williamr@4: TInt FindUnhintedOutlineInCache(const TUnhintedOutlineId& aOutlineId, TAny*& aData, williamr@4: TInt &aLength); williamr@4: TInt FindHintedOutlineInCache(const THintedOutlineId& aOutlineId, TAny*& aData, TInt& aLength); williamr@4: void CleanupCacheOnOpenFontRemoval(COpenFont* aFont); williamr@4: void CleanupCacheOnOpenFontFileRemoval(COpenFontFile* aFontFile); williamr@4: williamr@2: private: williamr@2: CFontStore(RHeap* aHeap); williamr@2: void ConstructL(); williamr@2: void InternalizeFontStoreFileL(CFontStoreFile* aFontStoreFile, TInt aFontVersion); williamr@2: TTypeface* GetNearestTypeface(const TTypeface& aTypeface) const; williamr@2: TTypefaceFontBitmap GetNearestTypefaceFontBitmap(const TFontSpec& aFontSpecInPixels, TInt aMaxHeight); williamr@2: CFontBitmap* GetFontBitmapById(TUid aUid); williamr@2: TBool IsFontLoaded(CFont*& aFont, const TAlgStyle& aAlgStyle, const TFontSpec& aFontSpecInPixels, TUid aUid, TInt aMaxHeight = 0) const; williamr@2: TBool IsFontLoaded(CFont*& aFont, const TAlgStyle& aAlgStyle, const TOpenFontSpec& aFontSpecInPixels, TInt aMaxHeight) const; williamr@2: CBitmapFont* NewFontL(const TFontSpec& aFontSpecInTwips,const TAlgStyle& aAlgStyle,CFontBitmap* aFontBitmap); williamr@2: CBitmapFont* NewFontL(const TOpenFontSpec& aFontSpecInTwips,const TAlgStyle& aAlgStyle,COpenFont* aOpenFont); williamr@2: TInt VerticalPixelsToTwips(TInt aPixelHeight) const; williamr@2: TInt VerticalTwipsToPixels(TInt aTwipsHeight) const; williamr@2: void GetNearestBitmapFontInPixelsL(CFont*& aFont, TFontSpec& aFontSpec, TInt aMaxHeight); williamr@2: void GetNearestOpenFontInPixelsL( williamr@2: CFont*& aFont, TOpenFontSpec& aActualFontSpec, const TOpenFontSpec& aDesiredFontSpec, TInt aMaxHeight); williamr@2: TInt GetNearestRealFontInPixels(CFont*& aFont, const TOpenFontSpec& aFontSpec, TInt aMaxHeight); williamr@2: TInt GetNearestFontInPixelsL(CFont*& aFont, const TOpenFontSpec& aFontSpec, TInt aMaxHeight); williamr@4: TInt CreateLinkedTypefaceL(const TLinkedTypefaceSpecificationArgs &aLinkedTypefaceSpec, TInt aSession, TInt& aId); williamr@2: TInt GetCanonicalIndex(TInt aTypefaceIndex) const; williamr@2: void TypefaceSupportLinked(TTypefaceSupport &aTypefaceSupport, TInt aTypefaceIndex) const; williamr@2: TInt GetNearestFontInPixels(CFont*& aFont, const TOpenFontSpec& aFontSpec, TInt aMaxHeight); williamr@2: void SanityCheckForTtfL(RFile& aFile, TUint aFontFileSize, TBool aStrictChecking); williamr@2: void SanityCheckFontFileL(TParse& aParse); williamr@2: TInt GetNearestOpenFontInPixelsByFontName(COpenFont*& aNearestOpenFont, TOpenFontSpec& aActualFontSpec, const TOpenFontSpec& aDesiredFontSpec, TInt aMaxHeight); williamr@2: TInt GetNearestOpenFontInPixelsBySimilarity(COpenFont*& aNearestOpenFont, TOpenFontSpec& aActualFontSpec, const TOpenFontSpec& aDesiredFontSpec, TInt aMaxHeight); williamr@2: TInt AddTypefacesToSupportList(COpenFontFile* aOpenFontFile); williamr@2: void RemoveTypefacesFromSupportList(COpenFontFile* aOpenFontFile); williamr@2: TInt FindBitmapFontFileIndexByUid(TUid aUid); williamr@4: TBool IncRefCountOfLoadedFont(const TParse& aFileName, TUid& aFontUid); williamr@4: TBool LoadFileAsOpenFontL(const TParse& aFileName, TUid& aFontUid); williamr@4: TUid LoadFileAsBitmapFontL(const TParse& aParse); williamr@2: static void CleanupRemoveFontFile(TAny* aCleanupInfo); williamr@4: const TAny* FontLinkingInterface() const; williamr@4: TInt ValidateLinkedFontSpecificationL(COpenFontLinkedTypefaceSpecification& aSpec, TBool aOverwrite) const; williamr@4: void GenerateLinkedFontFileL(COpenFontLinkedTypefaceSpecification& aSpec, const TAny* aExtension, TBool aUpdate); williamr@4: void LoadFontsL(const TDesC& aFontsDir); williamr@4: void AddSanityCheckedFontL(const TParse& aFileName, TUid& aUid); williamr@2: public: williamr@2: /** The width of 1000 pixels in twips. williamr@2: williamr@2: This is set in the constructor. If the appropriate HALData attributes are williamr@2: set (EDisplayXPixels and EDisplayXTwips) then the value is calculated using williamr@2: these; otherwise the value is set to 11860. */ williamr@2: TInt iKPixelWidthInTwips; williamr@2: williamr@2: /** The height of 1000 pixels in twips. williamr@2: williamr@2: This is set in the constructor. If the appropriate HALData attributes are williamr@2: set (EDisplayYPixels and EDisplayYTwips) then the value is calculated using williamr@2: these; otherwise the value is set to 11860. */ williamr@2: TInt iKPixelHeightInTwips; williamr@2: williamr@2: private: williamr@2: // Binary Compatibility warning - data member iDefaultBitmapType is referenced by inline methods williamr@2: RFs iFs; williamr@2: RHeap* iHeap; williamr@2: CArrayPtrFlat iFontStoreFileList; williamr@2: CArrayPtrFlat iTypefaceList; williamr@2: CArrayPtrFlat iFontBitmapList; williamr@2: CArrayFixFlat iTypefaceFontBitmapList; williamr@2: CArrayPtrFlat iOpenFontFileList; williamr@4: TInt iReserved[2]; // keep iDefaultBitmapType at the correct offset williamr@4: CFontTableCache *iFontTableCache; williamr@4: CUnhintedOutlineCache *iUnhintedOutlineCache; williamr@4: CHintedOutlineCache *iHintedOutlineCache; williamr@4: TFontTableGlyphOutlineCacheMemMonitor *iCacheMemMon; williamr@2: CArrayPtrFlat iOpenFontRasterizerList; williamr@2: COpenFontSessionCacheList* iOpenFontSessionCacheList; williamr@2: TInt iOpenFontUid; williamr@2: TGlyphBitmapType iDefaultBitmapType; williamr@2: CArrayPtrFlat iShaperFactoryList; williamr@2: TInt iOpenFontShaperCacheMemUsage; williamr@2: TInt iNumberOfShaperCaches; williamr@2: RPointerArray iOpenFontTypefaceSupportList; williamr@4: RArray *iHandleArray; williamr@4: TAny* iUnused2; williamr@4: TUint32 iUniqueFontIdCount; williamr@2: }; williamr@2: williamr@2: // inline functions start here williamr@2: williamr@2: /** Returns whether the bitmap font object is an open font (a COpenFont) rather williamr@2: than a bitmap font (a CFontBitmap). williamr@2: williamr@2: @return ETrue if the bitmap font object is using an open font (a COpenFont); williamr@2: EFalse if it is using a bitmap font (a CFontBitmap). williamr@2: @see OpenFont() williamr@2: */ williamr@2: inline TBool CBitmapFont::IsOpenFont() const williamr@2: { williamr@2: return iOpenFont != NULL; williamr@2: } williamr@2: williamr@4: williamr@2: /** Returns a pointer to the open font being used by the bitmap font object. williamr@2: williamr@2: @return A pointer to an open font. williamr@2: @see IsOpenFont() williamr@2: */ williamr@2: inline COpenFont* CBitmapFont::OpenFont() const williamr@2: { williamr@4: if (reinterpret_cast(iOpenFont) & 1) williamr@4: { williamr@4: return reinterpret_cast(const_cast(PtrAdd(this, reinterpret_cast(iOpenFont) & ~1))); williamr@4: } williamr@4: else williamr@4: { williamr@4: return iOpenFont; williamr@4: } williamr@2: } williamr@2: williamr@2: /** Gets the anti-aliasing setting for the font, see TGlyphBitmapType for williamr@2: the range of values. williamr@2: williamr@2: This is only applicable to open fonts (COpenFonts) not bitmap fonts (CBitmapFonts). williamr@2: williamr@2: Note that this setting is stored in the device-independent font specification williamr@2: which is set when the bitmap font object is constructed. williamr@2: williamr@2: @return The anti-aliasing setting for the font. williamr@2: @see IsOpenFont() williamr@2: @see TGlyphBitmapType williamr@2: @see COpenFont williamr@2: @see CBitmapFont williamr@2: */ williamr@2: inline TGlyphBitmapType CBitmapFont::GlyphBitmapType() const williamr@2: { williamr@2: return iFontSpecInTwips.iFontStyle.BitmapType(); williamr@2: } williamr@2: williamr@2: /** Returns a default bitmap type. williamr@2: williamr@2: @return A default bitmap type. williamr@2: @see TGlyphBitmapType williamr@2: */ williamr@2: inline TGlyphBitmapType CFontStore::DefaultBitmapType() const williamr@2: { williamr@2: return iDefaultBitmapType; williamr@2: } williamr@2: williamr@2: /** Sets a default bitmap type. williamr@2: williamr@2: @param aType A default bitmap type. williamr@2: @see TGlyphBitmapType williamr@2: */ williamr@2: inline void CFontStore::SetDefaultBitmapType(TGlyphBitmapType aType) williamr@2: { williamr@2: iDefaultBitmapType = aType; williamr@2: } williamr@2: williamr@2: #endif williamr@4: