diff -r 000000000000 -r 5d03bc08d59c fbs/fontandbitmapserver/sfbs/SERVER.H --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fbs/fontandbitmapserver/sfbs/SERVER.H Tue Feb 02 01:47:50 2010 +0200 @@ -0,0 +1,360 @@ +// 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 "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: +// + +#ifndef __FBSERV_H__ +#define __FBSERV_H__ + +#include +#include +#include +#include "UTILS.H" +#include "FBSMBMC.H" +#include "fbsmessage.h" + +class CFbTop; +class CFbsBackgroundCompression; +class CFbsBackgroundCompressionQueueElement; +class TOpenFontGlyphData; + +NONSHARABLE_CLASS(CFontObject): public CObject +/** +@internalComponent +*/ + { +public: + CFontObject(CFontStore* aFontStore); + ~CFontObject(); +public: + CBitmapFont* iAddressPointer; + CFontStore* iFontStore; + TInt iHeightInTwips; + }; + +NONSHARABLE_CLASS(CBitmapObject): public CObject +/** +Provides reference counting facilities for bitmaps managed by CFbTop. +@internalComponent +*/ + { + friend class CFbsBackgroundCompression; + friend class CFbsBackgroundCompressionQueueElement; +protected: + CBitmapObject(CFbTop& aFbTop, CBitwiseBitmap* aBmp); + void ConstructL(TBool aReplacement); +public: + static CBitmapObject* NewL(CFbTop& aFbTop, CBitwiseBitmap* aBmp, TBool aReplacement); + ~CBitmapObject(); + inline CBitwiseBitmap* Address() const; + inline TInt Handle() const; + inline CBitmapObject* CleanBitmap() const; + inline TBool IsInCompressionQueue() const; + void SetCleanBitmap(CBitmapObject* aNewBmpObj); + virtual void Close(); + static TInt Compare(const CBitmapObject& aBmpObj1, const CBitmapObject& aBmpObj2); + static TInt Compare(const TInt* aHandle, const CBitmapObject& aBmpObj); +protected: + CFbTop* iFbTop; +private: + CBitwiseBitmap* iAddressPointer; + TInt iHandle; + CBitmapObject* iCleanBitmap; + CFbsBackgroundCompressionQueueElement* iCompressionQueueElement; + }; + +NONSHARABLE_CLASS(CSharedBitmapObject): public CBitmapObject +/** +Provides reference counting facilities for shared bitmaps managed by CFbTop. +Shared bitmaps are only loaded once. They are uniquely identified by the +combination of the filename, bitmap ID and last modified time of the file. +@internalComponent +*/ + { +friend class CHashMap; +private: + CSharedBitmapObject(CFbTop& aFbTop, CBitwiseBitmap* aBmp, TDesC* aKey); + void ConstructL(TUint aHash); +public: + static CSharedBitmapObject* NewL(CFbTop& aFbTop, CBitwiseBitmap* aBmp, TDesC* aKey, TUint aHash); + ~CSharedBitmapObject(); + static HBufC* KeyLC(const TDesC& aFileName, TInt aId, const TTime& aModTime); +private: + TDesC* iKey; + mutable CSharedBitmapObject* iNext; // Next object in a linked list + }; + +NONSHARABLE_CLASS(CFontBitmapServer): public CPolicyServer +/** +@internalComponent +*/ + { +public: + CFontBitmapServer(); + ~CFontBitmapServer(); + static CFontBitmapServer* NewL(); + CSession2* NewSessionL(const TVersion& aVersion, const RMessage2& aMessage) const; + TInt Init(); +#ifdef _DEBUG + void ProcMessage(const RMessage2& aMessage, TInt aSession, TInt& aRet); +#else + void ProcMessage(const RMessage2& aMessage, TInt aSession); +#endif + CFbTop* TopLevelStore(); + +private: + void GetHeapSizesL(const RMessage2& aMessage); + TInt HandleMesgTypefaceSupport(const RMessage2& aMessage, TBool& aClientPanicRequired); + TInt HandleMesgFontHeight(const RMessage2& aMessage, TBool aInTwips); + +protected: + TUint iConnectionId; + CFbTop* iTopLevelStore; + }; + +class TFontFileIndex +/** +@internalComponent +*/ + { +public: + TUid iUid; + TInt iAccessCount; + }; + + +class CFbClient; + +NONSHARABLE_CLASS(TFbClientHelper): public TDblQueLink +/** +@internalComponent +*/ + { +public: + inline TFbClientHelper(CFbClient& aClient); + +public: + CFbClient& iClient; + RMessagePtr2 iMessage; + TBool iDirty; + }; + +NONSHARABLE_CLASS(CFbClient): public CSession2 +/** +@internalComponent +*/ + { +public: + static CFbClient* NewL(RHeap* aHeap); + ~CFbClient(); + void Init(TUint aConnectionHandle); + void CreateL(); + CFontBitmapServer* FontBitmapServer(); + CFbTop* TopLevelStore(); + void CopyFontInfo(CFontObject* aFontObjPtr,TInt aHandle,TFontInfo& aFontInfo); + void ServiceL(const RMessage2& aMessage); + void ProcFontMessage(const RMessage2& aMessage); + void ProcBitmapMessage(const RMessage2& aMessage); + void NotifyDirtyBitmap(CBitmapObject& aBmpObj); + void AddFontFileIndexL(TUid aId); + void RemoveFontFileIndex(TUid aId); + void Disconnect(const RMessage2 &aMessage); +#ifdef _DEBUG + void ProcMemMessage (const RMessage2& aMessage); +#endif +private: + CFbClient(RHeap* aHeap); + TInt HandleMesgFontDuplicate(const RMessage2& aMessage, TBool& aPanicRequired); + TInt HandleMesgGetNearestFont(const RMessage2& aMessage, TBool& aPanicRequired); + TInt HandleMesgGetFontById(const RMessage2& aMessage, TBool& aPanicRequired); + TInt CopyFontInfoIntoReturnMessage(const RMessage2& aMessage, TBool& aPanicRequired, CFontObject* aFontObj, TInt iWritePosition); + TInt HandleMesgAddOrInstallFontFile(const RMessage2& aMessage, TBool& aPanicRequired); + TInt HandleMesgRemoveFontFile(const RMessage2& aMessage); + TInt HandleMesgRasterize(const RMessage2& aMessage, TBool& aPanicRequired); + TInt HandleMesgFaceAttrib(const RMessage2& aMessage, TBool& aPanicRequired); + TInt HandleMesgHasCharacter(const RMessage2& aMessage, TBool& aPanicRequired); + TInt HandleMesgShapeText(const RMessage2& aMessage, TBool& aPanicRequired); + TInt HandleMesgShapeDelete(const RMessage2& aMessage, TBool& aPanicRequired); + +protected: + TUint iConnectionHandle; + CObjectIx* iIx; + TInt iResourceCount; + CArrayFixFlat* iFontFileIndex; + RHeap* iHeap; // the heap containing iOpenFontGlyphData + TOpenFontGlyphData* iOpenFontGlyphData; // the metrics and bitmap, in shared memory, of the last character rasterized + TInt iSessionHandle; // used to identify client-specific glyph caches for the new font system + TFbClientHelper* iHelper; // used to notify client of any bitmap becoming dirty + +private: + RBuf16 iTextToShape; // buffer used to hold incoming text that needs shaping +#ifdef _DEBUG + TBool iOwnHeapCheck; //for the process heap - current state + TBool iHeapCheck; //for iHeap - current state + TBool iOwnHeapCheckFlip; //for the process heap - to switch the current state + TBool iHeapCheckFlip; //for iHeap - used to switch the current state + TInt iOwnHeapFailNumber; //the number for the memory fail to be set to. -1: don't set. + TInt iSharedHeapFailNumber; //the number for the memory fail to be set to. -1 don't set + TInt iRet; + TInt iFontDuplicateToFail; //when this is set calls to HandleMesgFontDuplicate() fail for the class. +#endif + }; + +NONSHARABLE_CLASS(CFbActiveScheduler): public CActiveScheduler +/** +@internalComponent +*/ + { +public: + CFbActiveScheduler(); + virtual void Error(TInt anError) const; + }; + +class CFontStore; + +NONSHARABLE_CLASS(CHashMap): public CBase +/** +A HashMap data structure for storing pointers to CSharedBitmapObjects. +Provides fast insert/lookup/removal based on a key. +@internalComponent +*/ + { +public: + CHashMap(); + ~CHashMap(); + + void Insert(CSharedBitmapObject& aBmpObj, TUint aHash); + CSharedBitmapObject* Lookup(const TDesC& aKey, TUint aHash) const; + TInt Remove(const CSharedBitmapObject& aBmpObj); + static TUint Hash(const TDesC16& aKey); + +private: + CSharedBitmapObject* iHashTable[1< iFontNameAlias; + RPointerArray iBitmapObjectIndex; + CHashMap iSharedBitmapObjectHashMap; + CFbTopStreamIdCache* iMBMCache; + TLanguage iDefaultLanguageForMetrics; + CFbsBackgroundCompression* iBackgroundCompression; + TBuf iSystemDefaultFontTypefaceName; + TDblQue iClientHelpers; + TInt64 iNextAvailableSerialNumber; + }; + +inline CBitwiseBitmap* CBitmapObject::Address() const + { + return iAddressPointer; + } + +inline TInt CBitmapObject::Handle() const + { + return iHandle; + } + +inline CBitmapObject* CBitmapObject::CleanBitmap() const + { + return iCleanBitmap; + } + +inline TBool CBitmapObject::IsInCompressionQueue() const + { + return iCompressionQueueElement != NULL; + } + +inline TFbClientHelper::TFbClientHelper(CFbClient& aClient) + : iClient(aClient), iDirty(EFalse) + {} + +inline CFbsBackgroundCompression* CFbTop::BackgroundCompression() const + { + __ASSERT_DEBUG(iBackgroundCompression != NULL, User::Invariant()); + return iBackgroundCompression; + } + +/** +It returns the file session handle. + +@internalComponent +*/ +inline RFs& CFbTop::FileSession() + { + return iFilesys; + } + +#endif +