epoc32/include/fbs.h
author William Roberts <williamr@symbian.org>
Wed, 31 Mar 2010 12:33:34 +0100
branchSymbian3
changeset 4 837f303aceeb
parent 2 2fe1408b6811
permissions -rw-r--r--
Current Symbian^3 public API header files (from PDK 3.0.h)
This is the epoc32/include tree with the "platform" subtrees removed, and
all but a selected few mbg and rsg files removed.
williamr@2
     1
// Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies).
williamr@2
     2
// All rights reserved.
williamr@2
     3
// This component and the accompanying materials are made available
williamr@4
     4
// under the terms of "Eclipse Public License v1.0"
williamr@2
     5
// which accompanies this distribution, and is available
williamr@4
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
williamr@2
     7
//
williamr@2
     8
// Initial Contributors:
williamr@2
     9
// Nokia Corporation - initial contribution.
williamr@2
    10
//
williamr@2
    11
// Contributors:
williamr@2
    12
//
williamr@2
    13
// Description:
williamr@2
    14
//
williamr@2
    15
williamr@2
    16
#ifndef __FBS_H__
williamr@2
    17
#define __FBS_H__
williamr@2
    18
williamr@4
    19
/**
williamr@4
    20
@file
williamr@4
    21
@publishedAll
williamr@4
    22
@released
williamr@4
    23
 */
williamr@2
    24
#include <e32std.h>
williamr@2
    25
#include <gdi.h>
williamr@2
    26
#include <fntstore.h>
williamr@2
    27
#include <bitmap.h>
williamr@4
    28
#include <graphics/fbsdefs.h>
williamr@4
    29
williamr@4
    30
/**
williamr@4
    31
@publishedAll
williamr@4
    32
@released
williamr@4
    33
 */
williamr@4
    34
const TUid KCFbsFontUid = { 268435518 };
williamr@2
    35
williamr@2
    36
/**
williamr@2
    37
Indicates version of the font and bitmap server without heap locking.
williamr@2
    38
@publishedAll
williamr@2
    39
@released
williamr@2
    40
*/
williamr@2
    41
#define SYMBIAN_FBSERV_V2
williamr@2
    42
williamr@2
    43
/** 
williamr@2
    44
Character width and adjustment information. 
williamr@2
    45
@publishedAll
williamr@2
    46
@released
williamr@2
    47
*/
williamr@2
    48
class SCharWidth
williamr@2
    49
	{
williamr@2
    50
public:
williamr@2
    51
	/** The left adjust of the character. */
williamr@2
    52
	TInt iLeftAdjust;
williamr@2
    53
	/** The right adjust of the character. */
williamr@2
    54
	TInt iRightAdjust;
williamr@2
    55
	/** The total width of the character, defined as iLeftAdjust + iWidth + iRightAdjust. */
williamr@2
    56
	TInt iMove;
williamr@2
    57
	/** The width of the character. */
williamr@2
    58
	TInt iWidth;
williamr@2
    59
	};
williamr@2
    60
williamr@2
    61
class CFbsRalCache;
williamr@2
    62
class CFbsSessionHelper;
williamr@4
    63
class CFbsRasterizer;
williamr@2
    64
williamr@2
    65
/** 
williamr@2
    66
A session with the font and bitmap server. 
williamr@2
    67
@publishedAll 
williamr@2
    68
@released
williamr@2
    69
*/
williamr@2
    70
