diff -r 000000000000 -r 1fb32624e06b fontservices/fontstore/inc/openfontrasterizer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fontservices/fontstore/inc/openfontrasterizer.h Tue Feb 02 02:02:46 2010 +0200 @@ -0,0 +1,125 @@ +/* +* 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: +* The Open Font rasterizer plug-in Interface Definition class. +* +*/ + + +#ifndef OPENFONTRASTERIZER_H +#define OPENFONTRASTERIZER_H + +class COpenFontFile; + +/** +Supplied to COpenFontRasterizer::ExtendedInterface() to access the extended +API interface MOpenFontLinkedTypefaceExtension. + +@see COpenFontRasterizer::ExtendedInterface() +@see MOpenFontLinkedTypefaceExtension +@publishedPartner +@prototype +*/ +const TUid KUidLinkedTypefaceRasterizerExtension = {0x10285EAA}; + +/** +The Open Font rasterizer plug-in Interface Definition class. + +This interface allows the implementation of an Open Font rasterizer plug-in, +which can then be dynamically loaded at run time by the ECOM plug-in framework. +The plug-in implementation is instantiated by calling NewL(), passing the implementation +UID so that ECOM can instantiate the correct implementation. + +The rasterizer interface declares a single pure virtual functions, which the +plug-in derived from this interface must implement. The function reads font files, and creates +a COpenFontFile object if the font file is of the right type. + +Writing derived classes: + +Open font rasterizers should derive from this class and implement the +NewFontFileL() function. + +Derived classes should also define the factory function. It is a static function +which takes no arguments. It creates a COpenFontRasterizer derived object on the heap, and returns it +to the caller. This factory function, together with the implementation UID will form +the TImplementationProxy used by the ECOM framework to instatiate the plug-in. + +The rasterizer class may also need to store an 'engine context'. This is an +object derived from COpenFontRasterizerContext, which provides functions that +make it easier to write the glyph bitmap during rasterization. + + +@publishedPartner +@released +*/ +class COpenFontRasterizer: public CBase + { +public: + /** Creates a COpenFontFile derived object for loading font files in the + new format. + + This function is called by the framework during font and bitmap server + startup. It creates a font file object for font files in the \\resource\\fonts + directory on all drives, using the default search path. The first font of + a given name overrides subsequent ones. The directory search path is soft + to hard: Y:, X:, W:, ..., C:, B:, A:, Z:. Files may also be added + dynamically after startup using CWsScreenDevice::AddFile(), which + indirectly calls this function. + + Implementations of this function should examine the file aFileName, and if + it is of the correct type attempt to create a COpenFontFile derived object + to load it. The caller is responsible for deleting the object. The function + must return NULL if it cannot recognise the file, and it may also leave if + there is an error. + + @param aUid An ID to be used for the file. UIDs are required by the font + framework, so the font store allocates them for non Symbian OS-native font + files. This ID persists until the font is unloaded, e.g. if the device is + rebooted. + @param aFileName The full path and filename of the file from which the COpenFontFile + object is created, if the file is the correct type. + @param aFileSession The file session owned by the Font and Bitmap server. This file session + should be used for any file access. If COpenFontFile objects need to keep + files open, aFileSession should be stored in a place that is accessible to them. + @return A pointer to a new COpenFontFile derived object, or NULL if the file type is not recognised. + @see CWsScreenDevice::AddFile() */ + virtual COpenFontFile* NewFontFileL(TInt aUid,const TDesC& aFileName,RFs& aFileSession) = 0; + inline static COpenFontRasterizer* NewL(TUid aInterfaceImplUid); + inline virtual ~COpenFontRasterizer(); + IMPORT_C virtual void ExtendedInterface(TUid aUid, TAny*& aParam); +private: + TUid iDtor_ID_Key;//ECOM identifier used during destruction + }; + +/** Uses ECOM plug-in framework to instantiate the Open Font rasterizer interface +implementation given its implementation UID. + +@param aInterfaceImplUid The UID of the interface implementation required + +@return COpenFontRasterizer* A pointer to a COpenFontRasterizer object. */ +inline COpenFontRasterizer* COpenFontRasterizer::NewL(TUid aInterfaceImplUid) +{ + return reinterpret_cast ( + REComSession::CreateImplementationL( + aInterfaceImplUid, + _FOFF(COpenFontRasterizer, iDtor_ID_Key))); +} + +/** Default destructor */ +inline COpenFontRasterizer::~COpenFontRasterizer() +{ + REComSession::DestroyedImplementation(iDtor_ID_Key); +} + +#endif /*OPENFONTRASTERIZER_H*/