epoc32/include/fntstore.h
branchSymbian2
changeset 2 2fe1408b6811
parent 0 061f57f2323e
child 4 837f303aceeb
--- a/epoc32/include/fntstore.h	Tue Nov 24 13:55:44 2009 +0000
+++ b/epoc32/include/fntstore.h	Tue Mar 16 16:12:26 2010 +0000
@@ -1,1 +1,379 @@
-fntstore.h
+// Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members
+// which accompanies this distribution, and is available
+// at the URL "http://www.symbianfoundation.org/legal/licencesv10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#ifndef FNTSTORE_H__
+#define FNTSTORE_H__
+
+#include <e32std.h>
+#include <f32file.h>
+#include <gdi.h>
+#include <openfont.h>
+
+class CLinkedTypefaceSpecification;
+class CLinkedFontSpecification;
+class TLinkedTypefaceSpecArgs;
+class CFbClient;
+class CFontStoreFile;
+class CFontBitmap;
+class RReadStream;
+class TTypefaceFontBitmap;
+class TShapeHeader;
+class TShapeMessageParameters;
+class CTypefaceSupportInfo;
+
+
+/**
+@internalTechnology
+*/
+class TCharacterMetrics
+	{
+	public:
+	IMPORT_C TCharacterMetrics();
+
+	TInt16 iAscentInPixels;
+	TInt16 iHeightInPixels;
+	TInt16 iLeftAdjustInPixels;
+	TInt16 iMoveInPixels;
+	TInt16 iRightAdjustInPixels;
+	};
+
+class TAlgStyle
+/** 
+An algorithmic style for how a font is drawn.
+
+Holds attributes such as whether the font is bold or italic, and the width 
+and height factors. This is used as an input parameter for the GetFontById() method
+of some font management classes. See CWsScreenDevice::GetFontById() for more information.
+@publishedAll
+@released
+@see CWsScreenDevice::GetFontById()
+@see CFbsTypefaceStore::GetFontById()
+@see CFbsDevice::GetFontById()
+*/
+	{
+public:
+	IMPORT_C TAlgStyle();
+	IMPORT_C void SetIsBold(TBool aIsBold);
+	IMPORT_C void SetIsItalic(TBool aIsItalic);
+	IMPORT_C void SetIsMono(TBool aIsMono);
+	IMPORT_C void SetWidthFactor(TInt aWidthFactor);
+	IMPORT_C void SetHeightFactor(TInt aHeightFactor);
+	IMPORT_C TBool IsBold() const;
+	IMPORT_C TBool IsItalic() const;
+	IMPORT_C TBool IsMono() const;
+	IMPORT_C TInt WidthFactor() const;
+	IMPORT_C TInt HeightFactor() const;
+	IMPORT_C TBool operator==(const TAlgStyle& aAlgStyle) const;
+	TBool operator!=(const TAlgStyle& aAlgStyle) const;
+public:
+	/** Baseline offset in pixels. */
+	TInt iBaselineOffsetInPixels;
+private:
+	enum
+		{
+		EBold=1,
+		EItalic=2,
+		EMono=4,
+		};
+	/** This member is private and not intended for use. */
+	TInt8 iFlags;
+	/** This member is private and not intended for use. */
+	TInt8 iWidthFactor;
+	/** This member is private and not intended for use. */
+	TInt8 iHeightFactor;
+	};
+
+class CLinkedFontInformation;
+
+/** 
+Bitmap font class.
+An object of this class may either access and use a bitmap font (a CFontBitmap)
+or an open font (a COpenFont).
+Stored in a CFontStore.
+@publishedAll
+@released
+*/
+class CBitmapFont : public CFont
+	{
+	friend class CFontStore;
+	friend class CLinkedFontSpecification;
+	friend class CLinkedFontInformation;
+public:
+	// New functions
+	TUid Uid() const;
+	IMPORT_C TCharacterMetrics CharacterMetrics(TInt aCode,const TUint8*& aBytes) const;
+	IMPORT_C TBool GetCharacterData(TInt aSessionHandle, TInt aCode, TOpenFontCharMetrics& aMetrics, const TUint8*& aBitmap) const;
+	IMPORT_C TBool Rasterize(TInt aSessionHandle,TInt aCode,TOpenFontGlyphData* aGlyphData) const;
+	IMPORT_C void GetFontMetrics(TOpenFontMetrics& aMetrics) const;
+	IMPORT_C TBool GetFaceAttrib(TOpenFontFaceAttrib& aAttrib) const;
+	IMPORT_C TInt BitmapEncoding() const;
+	IMPORT_C TBool HasCharacterL(TInt aCode) const;
+	IMPORT_C TBool CharacterNeedsToBeRasterized(TInt aSessionHandle,TInt aCode) const;
+	IMPORT_C TShapeHeader* ShapeTextL(const TDesC16& aText,
+		TInt aSessionHandle, const TShapeMessageParameters& aParams);
+	IMPORT_C void DeleteShape(TInt aSessionHandle,TShapeHeader* aHeader);
+	IMPORT_C void operator delete(TAny*);
+	inline TBool IsOpenFont() const;
+	inline COpenFont* OpenFont() const;
+	inline TGlyphBitmapType GlyphBitmapType() const;
+	IMPORT_C CLinkedFontInformation* LinkedFontInformation() const;
+	IMPORT_C CBitmapFont* NextFontClientSpace() const;
+	IMPORT_C TBool IsLinkedFont()const;
+	IMPORT_C CBitmapFont* FontWithCharacter(TInt aCode, CLinkedFontInformation *&aInfo, TBool aSearchAllFonts, TBool aGetCanonicalDefault) const;
+	
+private:
+	// From CFont
+	IMPORT_C virtual TUid DoTypeUid() const;
+	IMPORT_C virtual TInt DoHeightInPixels() const;
+	IMPORT_C virtual TInt DoAscentInPixels() const;
+	IMPORT_C virtual TInt DoCharWidthInPixels(TChar aChar) const;
+	IMPORT_C virtual TInt DoTextWidthInPixels(const TDesC &aText) const;
+	IMPORT_C virtual TInt DoBaselineOffsetInPixels() const;
+	IMPORT_C virtual TInt DoTextCount(const TDesC &aText, TInt aWidthInPixels) const;
+	IMPORT_C virtual TInt DoTextCount(const TDesC &aText, TInt aWidthInPixels, TInt &aExcessWidthInPixels) const;
+	IMPORT_C virtual TInt DoMaxCharWidthInPixels() const;
+	IMPORT_C virtual TInt DoMaxNormalCharWidthInPixels() const;
+	IMPORT_C virtual TFontSpec DoFontSpecInTwips() const;
+	IMPORT_C virtual TInt DoExtendedFunction(TUid aFunctionId, TAny* aParam = NULL) const;
+
+private:
+	CBitmapFont(RHeap* aHeap,const TFontSpec& aFontSpecInTwips, const TAlgStyle& aAlgStyle, CFontBitmap* aFontBitmap);
+	CBitmapFont(RHeap* aHeap,const TFontSpec& aFontSpecInTwips, const TAlgStyle& aAlgStyle, COpenFont* aOpenFont);
+	void ConstructL();
+	~CBitmapFont();
+	static CBitmapFont* NewL(RHeap* aHeap, const TFontSpec& aFontSpecInTwips, const TAlgStyle& aAlgStyle, CFontBitmap* aFontBitmap);
+	static CBitmapFont* NewL(RHeap* aHeap, const TFontSpec& aFontSpecInTwips, const TAlgStyle& aAlgStyle, COpenFont* aOpenFont);
+	inline void operator delete(TAny*, TAny*) {}
+	TInt Width(TInt aNum) const;
+	TInt Height(TInt aNum) const;
+	CFontBitmap* FontBitmap() const;
+	void InstallOpenFontShaper(COpenFont* aOpenFont, CShaper::TInput& aShaperInput);
+
+private:
+	TFontSpec iFontSpecInTwips;
+
+public:
+	/** The algorithmic font style. */
+	TAlgStyle iAlgStyle;	// must not move this member
+
+private:
+	// Binary Compatibility warning - data member iOpenFont is referenced by inline methods
+	RHeap* iHeap;
+	TInt iFontBitmapOffset;
+	COpenFont* iOpenFont;	// if iOpenFont is non-null this is an open font and many functions are forwarded to it
+
+#ifdef SYMBIAN_SUPPORT_LINKED_FONTS	
+	CLinkedFontInformation *iFontLinkage;
+#endif	
+	};
+	
+class CFontStore : public CTypefaceStore
+/** 
+A store for fonts.
+
+Stores and handles both open and fixed-size fonts. Open fonts are made from 
+open (scalable) typefaces by Open Font plug-in rasterizers. Fonts of other 
+typefaces are stored in a limited number of fixed sizes. However, which is 
+being used is transparent to the user of this class. For example the GetNearestFont...() 
+functions get a bitmap font which may be retrieved from memory or generated 
+via a rasterizer.
+@publishedAll
+@released
+*/
+    {
+#ifdef SYMBIAN_SUPPORT_LINKED_FONTS    
+friend class CLinkedFonts;
+friend class CLinkedFontSpecification;
+friend class CLinkedTypefaceSpecification; 
+#endif
+
+public:
+	IMPORT_C static CFontStore* NewL(RHeap* aHeap);
+	IMPORT_C ~CFontStore();
+	IMPORT_C TUid AddFileL(const TDesC& aName);
+	IMPORT_C void RemoveFile(TUid aFileUid);
+	IMPORT_C TInt GetNearestFontInTwips(CFont *&aFont, const TFontSpec& aFontSpec);
+	IMPORT_C TInt GetNearestFontInPixels(CFont *&aFont, const TFontSpec &aFontSpec);
+	IMPORT_C TInt GetNearestFontToDesignHeightInTwips(CFont *&aFont, const TFontSpec& aFontSpec);
+	IMPORT_C TInt GetNearestFontToDesignHeightInPixels(CFont *&aFont, const TFontSpec& aFontSpec);
+	IMPORT_C TInt GetNearestFontToMaxHeightInTwips(CFont*& aFont, const TFontSpec& aFontSpec, TInt aMaxHeight);
+	IMPORT_C TInt GetNearestFontToMaxHeightInPixels(CFont*& aFont, const TFontSpec& aFontSpec, TInt aMaxHeight);
+	IMPORT_C TInt GetNearestFontInTwips(CFont *&aFont, const TOpenFontSpec& aFontSpec);
+	IMPORT_C TInt GetNearestFontInPixels(CFont *&aFont, const TOpenFontSpec &aFontSpec);
+	IMPORT_C TInt GetNearestFontToDesignHeightInTwips(CFont *&aFont, const TOpenFontSpec& aFontSpec);
+	IMPORT_C TInt GetNearestFontToDesignHeightInPixels(CFont *&aFont, const TOpenFontSpec& aFontSpec);
+	IMPORT_C TInt GetNearestFontToMaxHeightInTwips(CFont*& aFont, const TOpenFontSpec& aFontSpec, TInt aMaxHeight);
+	IMPORT_C TInt GetNearestFontToMaxHeightInPixels(CFont*& aFont, const TOpenFontSpec& aFontSpec, TInt aMaxHeight);
+	IMPORT_C TInt GetFontById(CFont *&aFont,TUid aUid,const TAlgStyle& aAlgStyle);
+	IMPORT_C TInt NumTypefaces() const;
+	IMPORT_C void TypefaceSupport(TTypefaceSupport &aTypefaceSupport,TInt aTypefaceIndex) const;
+	IMPORT_C TInt FontHeightInTwips(TInt aTypefaceIndex,TInt aHeightIndex) const;
+	IMPORT_C TInt FontHeightInPixels(TInt aTypefaceIndex,TInt aHeightIndex) const;
+	IMPORT_C void InstallRasterizerL(COpenFontRasterizer* aRasterizer);
+	IMPORT_C void DeleteSessionCache(TInt aSessionHandle);
+	inline TGlyphBitmapType DefaultBitmapType() const;
+	inline void SetDefaultBitmapType(TGlyphBitmapType aType);
+	IMPORT_C void InstallShaperFactoryL(CShaperFactory* aShaperFactory);
+	const CArrayPtrFlat<CShaperFactory>* ShaperFactoryList() const;
+	COpenFontSessionCacheList* GetSessionCacheList();
+	TInt GetShaperCacheMemUsage();
+	void SetShaperCacheMemUsage(TInt aUsage);
+	CArrayPtrFlat<COpenFontFile>* GetOpenFontFileList();
+	void IncNumShaperCaches();
+	void DecNumShaperCaches();
+	TInt GetNumShaperCaches();
+	IMPORT_C TInt CreateLinkedTypeface(const TLinkedTypefaceSpecArgs &aLinkedTypefaceSpec, TInt aSession, TInt& aId);
+	IMPORT_C void RemoveLinkedFont(CBitmapFont *aFont);		
+	IMPORT_C TBool IsValidLinkedFontSpecification(TInt aHandle);
+	IMPORT_C TBool HaveTypefaceFamilyName(const TDesC& aName);
+private:
+	CFontStore(RHeap* aHeap);
+	void ConstructL();
+	void InternalizeFontStoreFileL(CFontStoreFile* aFontStoreFile, TInt aFontVersion);
+	TTypeface* GetNearestTypeface(const TTypeface& aTypeface) const;
+	TTypefaceFontBitmap GetNearestTypefaceFontBitmap(const TFontSpec& aFontSpecInPixels, TInt aMaxHeight);
+	CFontBitmap* GetFontBitmapById(TUid aUid);
+	TBool IsFontLoaded(CFont*& aFont, const TAlgStyle& aAlgStyle, const TFontSpec& aFontSpecInPixels, TUid aUid, TInt aMaxHeight = 0) const;
+	TBool IsFontLoaded(CFont*& aFont, const TAlgStyle& aAlgStyle, const TOpenFontSpec& aFontSpecInPixels, TInt aMaxHeight) const;
+	CBitmapFont* NewFontL(const TFontSpec& aFontSpecInTwips,const TAlgStyle& aAlgStyle,CFontBitmap* aFontBitmap);
+	CBitmapFont* NewFontL(const TOpenFontSpec& aFontSpecInTwips,const TAlgStyle& aAlgStyle,COpenFont* aOpenFont);
+	TInt VerticalPixelsToTwips(TInt aPixelHeight) const;
+	TInt VerticalTwipsToPixels(TInt aTwipsHeight) const;
+	void GetNearestBitmapFontInPixelsL(CFont*& aFont, TFontSpec& aFontSpec, TInt aMaxHeight);
+	void GetNearestOpenFontInPixelsL(
+	CFont*& aFont, TOpenFontSpec& aActualFontSpec, const TOpenFontSpec& aDesiredFontSpec, TInt aMaxHeight);
+#ifdef SYMBIAN_SUPPORT_LINKED_FONTS	
+	TInt GetNearestRealFontInPixels(CFont*& aFont, const TOpenFontSpec& aFontSpec, TInt aMaxHeight);
+	TInt GetNearestFontInPixelsL(CFont*& aFont, const TOpenFontSpec& aFontSpec, TInt aMaxHeight);
+	TInt CreateLinkedTypefaceL(const TLinkedTypefaceSpecArgs &aLinkedTypefaceSpec, TInt aSession, TInt& aId);
+	TInt GetCanonicalIndex(TInt aTypefaceIndex) const;
+	void TypefaceSupportLinked(TTypefaceSupport &aTypefaceSupport, TInt aTypefaceIndex) const;
+#endif	
+	TInt GetNearestFontInPixels(CFont*& aFont, const TOpenFontSpec& aFontSpec, TInt aMaxHeight);
+	void SanityCheckForTtfL(RFile& aFile, TUint aFontFileSize, TBool aStrictChecking);
+	void SanityCheckFontFileL(TParse& aParse);
+	TInt GetNearestOpenFontInPixelsByFontName(COpenFont*& aNearestOpenFont, TOpenFontSpec& aActualFontSpec, const TOpenFontSpec& aDesiredFontSpec, TInt aMaxHeight);
+	TInt GetNearestOpenFontInPixelsBySimilarity(COpenFont*& aNearestOpenFont, TOpenFontSpec& aActualFontSpec, const TOpenFontSpec& aDesiredFontSpec, TInt aMaxHeight);
+	TInt AddTypefacesToSupportList(COpenFontFile* aOpenFontFile);
+	void RemoveTypefacesFromSupportList(COpenFontFile* aOpenFontFile);
+	TInt FindBitmapFontFileIndexByUid(TUid aUid);
+	TBool IncRefCountOfLoadedFont(const TDesC& aFullName, TUid& aFontUid);
+	TBool LoadFileAsOpenFontL(const TDesC& aFullName, TUid& aFontUid);
+	TUid LoadFileAsBitmapFontL(TParse& aParse);
+	static void CleanupRemoveFontFile(TAny* aCleanupInfo);
+
+public:
+	/** The width of 1000 pixels in twips.
+	
+	This is set in the constructor. If the appropriate HALData attributes are 
+	set (EDisplayXPixels and EDisplayXTwips) then the value is calculated using 
+	these; otherwise the value is set to 11860. */
+	TInt iKPixelWidthInTwips;
+	
+	/** The height of 1000 pixels in twips.
+	
+	This is set in the constructor. If the appropriate HALData attributes are 
+	set (EDisplayYPixels and EDisplayYTwips) then the value is calculated using 
+	these; otherwise the value is set to 11860. */
+	TInt iKPixelHeightInTwips;
+
+private:
+	// Binary Compatibility warning - data member iDefaultBitmapType is referenced by inline methods
+	RFs iFs;
+	RHeap* iHeap;
+	CArrayPtrFlat<CFontStoreFile> iFontStoreFileList;
+	CArrayPtrFlat<TTypeface> iTypefaceList;
+	CArrayPtrFlat<CFontBitmap> iFontBitmapList;
+	CArrayFixFlat<TTypefaceFontBitmap> iTypefaceFontBitmapList;
+	CArrayPtrFlat<COpenFontFile> iOpenFontFileList;
+	TInt iReserved[6];		// keep iDefaultBitmapType at the correct offset
+	CArrayPtrFlat<COpenFontRasterizer> iOpenFontRasterizerList;
+	COpenFontSessionCacheList* iOpenFontSessionCacheList;
+	TInt iOpenFontUid;
+	TGlyphBitmapType iDefaultBitmapType;
+	CArrayPtrFlat<CShaperFactory> iShaperFactoryList;
+	TInt iOpenFontShaperCacheMemUsage;
+	TInt iNumberOfShaperCaches;
+	RPointerArray<CTypefaceSupportInfo> iOpenFontTypefaceSupportList;
+#ifdef SYMBIAN_SUPPORT_LINKED_FONTS	
+	RPointerArray<CLinkedTypefaceSpecification> *iLinkedTypefaceSpecificationList;
+	RPointerArray<CLinkedFontSpecification> *iLinkedFontSpecificationList;
+#endif	
+	};
+
+// inline functions start here
+
+/** Returns whether the bitmap font object is an open font (a COpenFont) rather 
+than a bitmap font (a CFontBitmap).
+
+@return ETrue if the bitmap font object is using an open font (a COpenFont);
+EFalse if it is using a bitmap font (a CFontBitmap).
+@see OpenFont()
+*/
+inline TBool CBitmapFont::IsOpenFont() const
+	{
+	return iOpenFont != NULL;
+	}
+
+/** Returns a pointer to the open font being used by the bitmap font object.
+
+@return A pointer to an open font.
+@see IsOpenFont()
+*/
+inline COpenFont* CBitmapFont::OpenFont() const
+	{ 
+	return iOpenFont;
+	}
+
+/** Gets the anti-aliasing setting for the font, see TGlyphBitmapType for 
+the range of values.
+
+This is only applicable to open fonts (COpenFonts) not bitmap fonts (CBitmapFonts).
+
+Note that this setting is stored in the device-independent font specification 
+which is set when the bitmap font object is constructed.
+
+@return The anti-aliasing setting for the font.
+@see IsOpenFont()
+@see TGlyphBitmapType
+@see COpenFont
+@see CBitmapFont
+*/
+inline TGlyphBitmapType CBitmapFont::GlyphBitmapType() const
+	{
+	return iFontSpecInTwips.iFontStyle.BitmapType();
+	}
+
+/** Returns a default bitmap type.
+
+@return A default bitmap type.
+@see TGlyphBitmapType
+*/
+inline TGlyphBitmapType CFontStore::DefaultBitmapType() const
+	{
+	return iDefaultBitmapType;
+	}
+
+/** Sets a default bitmap type.
+
+@param aType A default bitmap type.
+@see TGlyphBitmapType
+*/
+inline void CFontStore::SetDefaultBitmapType(TGlyphBitmapType aType)
+	{
+	iDefaultBitmapType = aType;
+	}
+
+#endif