class RFbsSession : protected RSessionBase
williamr@2
    71
	{
williamr@2
    72
	// Allow access to internals for test
williamr@2
    73
	friend class RClean;
williamr@2
    74
	friend class TestFbs;
williamr@2
    75
	friend class CTBitmap;
williamr@2
    76
	friend class CTClean;
williamr@2
    77
	friend class CTFbs;
williamr@2
    78
	
williamr@2
    79
	friend class CFbsBitmap;
williamr@2
    80
	friend class CFbsBitmapAsyncStreamer;
williamr@2
    81
public:
williamr@2
    82
	IMPORT_C RFbsSession();
williamr@2
    83
	IMPORT_C static TInt Connect();
williamr@2
    84
	IMPORT_C static TInt Connect(RFs& aFileServer);
williamr@2
    85
	IMPORT_C static void Disconnect();
williamr@2
    86
	IMPORT_C static RFbsSession* GetSession();
williamr@2
    87
	IMPORT_C void CallBack();
williamr@2
    88
	IMPORT_C void SetCallBack(TCallBack aCallBack);
williamr@2
    89
	IMPORT_C void ResetCallBack();
williamr@2
    90
	IMPORT_C TInt ResourceCount();
williamr@2
    91
	IMPORT_C TInt SendCommand(TInt aMessage,TInt aInt0=0,TInt aInt1=0,TInt aInt2=0,TInt aInt3=0) const;
williamr@2
    92
	TInt SendCommand(TInt aMessage, const TIpcArgs& aArgs) const;
williamr@2
    93
	void SendCommand(TInt aMessage, const TIpcArgs& aArgs, TRequestStatus &aStatus) const;
williamr@2
    94
	IMPORT_C TVersion Version();
williamr@2
    95
	IMPORT_C TUint8* HeapBase() const;
williamr@2
    96
	IMPORT_C TInt GetHeapSizes(TInt& aDefaultHeap, TInt& aSmallBmpHeap, TInt& aBigBmpChunk);
williamr@2
    97
	TInt SessionHandle() const { return Handle(); }
williamr@2
    98
	TInt AllocScanLineBuffer(TInt aSize);
williamr@2
    99
	HBufC8* GetScanLineBuffer();
williamr@2
   100
	void SetCallBackPtr(TInt* aBitmapHandle)const;
williamr@2
   101
	HBufC8* GetDecompressionBuffer(TInt aSize);
williamr@2
   102
	HBufC8* GetExtraBuffer(TInt aSize);
williamr@4
   103
    TInt ServerSessionHandle() const;
williamr@2
   104
public:
williamr@4
   105
	/** WARNING: For internal use ONLY.  Compatibility is not guaranteed in future releases.	 
williamr@4
   106
	Used for testing server side out of memory failures.	
williamr@4
   107
	@test
williamr@2
   108
	*/
williamr@2
   109
	enum THeapFailType
williamr@2
   110
		{
williamr@2
   111
		EHeapFailTypeServerMemory,
williamr@2
   112
		EHeapFailTypeHeapMemory,
williamr@2
   113
		};
williamr@2
   114
private:
williamr@2
   115
	TBool LookupBitmapInROM(const TDesC& aFilename, TAny*& aAddr);
williamr@2
   116
	RFs& FileServer() { return *((RFs*)iSpare); }
williamr@2
   117
	static TInt DoAlloc(RFbsSession*& aNewSession);
williamr@2
   118
	TInt DoConnect(RFs& aFileServer);
williamr@2
   119
private:
williamr@2
   120
	TInt iConnections;
williamr@2
   121
	mutable TCallBack iCallBack;
williamr@2
   122
	RChunk iSharedChunk;
williamr@2
   123
	CFbsSessionHelper* iHelper;
williamr@2
   124
	RChunk iLargeBitmapChunk;
williamr@2
   125
	RFs iFileServer;
williamr@2
   126
	CFbsRalCache* iRomFileAddrCache;
williamr@2
   127
	HBufC8* iDecompressionBuffer;
williamr@2
   128
	HBufC8* iScanLineBuffer;	
williamr@2
   129
	TUint32* iSpare;
williamr@2
   130
	};
williamr@2
   131
williamr@2
   132
/** 
williamr@2
   133
Font managed by the font and bitmap server.
williamr@2
   134
CFbsFont objects are used for screen and off-screen bitmap fonts. They are 
williamr@2
   135
usually obtained by calls to the CBitmapDevice::GetNearestFontInPixels() and 
williamr@2
   136
MGraphicsDeviceMap::GetNearestFontInTwips() functions.
williamr@2
   137
The class implements a number of functions inherited from CFont.
williamr@2
   138
@see CBitmapDevice::GetNearestFontInPixels()
williamr@2
   139
@see MGraphicsDeviceMap::GetNearestFontInTwips() 
williamr@2
   140
@publishedAll 
williamr@2
   141
@released
williamr@2
   142
*/
williamr@2
   143
