graphicstools/bitmapfonttools/inc/FNTRECRD.H
changeset 0 5d03bc08d59c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicstools/bitmapfonttools/inc/FNTRECRD.H	Tue Feb 02 01:47:50 2010 +0200
@@ -0,0 +1,265 @@
+/*
+* Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Header FNTRECRD.H
+*
+*/
+
+
+#ifndef __FNTRECRD_H__
+#define __FNTRECRD_H__
+
+#include "LEXICAL.H"
+#include "LST.H"
+#include "RECORD.H"
+#include "STRNG.H"
+#include "UID.H"
+/**
+@internalComponent
+*/
+const boolean PostureUpright = 0;
+const boolean PostureItalic = 1;
+/**
+@internalComponent
+*/
+const boolean StrokeWeightNormal = 0;
+const boolean StrokeWeightBold = 1;
+
+class BitmapOffset
+/**
+@internalComponent
+*/
+	{
+public:
+	BitmapOffset(uint16 aBitmapOffset);
+	void Externalize(ostream& out);
+public:
+	uint16 iBitmapOffset;	// restricts bitmap to 64k
+	};
+
+class CharacterMetrics
+/**
+@internalComponent
+*/
+	{
+public:
+	CharacterMetrics();
+	void Externalize(ostream& out);
+public:
+	chardim iAscentInPixels;
+	chardim iHeightInPixels;
+	chardim iLeftAdjustInPixels;
+	chardim iMoveInPixels;
+	chardim iRightAdjustInPixels;
+	};
+
+
+class MetricDistributionMember
+/**
+Class which wraps up a given metric with the number of characters that use it
+@internalComponent
+*/
+	{
+public:
+	~MetricDistributionMember();
+	MetricDistributionMember();
+public:
+	CharacterMetrics* Metric() const;
+	int Frequency() const;
+	void IncrementFrequency(int aIncrementBy = 1);
+	void SetMetric(CharacterMetrics* aMetric);
+	void SetFrequency(int aFrequency);
+	void Externalize(ostream& out);
+private:
+	int iFrequency;
+	CharacterMetrics* iMetric;
+	};
+
+class MetricDistribution
+/**
+Class which maintains a list of metrics and the number of characters using each,
+along with the ability to sort them into most popular first order.
+@internalComponent
+*/
+	{
+public:
+	~MetricDistribution();
+	static MetricDistribution* New();
+public:
+	void SortMetricsByFrequency();
+	void SetIndex(const CharacterMetrics& aMetrics, int aIndex);
+	int Index(const CharacterMetrics& aMetrics);
+	void Externalize(ostream& out);
+	void ExternalizeComponents(ostream& out);
+	void AddOrIncrementMetric(const CharacterMetrics& aMetrics, int aFrequency = 1);
+	const CharacterMetrics& MostPopular(int aStartIndex);
+private:
+	MetricDistribution();
+public:
+	ObjectList<MetricDistributionMember*> iCharacterMetricsList;
+	streampos iStreamId;
+	};
+
+class Characters
+/**
+@internalComponent
+*/
+	{
+public:
+	void Externalize(ostream& out);
+	ObjectList<BitmapOffset*> iBitmapOffsetList;
+	~Characters();
+public:
+	streampos iStreamId;
+	};
+
+class ByteList
+/**
+@internalComponent
+*/
+	{
+public:
+	ByteList();
+	void AddBit(char aBit);
+	void NewByte();
+	int Length() const;
+	void Externalize(ostream& out);
+private:
+	String iString;
+	char iOffset;
+	};
+
+class CharactersBitmap : public Record
+/**
+@internalComponent
+*/
+	{
+public:
+	void AddIndex(int aIndex);
+	void Externalize(ostream& out);
+public:
+	ByteList iByteList;
+	streampos iStreamId;
+	};
+
+class BitmapCodeSection
+/**
+@internalComponent
+*/
+	{
+public:
+	void Externalize(ostream& out);
+	void ExternalizeComponents(ostream& out);
+public:
+	uint16 iStart;
+	uint16 iEnd;
+	Characters iCharacters;
+	CharactersBitmap iCharactersBitmap;
+	};	
+
+class FontBitmap : public Record
+/**
+@internalComponent
+*/
+	{
+public:
+	FontBitmap();
+	void Externalize(ostream& out);
+	void ExternalizeComponents(ostream& out);
+	~FontBitmap();
+public:
+	uid iUid;
+	boolean iPosture;
+	boolean iStrokeWeight;
+	boolean iIsProportional;
+	chardim iCellHeightInPixels;
+	chardim iAscentInPixels;
+	chardim iMaxCharWidthInPixels;
+	chardim iMaxNormalCharWidthInPixels;
+	int32 iBitmapEncoding;
+	ObjectList<BitmapCodeSection*> iCodeSectionList;
+	MetricDistribution* iCharacterMetrics;
+	};
+ 
+class TypefaceFontBitmap
+/**
+@internalComponent
+*/
+	{
+public:
+	TypefaceFontBitmap(FontBitmap* aFontBitmap);
+	TypefaceFontBitmap(uid aFontBitmapUid);
+	void Externalize(ostream& out);	
+public:
+	FontBitmap* iFontBitmap;
+	uid iFontBitmapUid;
+	char iWidthFactor;
+	char iHeightFactor;
+	};
+
+class FntTypeface : public Record, public Typeface
+/**
+@internalComponent
+*/
+	{
+public:
+	void Externalize(ostream& out);
+public:
+	ObjectList<TypefaceFontBitmap*> iTypefaceFontBitmapList;
+	};
+
+class FontStoreFile : public Record
+/**
+@internalComponent
+*/
+	{
+public:
+	FontStoreFile();
+	void AddTypeface(FntTypeface* aTypeface);
+	void AddFontBitmap(FontBitmap* aFontBitmap);
+	void Externalize(ostream& out);
+private:
+	void ExternalizeHeader(ostream& out);
+	void ExternalizeComponents(ostream& out);
+public:
+	uid iCollectionUid;
+	int32 iKPixelAspectRatio;
+	ObjectList<String*> iCopyrightInfo;
+private:
+	streampos iDataStreamId;
+	RecordList iFontBitmapList;
+	RecordList iTypefaceList;
+	};
+
+class FontStore
+/**
+@internalComponent
+*/
+	{
+public:
+	boolean Store(const String& aFilename);
+	void AddFontStoreFile(FontStoreFile* aFontStoreFile);
+	void AddFontBitmap(FontBitmap* aFontBitmap);
+	Record* FindFontBitmap(String& aLabel);
+	void AddTypeface(FntTypeface* aTypeface);
+	Record* FindTypeface(String& aLabel);
+	FontStore();
+	~FontStore();
+private:
+	FontStoreFile* iFontStoreFile;
+	RecordList iFontBitmapList;
+	RecordList iTypefaceList;
+	};
+
+#endif