fontservices/textshaperplugin/include/SymbianFontInstance.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 02 Feb 2010 02:02:46 +0200
changeset 0 1fb32624e06b
permissions -rw-r--r--
Revision: 201003 Kit: 201005

/*
* Copyright (c) 2005-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: 
* SymbianFontInstance.CPP
* Symbian implementation of LEFontInstance
*
*/


#ifndef SYMBIANFontInstance_H_
#define SYMBIANFontInstance_H_

#include <stdio.h>

#include "layout/LETypes.h"
#include "layout/LEFontInstance.h"

#include "FontTableCache.h"

#include "sfnt.h"
#include "cmaps.h"

// Symbian includes
#include <gdi.h>

class MOpenFontExtensionInterface;

class SymbianFontInstance : public LEFontInstance, protected FontTableCache
	{
public:
	SymbianFontInstance(CBitmapFont* aBitmapFont, LEErrorCode &status, le_bool aKeepGlyphOfZWJ = false);
	virtual ~SymbianFontInstance();
	void SetSessionHandle(TInt aHandle) 
		{
		iSessionHandle = aHandle;
		}

	const void *getFontTable(LETag tableTag) const;

	le_int32 getUnitsPerEM() const
		{
		return fUnitsPerEM;
		}

	le_int32 getAscent() const
		{
		return fAscent;
		}

	le_int32 getDescent() const
		{
		return fDescent;
		}

	le_int32 getLeading() const
		{
		return fLeading;
		}

	LEGlyphID mapCharToGlyph(LEUnicode32 ch) const
		{
		// 1922 mlyl -->
		if (ch == 0x200D && !iKeepGlyphOfZWJ)
			return 1;
		else
		// <-- 1922 mlyl
			return fCMAPMapper->unicodeToGlyph(ch);
		}

	void getGlyphAdvance(LEGlyphID glyph, LEPoint &advance) const;

	le_bool getGlyphPoint(LEGlyphID glyph, le_int32 pointNumber, LEPoint &point) const;

	void transformFunits(float xFunits, float yFunits, LEPoint &pixels) const;
	float xUnitsToPoints(float xUnits) const;
	float yUnitsToPoints(float yUnits) const;
	float getXPixelsPerEm() const;
	float getYPixelsPerEm() const;
	float getScaleFactorX() const;
	float getScaleFactorY() const;

protected:
	const void *readFontTable(LETag tableTag) const;

private:
	FILE *fFile;	

	le_int32 fUnitsPerEM;
	le_int32 fAscent;
	le_int32 fDescent;
	le_int32 fLeading;

	const SFNTDirectory *fDirectory;
	le_uint16 fDirPower;
	le_uint16 fDirExtra;

	float fXPixelsPerEm;
	float fYPixelsPerEm;

	float fDeviceScaleX;
	float fDeviceScaleY;

	CMAPMapper *fCMAPMapper;

	const HMTXTable *fHMTXTable;
	le_uint16 fNumGlyphs;
	le_uint16 fNumLongHorMetrics;

	CBitmapFont* iFont;
	MOpenFontShapingExtension* iExtensionInterface;
	MOpenFontTrueTypeExtension* iTrueTypeExtensionInterface;
	TInt iSessionHandle;
	
	// --> 1922 mlyl: The script which this shaper will shape
	le_bool iKeepGlyphOfZWJ;
	// <-- 1922 mlyl

	static le_int8 highBit(le_int32 value);

	const DirectoryEntry *findTable(LETag tag) const;
	const void *readTable(LETag tag, le_uint32 *length) const;
	void deleteTable(const void *table) const;
	void getMetrics();

	CMAPMapper *findUnicodeMapper();
	};

#endif