class CFbsFont: public CFont
williamr@2
   144
	{
williamr@2
   145
	friend class CFbsTypefaceStore;
williamr@2
   146
williamr@2
   147
private:
williamr@2
   148
	// From CFont
williamr@2
   149
	/** Gets the font's UID. 
williamr@2
   150
	All CFbsFont objects have the constant UID KCFbsFontUid. It is safe to cast 
williamr@2
   151
	from CFont* to CFbsFont* if CFont::TypeUid() returns KCFbsFontUid.
williamr@2
   152
	@return The font's UID. This should be KCFbsFontUid. 
williamr@2
   153
	@see CFont::TypeUid() */
williamr@2
   154
	virtual TUid DoTypeUid() const { return KCFbsFontUid; }
williamr@2
   155
	IMPORT_C virtual TInt DoHeightInPixels() const;
williamr@2
   156
	IMPORT_C virtual TInt DoAscentInPixels() const;
williamr@2
   157
	IMPORT_C virtual TInt DoCharWidthInPixels(TChar aChar) const;
williamr@2
   158
	IMPORT_C virtual TInt DoTextWidthInPixels(const TDesC& aText) const;
williamr@2
   159
	IMPORT_C virtual TInt DoBaselineOffsetInPixels() const;
williamr@2
   160
	IMPORT_C virtual TInt DoTextCount(const TDesC& aText,TInt aWidthInPixels) const;
williamr@2
   161
	IMPORT_C virtual TInt DoTextCount(const TDesC& aText,TInt aWidthInPixels,TInt& aExcessWidthInPixels) const;
williamr@2
   162
	IMPORT_C virtual TInt DoMaxCharWidthInPixels() const;
williamr@2
   163
	IMPORT_C virtual TInt DoMaxNormalCharWidthInPixels() const;
williamr@2
   164
	IMPORT_C virtual TFontSpec DoFontSpecInTwips() const;
williamr@2
   165
	IMPORT_C virtual CFont::TCharacterDataAvailability DoGetCharacterData(TUint aCode, TOpenFontCharMetrics& aMetrics,
williamr@2
   166
		const TUint8*& aBitmap, TSize& aBitmapSize) const;
williamr@2
   167
	IMPORT_C virtual TInt DoExtendedFunction(TUid aFunctionId, TAny* aParam = NULL) const;
williamr@2
   168
williamr@2
   169
public:
williamr@2
   170
	// New functions
williamr@2
   171
	IMPORT_C TBool GetFontMetrics(TOpenFontMetrics& aMetrics) const;
williamr@2
   172
	IMPORT_C TInt TextWidthInPixels(const TDesC& aText) const;
williamr@2
   173
	IMPORT_C void TextWidthInPixels(const TDesC& aText,SCharWidth& aCharWidth) const;
williamr@2
   174
	IMPORT_C TInt Handle() const;
williamr@2
   175
	IMPORT_C TCharacterMetrics CharacterMetrics(TInt aCode,const TUint8*& aBytes) const;
williamr@2
   176
	IMPORT_C TInt RawTextWidthInPixels(const TDesC& aText) const;
williamr@2
   177
	IMPORT_C TBool GetFaceAttrib(TOpenFontFaceAttrib& aAttrib) const;
williamr@2
   178
	IMPORT_C TBool IsOpenFont() const;
williamr@2
   179
	IMPORT_C TBool HasCharacter(TInt aCode) const;
williamr@4
   180
	IMPORT_C TInt TextWidthInPixels(const TDesC& aText,const TMeasureTextInput* aParam) const;
williamr@4
   181
	IMPORT_C void TextWidthInPixels(const TDesC& aText,const TMeasureTextInput* aParam,SCharWidth& aCharWidth) const;
williamr@4
   182
williamr@2
   183
williamr@2
   184
protected:
williamr@2
   185
	IMPORT_C CFbsFont();
williamr@2
   186
	IMPORT_C ~CFbsFont();
williamr@2
   187
	IMPORT_C CFbsFont(const CFbsFont& aFont);
williamr@2
   188
	IMPORT_C CBitmapFont* Address() const;
williamr@2
   189
	IMPORT_C TInt Duplicate(TInt aHandle);
williamr@2
   190
	IMPORT_C void Reset();
williamr@2
   191
	
williamr@2
   192
private:
williamr@2
   193
	TInt DoFontGetShaping(TFontShapeFunctionParameters* aParam) const;
williamr@2
   194
	TInt DoFontDeleteShaping(TFontShapeDeleteFunctionParameters* aParam) const;
williamr@4
   195
	TInt DoTextWidthInPixels(const TDesC& aText,const TMeasureTextInput* aParam) const;
williamr@2
   196
williamr@2
   197
protected:
williamr@2
   198
	RFbsSession* iFbs;
williamr@2
   199
	CBitmapFont* iAddressPointer;
williamr@2
   200
	TInt iHandle;
williamr@2
   201
	TInt iServerHandle;
williamr@2
   202
	};
williamr@2
   203
williamr@4
   204
/**
williamr@4
   205
An interface for initialization of extended bitmaps. By implementing this interface, 
williamr@4
   206
creators of extended bitmaps can set the contents of an extended bitmap without 
williamr@4
   207
allocating a temporary buffer and avoid unnecessary memory copying during calls to 
williamr@4
   208
CFbsBitmap::CreateExtendedBitmap().
williamr@4
   209
williamr@4
   210
WARNING: Class for internal and partner use ONLY.  Compatibility is not guaranteed in future releases.
williamr@4
   211
williamr@4
   212
@publishedAll
williamr@4
   213
@see CFbsBitmap::CreateExtendedBitmap()
williamr@4
   214
*/
williamr@4
   215
