williamr@2: // Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@2: // All rights reserved. williamr@2: // This component and the accompanying materials are made available williamr@4: // under the terms of "Eclipse Public License v1.0" williamr@2: // which accompanies this distribution, and is available williamr@4: // at the URL "http://www.eclipse.org/legal/epl-v10.html". williamr@2: // williamr@2: // Initial Contributors: williamr@2: // Nokia Corporation - initial contribution. williamr@2: // williamr@2: // Contributors: williamr@2: // williamr@2: // Description: williamr@2: // williamr@2: williamr@2: #ifndef __FBS_H__ williamr@2: #define __FBS_H__ williamr@2: williamr@4: /** williamr@4: @file williamr@4: @publishedAll williamr@4: @released williamr@4: */ williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: #include williamr@4: #include williamr@4: williamr@4: /** williamr@4: @publishedAll williamr@4: @released williamr@4: */ williamr@4: const TUid KCFbsFontUid = { 268435518 }; williamr@2: williamr@2: /** williamr@2: Indicates version of the font and bitmap server without heap locking. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: #define SYMBIAN_FBSERV_V2 williamr@2: williamr@2: /** williamr@2: Character width and adjustment information. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: class SCharWidth williamr@2: { williamr@2: public: williamr@2: /** The left adjust of the character. */ williamr@2: TInt iLeftAdjust; williamr@2: /** The right adjust of the character. */ williamr@2: TInt iRightAdjust; williamr@2: /** The total width of the character, defined as iLeftAdjust + iWidth + iRightAdjust. */ williamr@2: TInt iMove; williamr@2: /** The width of the character. */ williamr@2: TInt iWidth; williamr@2: }; williamr@2: williamr@2: class CFbsRalCache; williamr@2: class CFbsSessionHelper; williamr@4: class CFbsRasterizer; williamr@2: williamr@2: /** williamr@2: A session with the font and bitmap server. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: class RFbsSession : protected RSessionBase williamr@2: { williamr@2: // Allow access to internals for test williamr@2: friend class RClean; williamr@2: friend class TestFbs; williamr@2: friend class CTBitmap; williamr@2: friend class CTClean; williamr@2: friend class CTFbs; williamr@2: williamr@2: friend class CFbsBitmap; williamr@2: friend class CFbsBitmapAsyncStreamer; williamr@2: public: williamr@2: IMPORT_C RFbsSession(); williamr@2: IMPORT_C static TInt Connect(); williamr@2: IMPORT_C static TInt Connect(RFs& aFileServer); williamr@2: IMPORT_C static void Disconnect(); williamr@2: IMPORT_C static RFbsSession* GetSession(); williamr@2: IMPORT_C void CallBack(); williamr@2: IMPORT_C void SetCallBack(TCallBack aCallBack); williamr@2: IMPORT_C void ResetCallBack(); williamr@2: IMPORT_C TInt ResourceCount(); williamr@2: IMPORT_C TInt SendCommand(TInt aMessage,TInt aInt0=0,TInt aInt1=0,TInt aInt2=0,TInt aInt3=0) const; williamr@2: TInt SendCommand(TInt aMessage, const TIpcArgs& aArgs) const; williamr@2: void SendCommand(TInt aMessage, const TIpcArgs& aArgs, TRequestStatus &aStatus) const; williamr@2: IMPORT_C TVersion Version(); williamr@2: IMPORT_C TUint8* HeapBase() const; williamr@2: IMPORT_C TInt GetHeapSizes(TInt& aDefaultHeap, TInt& aSmallBmpHeap, TInt& aBigBmpChunk); williamr@2: TInt SessionHandle() const { return Handle(); } williamr@2: TInt AllocScanLineBuffer(TInt aSize); williamr@2: HBufC8* GetScanLineBuffer(); williamr@2: void SetCallBackPtr(TInt* aBitmapHandle)const; williamr@2: HBufC8* GetDecompressionBuffer(TInt aSize); williamr@2: HBufC8* GetExtraBuffer(TInt aSize); williamr@4: TInt ServerSessionHandle() const; williamr@2: public: williamr@4: /** WARNING: For internal use ONLY. Compatibility is not guaranteed in future releases. williamr@4: Used for testing server side out of memory failures. williamr@4: @test williamr@2: */ williamr@2: enum THeapFailType williamr@2: { williamr@2: EHeapFailTypeServerMemory, williamr@2: EHeapFailTypeHeapMemory, williamr@2: }; williamr@2: private: williamr@2: TBool LookupBitmapInROM(const TDesC& aFilename, TAny*& aAddr); williamr@2: RFs& FileServer() { return *((RFs*)iSpare); } williamr@2: static TInt DoAlloc(RFbsSession*& aNewSession); williamr@2: TInt DoConnect(RFs& aFileServer); williamr@2: private: williamr@2: TInt iConnections; williamr@2: mutable TCallBack iCallBack; williamr@2: RChunk iSharedChunk; williamr@2: CFbsSessionHelper* iHelper; williamr@2: RChunk iLargeBitmapChunk; williamr@2: RFs iFileServer; williamr@2: CFbsRalCache* iRomFileAddrCache; williamr@2: HBufC8* iDecompressionBuffer; williamr@2: HBufC8* iScanLineBuffer; williamr@2: TUint32* iSpare; williamr@2: }; williamr@2: williamr@2: /** williamr@2: Font managed by the font and bitmap server. williamr@2: CFbsFont objects are used for screen and off-screen bitmap fonts. They are williamr@2: usually obtained by calls to the CBitmapDevice::GetNearestFontInPixels() and williamr@2: MGraphicsDeviceMap::GetNearestFontInTwips() functions. williamr@2: The class implements a number of functions inherited from CFont. williamr@2: @see CBitmapDevice::GetNearestFontInPixels() williamr@2: @see MGraphicsDeviceMap::GetNearestFontInTwips() williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: class CFbsFont: public CFont williamr@2: { williamr@2: friend class CFbsTypefaceStore; williamr@2: williamr@2: private: williamr@2: // From CFont williamr@2: /** Gets the font's UID. williamr@2: All CFbsFont objects have the constant UID KCFbsFontUid. It is safe to cast williamr@2: from CFont* to CFbsFont* if CFont::TypeUid() returns KCFbsFontUid. williamr@2: @return The font's UID. This should be KCFbsFontUid. williamr@2: @see CFont::TypeUid() */ williamr@2: virtual TUid DoTypeUid() const { return KCFbsFontUid; } williamr@2: IMPORT_C virtual TInt DoHeightInPixels() const; williamr@2: IMPORT_C virtual TInt DoAscentInPixels() const; williamr@2: IMPORT_C virtual TInt DoCharWidthInPixels(TChar aChar) const; williamr@2: IMPORT_C virtual TInt DoTextWidthInPixels(const TDesC& aText) const; williamr@2: IMPORT_C virtual TInt DoBaselineOffsetInPixels() const; williamr@2: IMPORT_C virtual TInt DoTextCount(const TDesC& aText,TInt aWidthInPixels) const; williamr@2: IMPORT_C virtual TInt DoTextCount(const TDesC& aText,TInt aWidthInPixels,TInt& aExcessWidthInPixels) const; williamr@2: IMPORT_C virtual TInt DoMaxCharWidthInPixels() const; williamr@2: IMPORT_C virtual TInt DoMaxNormalCharWidthInPixels() const; williamr@2: IMPORT_C virtual TFontSpec DoFontSpecInTwips() const; williamr@2: IMPORT_C virtual CFont::TCharacterDataAvailability DoGetCharacterData(TUint aCode, TOpenFontCharMetrics& aMetrics, williamr@2: const TUint8*& aBitmap, TSize& aBitmapSize) const; williamr@2: IMPORT_C virtual TInt DoExtendedFunction(TUid aFunctionId, TAny* aParam = NULL) const; williamr@2: williamr@2: public: williamr@2: // New functions williamr@2: IMPORT_C TBool GetFontMetrics(TOpenFontMetrics& aMetrics) const; williamr@2: IMPORT_C TInt TextWidthInPixels(const TDesC& aText) const; williamr@2: IMPORT_C void TextWidthInPixels(const TDesC& aText,SCharWidth& aCharWidth) const; williamr@2: IMPORT_C TInt Handle() const; williamr@2: IMPORT_C TCharacterMetrics CharacterMetrics(TInt aCode,const TUint8*& aBytes) const; williamr@2: IMPORT_C TInt RawTextWidthInPixels(const TDesC& aText) const; williamr@2: IMPORT_C TBool GetFaceAttrib(TOpenFontFaceAttrib& aAttrib) const; williamr@2: IMPORT_C TBool IsOpenFont() const; williamr@2: IMPORT_C TBool HasCharacter(TInt aCode) const; williamr@4: IMPORT_C TInt TextWidthInPixels(const TDesC& aText,const TMeasureTextInput* aParam) const; williamr@4: IMPORT_C void TextWidthInPixels(const TDesC& aText,const TMeasureTextInput* aParam,SCharWidth& aCharWidth) const; williamr@4: williamr@2: williamr@2: protected: williamr@2: IMPORT_C CFbsFont(); williamr@2: IMPORT_C ~CFbsFont(); williamr@2: IMPORT_C CFbsFont(const CFbsFont& aFont); williamr@2: IMPORT_C CBitmapFont* Address() const; williamr@2: IMPORT_C TInt Duplicate(TInt aHandle); williamr@2: IMPORT_C void Reset(); williamr@2: williamr@2: private: williamr@2: TInt DoFontGetShaping(TFontShapeFunctionParameters* aParam) const; williamr@2: TInt DoFontDeleteShaping(TFontShapeDeleteFunctionParameters* aParam) const; williamr@4: TInt DoTextWidthInPixels(const TDesC& aText,const TMeasureTextInput* aParam) const; williamr@2: williamr@2: protected: williamr@2: RFbsSession* iFbs; williamr@2: CBitmapFont* iAddressPointer; williamr@2: TInt iHandle; williamr@2: TInt iServerHandle; williamr@2: }; williamr@2: williamr@4: /** williamr@4: An interface for initialization of extended bitmaps. By implementing this interface, williamr@4: creators of extended bitmaps can set the contents of an extended bitmap without williamr@4: allocating a temporary buffer and avoid unnecessary memory copying during calls to williamr@4: CFbsBitmap::CreateExtendedBitmap(). williamr@4: williamr@4: WARNING: Class for internal and partner use ONLY. Compatibility is not guaranteed in future releases. williamr@4: williamr@4: @publishedAll williamr@4: @see CFbsBitmap::CreateExtendedBitmap() williamr@4: */ williamr@4: class MFbsExtendedBitmapInitializer williamr@4: { williamr@4: public: williamr@4: /** williamr@4: Initializes the raw data of an extended bitmap. williamr@4: @param aData A pointer to the raw data to be initialized. williamr@4: @param aDataSize The size in bytes of the raw data to be initialized. williamr@4: @return KErrNone if successful, otherwise another of the system-wide error codes. williamr@4: */ williamr@4: virtual TInt InitExtendedBitmap(TAny* aData, TInt aDataSize) = 0; williamr@4: }; williamr@4: williamr@2: class CDirectFileStore; williamr@2: williamr@2: /** williamr@2: Note that this class is not intended for user derivation. williamr@2: A bitmap managed by the font and bitmap server. williamr@2: The class also defines some palette functionality which is not yet williamr@2: implemented, since none of the modes currently supported by screen williamr@2: or bitmaps require variable palettes. williamr@2: Note that the CFbsBitmap format is internal to Symbian, but the williamr@2: Image Converter API can be used to convert such bitmaps to standard formats. williamr@2: CFbsBitmap instances cannot be shared between different threads. They use some shared williamr@2: thread local storage data. If you want to share a bitmap between threads, use Duplicate(). williamr@2: @publishedAll williamr@2: @released williamr@2: @see CFbsBitmap::Duplicate() williamr@2: */ williamr@2: class CFbsBitmap : public CBase williamr@2: { williamr@2: friend class TBitmapUtil; williamr@2: friend class CBitwiseBitmap; williamr@2: friend class CFbsBitmapAsyncStreamer; williamr@2: friend class CFbsSessionHelper; williamr@2: public: williamr@2: IMPORT_C CFbsBitmap(); williamr@2: IMPORT_C ~CFbsBitmap(); williamr@2: IMPORT_C void Reset(); williamr@2: IMPORT_C static TInt ScanLineLength(TInt aLength,TDisplayMode aDispMode); williamr@2: IMPORT_C TDisplayMode DisplayMode() const; williamr@2: IMPORT_C TDisplayMode InitialDisplayMode() const; williamr@2: IMPORT_C TInt SetDisplayMode(TDisplayMode aDisplayMode); williamr@2: IMPORT_C TInt Create(const TSize& aSizeInPixels,TDisplayMode aDispMode); williamr@2: IMPORT_C TInt Duplicate(TInt aHandle); williamr@2: IMPORT_C TBool IsRomBitmap() const; williamr@2: IMPORT_C void SetRomBitmapL(CBitwiseBitmap* aRomBitmapPointer,TInt& aBitmapSizeInBytes); williamr@2: IMPORT_C TInt Load(const TDesC& aFileName,TInt32 aId=0,TBool aShareIfLoaded=ETrue); williamr@2: IMPORT_C TInt Load(const TDesC& aFileName,TInt32 aId,TBool aShareIfLoaded,TUint aFileOffset); williamr@2: IMPORT_C TInt LoadAndCompress(const TDesC& aFileName,TInt32 aId=0,TBool aShareIfLoaded=ETrue); williamr@2: IMPORT_C TInt LoadAndCompress(const TDesC& aFileName,TInt32 aId,TBool aShareIfLoaded,TUint aFileOffset); williamr@2: IMPORT_C TInt Load(RFile& aFile,TInt32 aId=0,TBool aShareIfLoaded=ETrue); williamr@2: IMPORT_C TInt Load(RFile& aFile,TInt32 aId,TBool aShareIfLoaded,TUint aFileOffset); williamr@2: IMPORT_C TInt LoadAndCompress(RFile& aFile,TInt32 aId=0,TBool aShareIfLoaded=ETrue); williamr@2: IMPORT_C TInt LoadAndCompress(RFile& aFile,TInt32 aId,TBool aShareIfLoaded,TUint aFileOffset); williamr@2: IMPORT_C TInt Save(const TDesC& aFilename); williamr@2: IMPORT_C TInt Save(RFile& aFile); williamr@2: IMPORT_C static void StoreL(const TDesC& aFilename,TInt aNumSources,const TDesC* aSources[],TInt32 aSourceIds[]); williamr@2: IMPORT_C static void StoreL(RFile& aFile,TInt aNumSources,const TDesC* aSources[],TInt32 aSourceIds[]); williamr@2: IMPORT_C void GetScanLine(TDes8& aBuf,const TPoint& aPixel,TInt aLength,TDisplayMode aDispMode) const; williamr@2: IMPORT_C void SetScanLine(TDes8& aBuf,TInt aY) const; williamr@2: IMPORT_C void GetVerticalScanLine(TDes8& aBuf,TInt aX,TDisplayMode aDispMode) const; williamr@2: IMPORT_C void GetVerticalScanLine(TDes8& aBuf,TInt aX,const TPoint& aDitherOffset,TDisplayMode aDispMode) const; williamr@2: IMPORT_C TInt Handle() const; williamr@2: IMPORT_C SEpocBitmapHeader Header() const; williamr@2: IMPORT_C TInt HorizontalPixelsToTwips(TInt aPixels) const; williamr@2: IMPORT_C TInt HorizontalTwipsToPixels(TInt aTwips) const; williamr@2: IMPORT_C void GetPixel(TRgb& aColor,const TPoint& aPixel) const; williamr@2: IMPORT_C TInt Resize(const TSize& aSizeInPixels); williamr@2: IMPORT_C TSize SizeInPixels() const; williamr@2: IMPORT_C TSize SizeInTwips() const; williamr@2: IMPORT_C void SetSizeInTwips(const MGraphicsDeviceMap* aMap); williamr@2: IMPORT_C void SetSizeInTwips(const TSize& aSizeInTwips); williamr@2: IMPORT_C void ExternalizeL(RWriteStream& aStream) const; williamr@2: IMPORT_C void ExternalizeRectangleL(RWriteStream& aStream,const TRect& aRect) const; williamr@2: IMPORT_C void InternalizeL(RReadStream& aStream); williamr@2: IMPORT_C TInt Compress(); williamr@2: IMPORT_C TInt Compress(TBitmapfileCompressionScheme aScheme); williamr@2: IMPORT_C void CompressInBackground(TRequestStatus& aRequestStatus); williamr@2: IMPORT_C TInt CompressInBackground(); williamr@2: IMPORT_C void CompressInBackground(TRequestStatus& aRequestStatus, TBitmapfileCompressionScheme aScheme); williamr@2: IMPORT_C TInt CompressInBackground(TBitmapfileCompressionScheme aScheme); williamr@2: IMPORT_C TInt VerticalPixelsToTwips(TInt aPixels) const; williamr@2: IMPORT_C TInt VerticalTwipsToPixels(TInt aTwips) const; williamr@2: IMPORT_C static TBool IsFileInRom(const TDesC& aFilename,TUint32*& aWord); williamr@2: IMPORT_C static TBool IsFileInRom(RFile& aFile,TUint32*& aWord); williamr@2: IMPORT_C TBool IsMonochrome() const; williamr@2: IMPORT_C TBool IsLargeBitmap() const; williamr@2: IMPORT_C void PaletteAttributes(TBool& aModifiable,TInt& aNumEntries) const; williamr@2: IMPORT_C void SetPalette(CPalette* aPalette); williamr@2: IMPORT_C TInt GetPalette(CPalette*& aPalette) const; williamr@2: IMPORT_C TUint32* DataAddress() const; williamr@2: IMPORT_C TInt DataStride() const; williamr@2: IMPORT_C TInt CreateHardwareBitmap(const TSize& aSizeInPixels,TDisplayMode aDispMode,TUid aCreatorUid); williamr@2: IMPORT_C TInt HardwareBitmapHandle() const; williamr@2: IMPORT_C void BeginDataAccess() const; williamr@2: IMPORT_C void EndDataAccess(TBool aReadOnly=EFalse) const; williamr@2: IMPORT_C void LockHeap(TBool aAlways=EFalse) const; williamr@2: IMPORT_C void UnlockHeap(TBool aAlways=EFalse) const; williamr@2: IMPORT_C void LockHeapLC(TBool aAlways=EFalse) const; williamr@2: IMPORT_C static void UnlockHeap(TAny* aFbsBitmap); williamr@4: IMPORT_C TBool IsVolatile() const; williamr@4: IMPORT_C TInt TouchCount() const; williamr@4: IMPORT_C TInt64 SerialNumber() const; williamr@2: IMPORT_C TBool IsCompressedInRAM() const; williamr@2: IMPORT_C TInt SwapWidthAndHeight(); williamr@4: IMPORT_C TInt CreateExtendedBitmap(const TSize& aSizeInPixels, TDisplayMode aDispMode, TUid aType, const TAny* aData, TInt aDataSize); williamr@4: IMPORT_C TInt CreateExtendedBitmap(const TSize& aSizeInPixels, TDisplayMode aDispMode, TUid aType, TInt aDataSize, MFbsExtendedBitmapInitializer& aInitializer); williamr@4: IMPORT_C TUid ExtendedBitmapType() const; williamr@4: IMPORT_C TInt DataSize() const; williamr@2: IMPORT_C static HBufC8* GetDecompressionBuffer(TInt aSize); williamr@4: IMPORT_C static CFbsRasterizer* Rasterizer(); williamr@2: IMPORT_C TInt GetAllBitmapHandles(RArray& aBitmapIdArray) const; williamr@2: IMPORT_C static HBufC8* GetExtraBuffer(TInt aSize); williamr@2: protected: williamr@2: IMPORT_C void GetScanLine(TDes8& aBuf,const TPoint& aPixel,TInt aLength,const TPoint& aDitherOffset,TDisplayMode aDispMode) const; williamr@2: CBitwiseBitmap* Address() const; williamr@2: IMPORT_C CBitwiseBitmap* CleanAddress() const; williamr@4: inline CBitwiseBitmap* BeginDataAccessAndGetCleanAddress(TUint32*& aDataAddress) const; williamr@2: void DoSaveL(RFile& aFile); williamr@4: TInt DoCreate(const TSize& aSizeInPixels, TDisplayMode aDispMode, TUid aUid, TInt aDataSize = 0); williamr@2: private: williamr@2: TInt DoLoad(RFile& aFile,TInt32 aId,TBool aShareIfLoaded,TUint aFileOffset); williamr@2: TInt DoLoad(const TDesC& aFileName,TInt32 aId,TBool aShareIfLoaded,TUint aFileOffset); williamr@2: TInt DoLoadFromRom(TUint32* aRomPointer, TInt32 aId, TUint aFileOffset, TBool& aRomPointerValid); williamr@2: TBool LoadShiftedRomBmpL(const TDesC& aFileName,TInt32 aId,TUint aFileOffset); williamr@2: static void DoStoreL(CDirectFileStore* aFileStore,CFbsBitmap* aBitmap,TInt aNumSources,const TDesC* aSources[],TInt32 aSourceIds[]); williamr@2: protected: williamr@4: /** WARNING: For internal use ONLY. Compatibility is not guaranteed in future releases. williamr@4: */ williamr@2: enum // Flags williamr@2: { williamr@4: EIsRomBitmap = 0x0001, williamr@4: EIsExtendedBitmap = 0x0002, williamr@4: EIsReadOnlyBitmapMask = EIsRomBitmap | EIsExtendedBitmap williamr@2: }; williamr@4: protected: williamr@4: RFbsSession* iFbs; /**< WARNING: Member variable for internal use ONLY. Compatibility is not guaranteed in future releases. Please access using the provided get/set APIs only. */ williamr@4: CBitwiseBitmap* iAddressPointer; /**< WARNING: Member variable for internal use ONLY. Compatibility is not guaranteed in future releases. Please access using the provided get/set APIs only. */ williamr@4: TUint16 iFlags; /**< WARNING: Member variable for internal use ONLY. Compatibility is not guaranteed in future releases. Please access using the provided get/set APIs only. */ williamr@4: TInt16 iUseCount; /**< WARNING: Member variable for internal use ONLY. Compatibility is not guaranteed in future releases. Please access using the provided get/set APIs only. */ williamr@4: TInt iHandle; /**< WARNING: Member variable for internal use ONLY. Compatibility is not guaranteed in future releases. Please access using the provided get/set APIs only. */ williamr@4: TInt iServerHandle; /**< WARNING: Member variable for internal use ONLY. Compatibility is not guaranteed in future releases. Please access using the provided get/set APIs only. */ williamr@2: }; williamr@2: williamr@2: williamr@2: /** williamr@2: Provides fast read/write access to the pixel data of a bitmap. williamr@2: williamr@2: Functionality includes getting and setting the individual pixels of a bitmap. williamr@2: Common to this is the concept of the current pixel position. This is held williamr@2: as member data and is changed by using various efficient functions. For example, williamr@2: incrementing the position's x- or y co-ordinate is much quicker than setting williamr@2: a completely new position. This efficiency issue is important as these functions williamr@2: are used as part of the frequently used blitting DDA used for creating williamr@2: stretched or compressed versions of bitmaps. williamr@2: williamr@2: Calls to Begin() and End() must surround any calls to the other member functions. williamr@2: Note that you should always ensure each Begin() is matched by an End() call williamr@2: when using this class. williamr@2: williamr@2: Note also that all display modes including EColor16M are supported, but the williamr@2: TDisplayMode values ERgb and ENone are not considered to be display modes. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: class TBitmapUtil williamr@2: { williamr@2: public: williamr@2: IMPORT_C void Begin(const TPoint& aPosition); williamr@2: IMPORT_C void Begin(const TPoint& aPosition,const TBitmapUtil& aUtil); williamr@2: IMPORT_C void End(); williamr@2: IMPORT_C TBitmapUtil(CFbsBitmap* aBitmap); williamr@2: IMPORT_C TUint32 GetPixel() const; williamr@2: IMPORT_C void SetPixel(TUint32 aValue); williamr@2: IMPORT_C void SetPixel(const TBitmapUtil& aSource); williamr@2: IMPORT_C void SetPos(const TPoint& aPosition); williamr@2: IMPORT_C void DecXPos(); williamr@2: IMPORT_C void DecYPos(); williamr@2: IMPORT_C void IncXPos(); williamr@2: IMPORT_C void IncYPos(); williamr@2: private: williamr@2: CFbsBitmap* iFbsBitmap; williamr@2: TUint32* iWordPos; williamr@2: TUint32* iMinWordPos; williamr@2: TUint32* iMaxWordPos; williamr@2: TInt iBpp; williamr@2: TInt iPixelShift; williamr@2: TInt iBitShift; williamr@2: TUint32 iMask; williamr@2: TInt iScanlineWordLength; williamr@2: TBool iWritten; williamr@2: }; williamr@2: williamr@2: class TFontInfo; williamr@2: williamr@2: /** williamr@2: Font and bitmap server typeface store. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: class CFbsTypefaceStore : public CTypefaceStore williamr@2: { williamr@2: friend class CWsScreenDevice; williamr@2: public: williamr@2: IMPORT_C static CFbsTypefaceStore* NewL(CGraphicsDevice* aDevice); williamr@2: IMPORT_C ~CFbsTypefaceStore(); williamr@2: IMPORT_C TInt AddFile(const TDesC& aName,TInt& aId); williamr@2: IMPORT_C TInt InstallFile(const TDesC& aName,TInt& aId); williamr@2: IMPORT_C void RemoveFile(TInt aId=0); williamr@2: IMPORT_C virtual TInt GetNearestFontInTwips(CFont*& aFont, const TFontSpec& aFontSpec); williamr@2: IMPORT_C TInt GetNearestFontInPixels(CFont*& aFont, const TFontSpec& aFontSpec); williamr@2: IMPORT_C virtual TInt GetNearestFontToDesignHeightInTwips(CFont*& aFont, const TFontSpec& aFontSpec); williamr@2: IMPORT_C TInt GetNearestFontToDesignHeightInPixels(CFont*& aFont, const TFontSpec& aFontSpec); williamr@2: IMPORT_C virtual TInt GetNearestFontToMaxHeightInTwips(CFont*& aFont, const TFontSpec& aFontSpec, TInt aMaxHeight); williamr@2: IMPORT_C TInt GetNearestFontToMaxHeightInPixels(CFont*& aFont, const TFontSpec& aFontSpec, TInt aMaxHeight); williamr@2: IMPORT_C TInt GetFontById(CFont *&aFont,TUid aUid,const TAlgStyle& aAlgStyle); williamr@2: IMPORT_C virtual TInt NumTypefaces() const; williamr@2: IMPORT_C virtual void TypefaceSupport(TTypefaceSupport& aTypefaceSupport,TInt aTypefaceIndex) const; williamr@2: IMPORT_C virtual TInt FontHeightInTwips(TInt aTypefaceIndex,TInt aHeightIndex) const; williamr@2: IMPORT_C TInt FontHeightInPixels(TInt aTypefaceIndex,TInt aHeightIndex) const; williamr@2: IMPORT_C TGlyphBitmapType DefaultBitmapType() const; williamr@2: IMPORT_C void SetDefaultBitmapType(TGlyphBitmapType aType) const; williamr@2: IMPORT_C void SetFontNameAliasL(const TDesC& aFontAlias,const TDesC& aFontName) const; williamr@2: IMPORT_C void SetDefaultLanguageForMetrics(TLanguage aLanguage) const; williamr@2: IMPORT_C static void RemoveFontFileLocksL(); williamr@2: IMPORT_C static void RemoveFontFileLocksL(const TDesC& aDrive, TBool aAllFonts); williamr@2: IMPORT_C static void RemoveFontFileLocksL(const TDesC& aFileName); williamr@2: IMPORT_C void ReleaseTwipsCache(); williamr@2: IMPORT_C void SetSystemDefaultTypefaceNameL(const TDesC& aFontTypefaceName); williamr@2: IMPORT_C TInt RegisterLinkedTypeface(const CLinkedTypefaceSpecification& aLinkedTypefaceSpec, TInt& aId); williamr@4: IMPORT_C void GetLinkedTypefaceL(CLinkedTypefaceSpecification& aLinkedTypefaceSpec); williamr@4: IMPORT_C TInt RegisterLinkedTypeface(const CLinkedTypefaceSpecification& aLinkedTypefaceSpec); williamr@4: IMPORT_C TInt UpdateLinkedTypeface(const CLinkedTypefaceSpecification& aLinkedTypefaceSpec); williamr@2: private: williamr@2: CFbsTypefaceStore(CGraphicsDevice* aDevice); williamr@2: void ConstructL(); williamr@2: TInt CreateFont(CFont*& aFont,const TFontInfo& aFontInfo); williamr@2: TBool IsFontLoaded(CFont*& aFont, const TFontInfo& aFontInfo) const; williamr@2: TInt FontHeight(TInt aTypefaceIndex,TInt aHeightIndex,TInt aMessage) const; williamr@4: TInt GetNearestFontInTwipsAndCreateFont(CFont*& aFont, TInt aFbsMessage, const TFontSpec& aFontSpec, TInt aMaxHeight = 0); williamr@2: TInt SendGetNearestFontCommandNCreateFont( williamr@4: CFont*& aFont, TInt aFbsMessage, const TFontSpec& aFontSpec, TInt aMaxHeight = 0); williamr@2: void GetPixelSizeInTwips(TSize& aSize) const; williamr@2: williamr@2: private: williamr@2: RFbsSession* iFbs; williamr@2: CGraphicsDevice* iDevice; williamr@2: CFontCache* iTwipsCache; williamr@2: }; williamr@2: williamr@2: class CDitherColor256; williamr@2: williamr@2: /** williamr@2: Copies a bitmap in any display mode of at least 256 colours into a 256 williamr@2: colour bitmap, optionally using a user-defined palette. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: class CFbsColor256BitmapUtil : public CBase williamr@2: { williamr@2: public: williamr@2: /** Indicates whether or not to use dithering. */ williamr@2: enum TDither williamr@2: { williamr@2: /** No dithering. */ williamr@2: ENoDither, williamr@2: /** Use the Floyd-Steinberg dithering algorithm. */ williamr@2: EFloydSteinberg williamr@2: }; williamr@2: public: williamr@2: williamr@2: IMPORT_C static CFbsColor256BitmapUtil* NewL(const CPalette* aPalette); williamr@2: williamr@2: IMPORT_C TInt CopyBitmap(CFbsBitmap* aColor256Destination,CFbsBitmap* aSource,TDither aDither=ENoDither); williamr@2: williamr@2: ~CFbsColor256BitmapUtil(); williamr@2: private: williamr@2: CFbsColor256BitmapUtil(); williamr@2: private: williamr@2: TColor256Util* iColor256Util; williamr@2: CDitherColor256* iDither; williamr@2: }; williamr@2: williamr@2: #endif