class MFbsExtendedBitmapInitializer
williamr@4
   216
	{
williamr@4
   217
public:
williamr@4
   218
	/**
williamr@4
   219
	Initializes the raw data of an extended bitmap.
williamr@4
   220
	@param aData A pointer to the raw data to be initialized.
williamr@4
   221
	@param aDataSize The size in bytes of the raw data to be initialized.
williamr@4
   222
	@return KErrNone if successful, otherwise another of the system-wide error codes.
williamr@4
   223
	*/
williamr@4
   224
	virtual TInt InitExtendedBitmap(TAny* aData, TInt aDataSize) = 0;
williamr@4
   225
	};
williamr@4
   226
williamr@2
   227
class CDirectFileStore;
williamr@2
   228
williamr@2
   229
/** 
williamr@2
   230
Note that this class is not intended for user derivation.
williamr@2
   231
A bitmap managed by the font and bitmap server.
williamr@2
   232
The class also defines some palette functionality which is not yet 
williamr@2
   233
implemented, since none of the modes currently supported by screen 
williamr@2
   234
or bitmaps require variable palettes.
williamr@2
   235
Note that the CFbsBitmap format is internal to Symbian, but the 
williamr@2
   236
Image Converter API can be used to convert such bitmaps to standard formats. 
williamr@2
   237
CFbsBitmap instances cannot be shared between different threads. They use some shared
williamr@2
   238
thread local storage data. If you want to share a bitmap between threads, use Duplicate().
williamr@2
   239
@publishedAll 
williamr@2
   240
@released
williamr@2
   241
@see CFbsBitmap::Duplicate()
williamr@2
   242
*/
williamr@2
   243
class CFbsBitmap : public CBase
williamr@2
   244
	{
williamr@2
   245
	friend class TBitmapUtil;
williamr@2
   246
	friend class CBitwiseBitmap;
williamr@2
   247
	friend class CFbsBitmapAsyncStreamer;
williamr@2
   248
	friend class CFbsSessionHelper;
williamr@2
   249
public:
williamr@2
   250
	IMPORT_C CFbsBitmap();
williamr@2
   251
	IMPORT_C ~CFbsBitmap();
williamr@2
   252
	IMPORT_C void Reset();
williamr@2
   253
	IMPORT_C static TInt ScanLineLength(TInt aLength,TDisplayMode aDispMode);
williamr@2
   254
	IMPORT_C TDisplayMode DisplayMode() const;
williamr@2
   255
	IMPORT_C TDisplayMode InitialDisplayMode() const;
williamr@2
   256
	IMPORT_C TInt SetDisplayMode(TDisplayMode aDisplayMode);
williamr@2
   257
	IMPORT_C TInt Create(const TSize& aSizeInPixels,TDisplayMode aDispMode);
williamr@2
   258
	IMPORT_C TInt Duplicate(TInt aHandle);
williamr@2
   259
	IMPORT_C TBool IsRomBitmap() const;
williamr@2
   260
	IMPORT_C void SetRomBitmapL(CBitwiseBitmap* aRomBitmapPointer,TInt& aBitmapSizeInBytes);
williamr@2
   261
	IMPORT_C TInt Load(const TDesC& aFileName,TInt32 aId=0,TBool aShareIfLoaded=ETrue);
williamr@2
   262
	IMPORT_C TInt Load(const TDesC& aFileName,TInt32 aId,TBool aShareIfLoaded,TUint aFileOffset);
williamr@2
   263
	IMPORT_C TInt LoadAndCompress(const TDesC& aFileName,TInt32 aId=0,TBool aShareIfLoaded=ETrue);
williamr@2
   264
	IMPORT_C TInt LoadAndCompress(const TDesC& aFileName,TInt32 aId,TBool aShareIfLoaded,TUint aFileOffset);
williamr@2
   265
	IMPORT_C TInt Load(RFile& aFile,TInt32 aId=0,TBool aShareIfLoaded=ETrue);
williamr@2
   266
	IMPORT_C TInt Load(RFile& aFile,TInt32 aId,TBool aShareIfLoaded,TUint aFileOffset);		
williamr@2
   267
	IMPORT_C TInt LoadAndCompress(RFile& aFile,TInt32 aId=0,TBool aShareIfLoaded=ETrue);	
williamr@2
   268
	IMPORT_C TInt LoadAndCompress(RFile& aFile,TInt32 aId,TBool aShareIfLoaded,TUint aFileOffset);	
williamr@2
   269
	IMPORT_C TInt Save(const TDesC& aFilename);
williamr@2
   270
	IMPORT_C TInt Save(RFile& aFile);
williamr@2
   271
	IMPORT_C static void StoreL(const TDesC& aFilename,TInt aNumSources,const TDesC* aSources[],TInt32 aSourceIds[]);
williamr@2
   272
	IMPORT_C static void StoreL(RFile& aFile,TInt aNumSources,const TDesC* aSources[],TInt32 aSourceIds[]);
williamr@2
   273
    IMPORT_C void GetScanLine(TDes8& aBuf,const TPoint& aPixel,TInt aLength,TDisplayMode aDispMode) const;
williamr@2
   274
    IMPORT_C void SetScanLine(TDes8& aBuf,TInt aY) const;
williamr@2
   275
	IMPORT_C void GetVerticalScanLine(TDes8& aBuf,TInt aX,TDisplayMode aDispMode) const;
williamr@2
   276
	IMPORT_C void GetVerticalScanLine(TDes8& aBuf,TInt aX,const TPoint& aDitherOffset,TDisplayMode aDispMode) const;
williamr@2
   277
	IMPORT_C TInt Handle() const;
williamr@2
   278
	IMPORT_C SEpocBitmapHeader Header() const;
williamr@2
   279
	IMPORT_C TInt HorizontalPixelsToTwips(TInt aPixels) const;
williamr@2
   280
	IMPORT_C TInt HorizontalTwipsToPixels(TInt aTwips) const;
williamr@2
   281
	IMPORT_C void GetPixel(TRgb& aColor,const TPoint& aPixel) const;
williamr@2
   282
	IMPORT_C TInt Resize(const TSize& aSizeInPixels);
williamr@2
   283
	IMPORT_C TSize SizeInPixels() const;
williamr@2
   284
	IMPORT_C TSize SizeInTwips() const;
williamr@2
   285
	IMPORT_C void SetSizeInTwips(const MGraphicsDeviceMap* aMap);
williamr@2
   286
	IMPORT_C void SetSizeInTwips(const TSize& aSizeInTwips);
williamr@2
   287
	IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
williamr@2
   288
	IMPORT_C void ExternalizeRectangleL(RWriteStream& aStream,const TRect& aRect) const;
williamr@2
   289
	IMPORT_C void InternalizeL(RReadStream& aStream);
williamr@2
   290
	IMPORT_C TInt Compress();
williamr@2
   291
	IMPORT_C TInt Compress(TBitmapfileCompressionScheme aScheme);
williamr@2
   292
	IMPORT_C void CompressInBackground(TRequestStatus& aRequestStatus);
williamr@2
   293
	IMPORT_C TInt CompressInBackground();
williamr@2
   294
	IMPORT_C void CompressInBackground(TRequestStatus& aRequestStatus, TBitmapfileCompressionScheme aScheme);
williamr@2
   295
	IMPORT_C TInt CompressInBackground(TBitmapfileCompressionScheme aScheme);
williamr@2
   296
	IMPORT_C TInt VerticalPixelsToTwips(TInt aPixels) const;
williamr@2
   297
	IMPORT_C TInt VerticalTwipsToPixels(TInt aTwips) const;
williamr@2
   298
	IMPORT_C static TBool IsFileInRom(const TDesC& aFilename,TUint32*& aWord);
williamr@2
   299
	IMPORT_C static TBool IsFileInRom(RFile& aFile,TUint32*& aWord);
williamr@2
   300
	IMPORT_C TBool IsMonochrome() const;
williamr@2
   301
	IMPORT_C TBool IsLargeBitmap() const;
williamr@2
   302
	IMPORT_C void PaletteAttributes(TBool& aModifiable,TInt& aNumEntries) const;
williamr@2
   303
	IMPORT_C void SetPalette(CPalette* aPalette);
williamr@2
   304
	IMPORT_C TInt GetPalette(CPalette*& aPalette) const;
williamr@2
   305
	IMPORT_C TUint32* DataAddress() const;
williamr@2
   306
	IMPORT_C TInt DataStride() const;
williamr@2
   307
	IMPORT_C TInt CreateHardwareBitmap(const TSize& aSizeInPixels,TDisplayMode aDispMode,TUid aCreatorUid);
williamr@2
   308
	IMPORT_C TInt HardwareBitmapHandle() const;
williamr@2
   309
	IMPORT_C void BeginDataAccess() const;
williamr@2
   310
	IMPORT_C void EndDataAccess(TBool aReadOnly=EFalse) const;
williamr@2
   311
	IMPORT_C void LockHeap(TBool aAlways=EFalse) const;
williamr@2
   312
	IMPORT_C void UnlockHeap(TBool aAlways=EFalse) const;
williamr@2
   313
	IMPORT_C void LockHeapLC(TBool aAlways=EFalse) const;
williamr@2
   314
	IMPORT_C static void UnlockHeap(TAny* aFbsBitmap);
williamr@4
   315
	IMPORT_C TBool IsVolatile() const;
williamr@4
   316
	IMPORT_C TInt TouchCount() const;
williamr@4
   317
	IMPORT_C TInt64 SerialNumber() const;
williamr@2
   318
	IMPORT_C TBool IsCompressedInRAM() const;
williamr@2
   319
	IMPORT_C TInt SwapWidthAndHeight();
williamr@4
   320
	IMPORT_C TInt CreateExtendedBitmap(const TSize& aSizeInPixels, TDisplayMode aDispMode, TUid aType, const TAny* aData, TInt aDataSize);
williamr@4
   321
	IMPORT_C TInt CreateExtendedBitmap(const TSize& aSizeInPixels, TDisplayMode aDispMode, TUid aType, TInt aDataSize, MFbsExtendedBitmapInitializer& aInitializer);
williamr@4
   322
	IMPORT_C TUid ExtendedBitmapType() const;
williamr@4
   323
	IMPORT_C TInt DataSize() const;
williamr@2
   324
	IMPORT_C static HBufC8* GetDecompressionBuffer(TInt aSize);
williamr@4
   325
	IMPORT_C static CFbsRasterizer* Rasterizer();
williamr@2
   326
	IMPORT_C TInt GetAllBitmapHandles(RArray<TInt>& aBitmapIdArray) const;
williamr@2
   327
	IMPORT_C static HBufC8* GetExtraBuffer(TInt aSize);
williamr@2
   328
protected:
williamr@2
   329
    IMPORT_C void GetScanLine(TDes8& aBuf,const TPoint& aPixel,TInt aLength,const TPoint& aDitherOffset,TDisplayMode aDispMode) const;
williamr@2
   330
	CBitwiseBitmap* Address() const;
williamr@2
   331
	IMPORT_C CBitwiseBitmap* CleanAddress() const;
williamr@4
   332
	inline CBitwiseBitmap* BeginDataAccessAndGetCleanAddress(TUint32*& aDataAddress) const;
williamr@2
   333
	void DoSaveL(RFile& aFile);
williamr@4
   334
	TInt DoCreate(const TSize& aSizeInPixels, TDisplayMode aDispMode, TUid aUid, TInt aDataSize = 0);
williamr@2
   335
private:
williamr@2
   336
	TInt DoLoad(RFile& aFile,TInt32 aId,TBool aShareIfLoaded,TUint aFileOffset);
williamr@2
   337
	TInt DoLoad(const TDesC& aFileName,TInt32 aId,TBool aShareIfLoaded,TUint aFileOffset);
williamr@2
   338
	TInt DoLoadFromRom(TUint32* aRomPointer, TInt32 aId, TUint aFileOffset, TBool& aRomPointerValid);
williamr@2
   339
	TBool LoadShiftedRomBmpL(const TDesC& aFileName,TInt32 aId,TUint aFileOffset);
williamr@2
   340
	static void DoStoreL(CDirectFileStore* aFileStore,CFbsBitmap* aBitmap,TInt aNumSources,const TDesC* aSources[],TInt32 aSourceIds[]);
williamr@2
   341
protected:
williamr@4
   342
	/** WARNING: For internal use ONLY.  Compatibility is not guaranteed in future releases.
williamr@4
   343
	 */
williamr@2
   344
	enum // Flags
williamr@2
   345
		{
williamr@4
   346
		EIsRomBitmap = 0x0001,
williamr@4
   347
		EIsExtendedBitmap = 0x0002,
williamr@4
   348
		EIsReadOnlyBitmapMask = EIsRomBitmap | EIsExtendedBitmap
williamr@2
   349
		};
williamr@4
   350
protected:		
williamr@4
   351
	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
   352
	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
   353
	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
   354
	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
   355
	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
   356
	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
   357
	};
williamr@2
   358
williamr@2
   359
williamr@2
   360
/** 
williamr@2
   361
Provides fast read/write access to the pixel data of a bitmap. 
williamr@2
   362
williamr@2
   363
Functionality includes getting and setting the individual pixels of a bitmap. 
williamr@2
   364
Common to this is the concept of the current pixel position. This is held 
williamr@2
   365
as member data and is changed by using various efficient functions. For example, 
williamr@2
   366
incrementing the position's x- or y co-ordinate is much quicker than setting 
williamr@2
   367
a completely new position. This efficiency issue is important as these functions 
williamr@2
   368
are used as part of the frequently used blitting DDA used for creating 
williamr@2
   369
stretched or compressed versions of bitmaps.
williamr@2
   370
williamr@2
   371
Calls to Begin() and End() must surround any calls to the other member functions.
williamr@2
   372
Note that you should always ensure each Begin() is matched by an End() call 
williamr@2
   373
when using this class.
williamr@2
   374
williamr@2
   375
Note also that all display modes including EColor16M are supported, but the 
williamr@2
   376
TDisplayMode values ERgb and ENone are not considered to be display modes. 
williamr@2
   377
@publishedAll 
williamr@2
   378
@released
williamr@2
   379
*/
williamr@2
   380
class TBitmapUtil
williamr@2
   381
	{
williamr@2
   382
public:
williamr@2
   383
	IMPORT_C void Begin(const TPoint& aPosition);
williamr@2
   384
	IMPORT_C void Begin(const TPoint& aPosition,const TBitmapUtil& aUtil);
williamr@2
   385
	IMPORT_C void End();
williamr@2
   386
	IMPORT_C TBitmapUtil(CFbsBitmap* aBitmap);
williamr@2
   387
	IMPORT_C TUint32 GetPixel() const;
williamr@2
   388
	IMPORT_C void SetPixel(TUint32 aValue);
williamr@2
   389
	IMPORT_C void SetPixel(const TBitmapUtil& aSource);
williamr@2
   390
	IMPORT_C void SetPos(const TPoint& aPosition);
williamr@2
   391
	IMPORT_C void DecXPos();
williamr@2
   392
	IMPORT_C void DecYPos();
williamr@2
   393
	IMPORT_C void IncXPos();
williamr@2
   394
	IMPORT_C void IncYPos();
williamr@2
   395
private:
williamr@2
   396
	CFbsBitmap* iFbsBitmap;
williamr@2
   397
	TUint32* iWordPos;
williamr@2
   398
	TUint32* iMinWordPos;
williamr@2
   399
	TUint32* iMaxWordPos;
williamr@2
   400
	TInt iBpp;
williamr@2
   401
	TInt iPixelShift;
williamr@2
   402
	TInt iBitShift;
williamr@2
   403
	TUint32 iMask;
williamr@2
   404
	TInt iScanlineWordLength;
williamr@2
   405
	TBool iWritten;
williamr@2
   406
	};
williamr@2
   407
williamr@2
   408
class TFontInfo;
williamr@2
   409
williamr@2
   410
/** 
williamr@2
   411
Font and bitmap server typeface store. 
williamr@2
   412
@publishedAll 
williamr@2
   413
@released
williamr@2
   414
*/
williamr@2
   415
class CFbsTypefaceStore : public CTypefaceStore
williamr@2
   416
	{
williamr@2
   417
	friend class CWsScreenDevice;
williamr@2
   418
public:
williamr@2
   419
	IMPORT_C static CFbsTypefaceStore* NewL(CGraphicsDevice* aDevice);
williamr@2
   420
	IMPORT_C ~CFbsTypefaceStore();
williamr@2
   421
	IMPORT_C TInt AddFile(const TDesC& aName,TInt& aId);
williamr@2
   422
	IMPORT_C TInt InstallFile(const TDesC& aName,TInt& aId);
williamr@2
   423
	IMPORT_C void RemoveFile(TInt aId=0);
williamr@2
   424
	IMPORT_C virtual TInt GetNearestFontInTwips(CFont*& aFont, const TFontSpec& aFontSpec);
williamr@2
   425
	IMPORT_C TInt GetNearestFontInPixels(CFont*& aFont, const TFontSpec& aFontSpec);
williamr@2
   426
	IMPORT_C virtual TInt GetNearestFontToDesignHeightInTwips(CFont*& aFont, const TFontSpec& aFontSpec);
williamr@2
   427
	IMPORT_C TInt GetNearestFontToDesignHeightInPixels(CFont*& aFont, const TFontSpec& aFontSpec);
williamr@2
   428
	IMPORT_C virtual TInt GetNearestFontToMaxHeightInTwips(CFont*& aFont, const TFontSpec& aFontSpec, TInt aMaxHeight);
williamr@2
   429
	IMPORT_C TInt GetNearestFontToMaxHeightInPixels(CFont*& aFont, const TFontSpec& aFontSpec, TInt aMaxHeight);
williamr@2
   430
	IMPORT_C TInt GetFontById(CFont *&aFont,TUid aUid,const TAlgStyle& aAlgStyle);
williamr@2
   431
	IMPORT_C virtual TInt NumTypefaces() const;
williamr@2
   432
	IMPORT_C virtual void TypefaceSupport(TTypefaceSupport& aTypefaceSupport,TInt aTypefaceIndex) const;
williamr@2
   433
	IMPORT_C virtual TInt FontHeightInTwips(TInt aTypefaceIndex,TInt aHeightIndex) const;
williamr@2
   434
	IMPORT_C TInt FontHeightInPixels(TInt aTypefaceIndex,TInt aHeightIndex) const;
williamr@2
   435
	IMPORT_C TGlyphBitmapType DefaultBitmapType() const;
williamr@2
   436
	IMPORT_C void SetDefaultBitmapType(TGlyphBitmapType aType) const;
williamr@2
   437
	IMPORT_C void SetFontNameAliasL(const TDesC& aFontAlias,const TDesC& aFontName) const;
williamr@2
   438
	IMPORT_C void SetDefaultLanguageForMetrics(TLanguage aLanguage) const;
williamr@2
   439
	IMPORT_C static void RemoveFontFileLocksL();
williamr@2
   440
	IMPORT_C static void RemoveFontFileLocksL(const TDesC& aDrive, TBool aAllFonts);
williamr@2
   441
	IMPORT_C static void RemoveFontFileLocksL(const TDesC& aFileName);
williamr@2
   442
	IMPORT_C void ReleaseTwipsCache();
williamr@2
   443
	IMPORT_C void SetSystemDefaultTypefaceNameL(const TDesC& aFontTypefaceName);
williamr@2
   444
	IMPORT_C TInt RegisterLinkedTypeface(const CLinkedTypefaceSpecification& aLinkedTypefaceSpec, TInt& aId);
williamr@4
   445
	IMPORT_C void GetLinkedTypefaceL(CLinkedTypefaceSpecification& aLinkedTypefaceSpec);
williamr@4
   446
	IMPORT_C TInt RegisterLinkedTypeface(const CLinkedTypefaceSpecification& aLinkedTypefaceSpec);
williamr@4
   447
	IMPORT_C TInt UpdateLinkedTypeface(const CLinkedTypefaceSpecification& aLinkedTypefaceSpec);
williamr@2
   448
private:
williamr@2
   449
	CFbsTypefaceStore(CGraphicsDevice* aDevice);
williamr@2
   450
	void ConstructL();
williamr@2
   451
	TInt CreateFont(CFont*& aFont,const TFontInfo& aFontInfo);
williamr@2
   452
	TBool IsFontLoaded(CFont*& aFont, const TFontInfo& aFontInfo) const;
williamr@2
   453
	TInt FontHeight(TInt aTypefaceIndex,TInt aHeightIndex,TInt aMessage) const;
williamr@4
   454
	TInt GetNearestFontInTwipsAndCreateFont(CFont*& aFont, TInt aFbsMessage, const TFontSpec& aFontSpec, TInt aMaxHeight = 0);
williamr@2
   455
	TInt SendGetNearestFontCommandNCreateFont(
williamr@4
   456
		CFont*& aFont, TInt aFbsMessage, const TFontSpec& aFontSpec, TInt aMaxHeight = 0);
williamr@2
   457
	void GetPixelSizeInTwips(TSize& aSize) const;
williamr@2
   458
williamr@2
   459
private:
williamr@2
   460
	RFbsSession* iFbs;
williamr@2
   461
	CGraphicsDevice* iDevice;
williamr@2
   462
	CFontCache* iTwipsCache;
williamr@2
   463
	};
williamr@2
   464
williamr@2
   465
class CDitherColor256;
williamr@2
   466
williamr@2
   467
/** 
williamr@2
   468
Copies a bitmap in any display mode of at least 256 colours into a 256 
williamr@2
   469
colour bitmap, optionally using a user-defined palette. 
williamr@2
   470
@publishedAll 
williamr@2
   471
@released
williamr@2
   472
*/
williamr@2
   473
class CFbsColor256BitmapUtil : public CBase
williamr@2
   474
	{
williamr@2
   475
public:
williamr@2
   476
	/** Indicates whether or not to use dithering. */
williamr@2
   477
	enum TDither
williamr@2
   478
		{
williamr@2
   479
		/** No dithering. */
williamr@2
   480
		ENoDither,
williamr@2
   481
		/** Use the Floyd-Steinberg dithering algorithm. */
williamr@2
   482
		EFloydSteinberg
williamr@2
   483
		};
williamr@2
   484
public:
williamr@2
   485
williamr@2
   486
	IMPORT_C static CFbsColor256BitmapUtil* NewL(const CPalette* aPalette);
williamr@2
   487
williamr@2
   488
	IMPORT_C TInt CopyBitmap(CFbsBitmap* aColor256Destination,CFbsBitmap* aSource,TDither aDither=ENoDither);
williamr@2
   489
williamr@2
   490
	~CFbsColor256BitmapUtil();
williamr@2
   491
private:
williamr@2
   492
	CFbsColor256BitmapUtil();
williamr@2
   493
private:
williamr@2
   494
	TColor256Util* iColor256Util;
williamr@2
   495
	CDitherColor256* iDither;
williamr@2
   496
	};
williamr@2
   497
williamr@2
   498
#endif