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: #if !defined(__BITMAP_H__) williamr@2: #define __BITMAP_H__ williamr@2: #if !defined(__E32STD_H__) williamr@2: #include williamr@2: #endif williamr@2: #if !defined(__F32FILE_H__) williamr@2: #include williamr@2: #endif williamr@2: #if !defined(__GDI_H__) williamr@2: #include williamr@2: #endif williamr@2: williamr@4: #ifndef SYMBIAN_ENABLE_SPLIT_HEADERS williamr@4: #include williamr@4: #endif williamr@4: williamr@2: #ifdef _DEBUG williamr@2: #define SYMBIAN_DEBUG_FBS_LOCKHEAP williamr@2: #endif williamr@2: williamr@2: //Forward declarations williamr@2: class CChunkPile; williamr@2: class TCompressionBookMark; williamr@4: class CFbsRasterizer; williamr@2: williamr@2: /** williamr@2: Defines the types of file compression. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: enum TBitmapfileCompression williamr@2: { williamr@2: /** Bitmap file is not compressed. */ williamr@2: ENoBitmapCompression, williamr@2: /** File is compressed using run-length encoding compression. */ williamr@2: EByteRLECompression, williamr@2: /** File is compressed using twelve bit run-length encoding compression. */ williamr@2: ETwelveBitRLECompression, williamr@2: /** File is compressed using sixteen bit run-length encoding compression. */ williamr@2: ESixteenBitRLECompression, williamr@2: /** File is compressed using twenty four bit run-length encoding compression. */ williamr@2: ETwentyFourBitRLECompression, williamr@2: /** File is compressed using twenty four bit run-length encoding compression from 32-bit bitmap buffer. */ williamr@2: EThirtyTwoUBitRLECompression, williamr@2: /** File is compressed using thirty two bit run-length encoding compression from 32-bit bitmap buffer. */ williamr@2: EThirtyTwoABitRLECompression, williamr@2: /** File is compressed as a palette plus reduced bit-per-pixel. Only applicable to bitmaps already loaded in RAM. */ williamr@2: EGenericPaletteCompression, williamr@4: /** Extended bitmap. Data format is proprietary to licensee. */ williamr@4: EProprietaryCompression, williamr@2: //Insert new enum items here! williamr@2: ERLECompressionLast = 255 williamr@2: }; williamr@2: williamr@2: /** williamr@2: Defines the available file compression schemes. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: enum TBitmapfileCompressionScheme williamr@2: { williamr@2: /** File is compressed using run-length encoding compression. */ williamr@2: ERLECompression, williamr@2: /** File is compressed as a palette plus reduced bit-per-pixel. */ williamr@2: EPaletteCompression, williamr@2: /** File is compressed as a palette plus reduced bit-per-pixel, with automatic fallback to RLE if bitmap is not suitable*/ williamr@2: EPaletteCompressionWithRLEFallback williamr@2: }; williamr@2: williamr@2: /** williamr@4: WARNING: Typedef for internal use ONLY. Compatibility is not guaranteed in future releases. williamr@4: @publishedAll williamr@4: @released williamr@4: */ williamr@2: typedef void (*TAssignFunction)(TUint8*& aDestPtr, TUint32 aColor); williamr@2: /** williamr@4: WARNING: Typedef for internal use ONLY. Compatibility is not guaranteed in future releases. williamr@4: @publishedAll williamr@4: @released williamr@4: */ williamr@2: typedef void (*TDecodeFunction)(TUint8* aDataPtr, TUint32* aPalettePtr, TUint8*& aDestPtr, TAssignFunction aAssignFunction); williamr@2: williamr@2: /** williamr@2: Contains information about the bitmap when streaming bitmaps to stores. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: class SEpocBitmapHeader williamr@2: { williamr@2: public: williamr@2: inline SEpocBitmapHeader() : williamr@2: iBitmapSize(sizeof(SEpocBitmapHeader)), williamr@2: iStructSize(sizeof(SEpocBitmapHeader)), williamr@2: iSizeInPixels(0, 0), williamr@2: iSizeInTwips(0, 0), williamr@2: iBitsPerPixel(0), williamr@2: iColor(0), williamr@2: iPaletteEntries(0), williamr@2: iCompression(ENoBitmapCompression) williamr@2: { williamr@2: } williamr@2: public: williamr@2: /** Defines whether bitmap is colour and if it comprises an alpha channel. */ williamr@2: enum TColor williamr@2: { williamr@2: /** Bitmap doesn't comprise color */ williamr@2: ENoColor=0, williamr@2: /** Bitmap comprises color */ williamr@2: EColor=1, williamr@2: /** Bitmap comprises color with alpha channel */ williamr@2: EColorAlpha=2, williamr@2: /** Bitmap comprises pre-multiplied colors with alpha channel */ williamr@2: EColorAlphaPM=3, williamr@2: /** Unknown format */ williamr@2: EColorUndefined=8 williamr@2: }; williamr@2: public: williamr@2: /** The size of the bitmap data, in bytes. */ williamr@2: TInt iBitmapSize; williamr@2: /** The size of the structure in which the bitmap data is stored. */ williamr@2: TInt iStructSize; williamr@2: /** The size of the bitmap, in pixels. */ williamr@2: TSize iSizeInPixels; williamr@2: /** The size of the bitmap, in twips. */ williamr@2: TSize iSizeInTwips; williamr@2: /** The bitmap's number of bits per pixel */ williamr@2: TInt iBitsPerPixel; williamr@2: /** Whether or not the bitmap is colour and comprises an alpha value. */ williamr@2: TInt iColor; williamr@2: /** The number of entries in the bitmap's palette. */ williamr@2: TInt iPaletteEntries; williamr@2: /** The type of compression used to store the bitmap. */ williamr@2: TBitmapfileCompression iCompression; williamr@2: }; williamr@2: williamr@4: /** williamr@4: WARNING: Class for internal use ONLY. Compatibility is not guaranteed in future releases. williamr@4: williamr@4: @publishedAll williamr@4: @released williamr@4: */ williamr@2: class TLineScanningPosition williamr@2: { williamr@2: public: williamr@4: inline TLineScanningPosition(TUint32* aSrcDataPtr); williamr@2: public: williamr@2: TUint8* iSrcDataPtr; williamr@2: TInt iCursorPos; williamr@2: HBufC8* iScanLineBuffer; williamr@4: CFbsRasterizer* const iRasterizer; williamr@2: }; williamr@2: williamr@2: class CShiftedFileStore; williamr@4: williamr@2: /** williamr@2: BitGdi bitmap class (pseudo-CXxx class). williamr@4: WARNING: Class for internal use ONLY. Compatibility is not guaranteed in future releases. williamr@2: @released williamr@2: */ williamr@2: class CBitwiseBitmap williamr@2: { williamr@2: friend class CFbTop; williamr@2: friend class CFbClient; williamr@2: friend class CFbsBitmap; williamr@2: friend class CBitmapObject; williamr@2: friend class CFbsBitmapAsyncStreamer; williamr@2: friend class CFbsBackgroundCompression; williamr@2: friend class CleanupDelete; williamr@2: public: williamr@2: IMPORT_C TUid Uid() const; williamr@2: IMPORT_C void ExternalizeL(RWriteStream& aStream,const CFbsBitmap& aHandleBitmap) const; williamr@2: IMPORT_C void ExternalizeRectangleL(RWriteStream& aStream,const TRect& aRect,const CFbsBitmap& aHandleBitmap) const; williamr@2: IMPORT_C void InternalizeL(RReadStream& aStream); williamr@2: IMPORT_C static void InternalizeHeaderL(RReadStream& aStream,SEpocBitmapHeader& aHeader); williamr@2: IMPORT_C TSize SizeInPixels() const; williamr@2: IMPORT_C TSize SizeInTwips() const; williamr@2: IMPORT_C TDisplayMode DisplayMode() const; williamr@2: IMPORT_C TInt HorizontalTwipsToPixels(TInt aTwips) const; williamr@2: IMPORT_C TInt VerticalTwipsToPixels(TInt aTwips) const; williamr@2: IMPORT_C TInt HorizontalPixelsToTwips(TInt aPixels) const; williamr@2: IMPORT_C TInt VerticalPixelsToTwips(TInt aPixels) const; williamr@4: IMPORT_C void GetPixel(TRgb& aColor,const TPoint& aPos,TUint32* aBase, CFbsRasterizer* aRasterizer) const; williamr@2: IMPORT_C TInt GetScanLinePtr(TUint32*& aSlptr, TPoint& aPixel,TInt aLength, TUint32* aBase, TLineScanningPosition& aLineScanningPosition) const; williamr@2: IMPORT_C TInt GetScanLinePtr(TUint32*& aSlptr, TInt& aLength, TPoint& aPixel,TUint32* aBase, TLineScanningPosition& aLineScanningPosition) const; williamr@2: IMPORT_C void GetScanLine(TDes8& aBuf,const TPoint& aPixel,TInt aLength,TBool aDither,const TPoint& aDitherOffset,TDisplayMode aDispMode,TUint32* aBase, TLineScanningPosition& aLineScanningPosition) const; williamr@2: IMPORT_C void GetScanLine(TUint32*& aSlptr, TDes8& aBuf,const TPoint& aPixel,TInt aLength,TBool aDither,const TPoint& aDitherOffset,TDisplayMode aDispMode) const; williamr@2: IMPORT_C void GetScanLine(TDes8& aBuf,const TPoint& aPixel,TInt aLength,TBool aDither,const TPoint& aDitherOffset,TDisplayMode aDispMode,TUint32* aBase) const; williamr@4: IMPORT_C void GetVerticalScanLine(TDes8& aBuf,TInt aX,TBool aDither,const TPoint& aDitherOffset,TDisplayMode aDispMode,TUint32* aBase, CFbsRasterizer* aRasterizer) const; williamr@2: IMPORT_C void StretchScanLine(TDes8& aBuf,const TPoint& aPixel,TInt aClipStrchX,TInt aClipStrchLen,TInt aStretchLength,TInt aOrgX,TInt aOrgLen,const TPoint& aDitherOffset,TDisplayMode aDispMode,TUint32* aBase) const; williamr@2: IMPORT_C void StretchScanLine(TDes8& aBuf,const TPoint& aPixel,TInt aClipStrchX,TInt aClipStrchLen,TInt aStretchLength,TInt aOrgX,TInt aOrgLen,const TPoint& aDitherOffset,TDisplayMode aDispMode,TUint32* aBase, TLineScanningPosition& aLineScanningPosition) const; williamr@2: IMPORT_C TUint32* ScanLineAddress(TUint32* aBase,TUint aY) const; williamr@2: IMPORT_C TBool IsMonochrome(TUint32* aBase) const; williamr@2: IMPORT_C TBool IsLargeBitmap() const; williamr@2: IMPORT_C TInt CompressData(); williamr@2: IMPORT_C TInt CompressData(TBitmapfileCompressionScheme aScheme); williamr@2: IMPORT_C TInt CheckBackgroundCompressData(); williamr@2: IMPORT_C void SetCompressionBookmark(TLineScanningPosition& aLineScanningPosition, TUint32* aBase, const CFbsBitmap* aFbsBitmap); williamr@2: IMPORT_C TInt HardwareBitmapHandle() const; williamr@2: IMPORT_C TBool IsCompressedInRAM() const; williamr@2: IMPORT_C TBool IsCompressed() const; williamr@2: IMPORT_C TInt DataStride() const; williamr@2: IMPORT_C SEpocBitmapHeader Header() const; williamr@2: private: williamr@2: IMPORT_C void operator delete(TAny*); williamr@2: void operator delete(TAny*, TAny*) {} // This function exists only to prevent a compiler warning williamr@2: IMPORT_C CBitwiseBitmap(RHeap* aHeap,CChunkPile* aPile); williamr@2: IMPORT_C ~CBitwiseBitmap(); williamr@2: IMPORT_C void Reset(); williamr@2: IMPORT_C TInt Construct(const TSize& aSize,TDisplayMode aDispMode,TUid aCreatorUid); williamr@4: IMPORT_C TInt ConstructExtended(const TSize& aSize, TDisplayMode aDispMode, TUid aType, TInt aDataSize); williamr@2: IMPORT_C void ConstructL(RFs& aFs,const TDesC& aFilename,TInt32 aId,TUint aFileOffset); williamr@2: IMPORT_C void ConstructL(RFile& aFile,TInt32 aId,TUint aFileOffset); williamr@2: IMPORT_C void ConstructL(CShiftedFileStore* aFileStore,TStreamId aStreamId); williamr@2: IMPORT_C TInt CopyData(const CBitwiseBitmap& aSourceBitmap); williamr@2: private: williamr@2: void GenerateLineFromCompressedTwelveBitData(TUint8* aDestBuffer, const TPoint& aPixel,TInt aLength,TUint32* aBase, TLineScanningPosition& aLineScanningPosition) const; williamr@2: void GenerateLineFromCompressedEightBitData(TUint8* aDestBuffer, const TPoint& aPixel,TInt aLength,TUint32* aBase, TLineScanningPosition& aLineScanningPosition) const; williamr@2: TUint8 GetGrayPixelEx(TInt aX,TUint32* aScanLineAddress) const; williamr@2: TRgb GetRgbPixelEx(TInt aX,TUint32* aScanLineAddress) const; williamr@2: void GetRgbPixelExMany(TInt aX,TUint32* aScanlinePtr,TUint32* aDest,TInt aLength) const; williamr@2: void GetRgbPixelExMany16M(TInt aX,TUint32* aScanlinePtr,TUint8* aDest,TInt aLength) const; williamr@2: void GetRgbPixelExMany16MAP(TInt aX,TUint32* aScanlinePtr,TUint32* aDest,TInt aLength) const; williamr@2: void GetScanLineGray2(TDes8& aBuf,const TPoint& aPixel,TInt aLength,TBool aDither,const TPoint& aDitherOffset,TUint32* aScanlinePtr) const; williamr@2: void GetScanLineGray4(TDes8& aBuf,const TPoint& aPixel,TInt aLength,TBool aDither,const TPoint& aDitherOffset,TUint32* aScanlinePtr) const; williamr@2: void GetScanLineGray16(TDes8& aBuf,const TPoint& aPixel,TInt aLength,TUint32* aScanlinePtr) const; williamr@2: void GetScanLineGray256(TDes8& aBuf,const TPoint& aPixel,TInt aLength,TUint32* aScanlinePtr) const; williamr@2: void GetScanLineColor16(TDes8& aBuf,const TPoint& aPixel,TInt aLength,TUint32* aScanlinePtr) const; williamr@2: void GetScanLineColor256(TDes8& aBuf,const TPoint& aPixel,TInt aLength,TUint32* aScanlinePtr) const; williamr@2: void GetScanLineColor4K(TDes8& aBuf,const TPoint& aPixel,TInt aLength,TUint32* aScanlinePtr) const; williamr@2: void GetScanLineColor64K(TDes8& aBuf,const TPoint& aPixel,TInt aLength,TUint32* aScanlinePtr) const; williamr@2: void GetScanLineColor16M(TDes8& aBuf,const TPoint& aPixel,TInt aLength,TUint32* aScanlinePtr) const; williamr@2: void GetScanLineColor16MU(TDes8& aBuf,const TPoint& aPixel,TInt aLength,TUint32* aScanlinePtr) const; williamr@2: void GetScanLineColorRgb(TDes8& aBuf,const TPoint& aPixel,TInt aLength,TUint32* aScanlinePtr) const; williamr@2: void GetScanLineExBits(TDes8& aBuf,TInt aX,TInt aLength,TUint32* aScanlinePtr) const; williamr@2: void GetScanLineExBytes(TDes8& aBuf,TInt aX,TInt aLength,TUint32* aScanlinePtr) const; williamr@2: void DoExternalizeDataCompressedL(RWriteStream& aStream,TUint8* aData,TInt aSizeInBytes) const; williamr@2: void DoExternalizeByteDataCompressedL(RWriteStream& aStream,TUint8* aData,TInt aSizeInBytes) const; williamr@2: void DoExternalizeTwelveBitDataCompressedL(RWriteStream& aStream,TUint8* aData,TInt aSizeInBytes) const; williamr@2: void DoExternalizeSixteenBitDataCompressedL(RWriteStream& aStream,TUint8* aData,TInt aSizeInBytes) const; williamr@2: void DoExternalizeTwentyFourBitDataCompressedL(RWriteStream& aStream,TUint8* aData,TInt aSizeInBytes) const; williamr@2: void DoExternalizeThirtyTwoUBitDataCompressedL(RWriteStream& aStream,TUint8* aData,TInt aSizeInBytes) const; williamr@2: void DoExternalizeThirtyTwoABitDataCompressedL(RWriteStream& aStream,TUint8* aData,TInt aSizeInBytes) const; williamr@2: TInt SizeOfDataCompressed(TUint8* aData,TInt aSizeInBytes) const; williamr@2: TInt SizeOfByteDataCompressed(TUint8* aData,TInt aSizeInBytes) const; williamr@2: TInt SizeOfTwelveBitDataCompressed(TUint8* aData,TInt aSizeInBytes) const; williamr@2: TInt SizeOfSixteenBitDataCompressed(TUint8* aData,TInt aSizeInBytes) const; williamr@2: TInt SizeOfTwentyFourBitDataCompressed(TUint8* aData,TInt aSizeInBytes) const; williamr@2: TInt SizeOfThirtyTwoUBitDataCompressed(TUint8* aData,TInt aSizeInBytes) const; williamr@2: TInt SizeOfThirtyTwoABitDataCompressed(TUint8* aData,TInt aSizeInBytes) const; williamr@2: TBool TrueColorPointerCompare(TUint8* aColorPointer,TUint8 aComponent1,TUint8 aComponent2,TUint8 aComponent3) const; williamr@2: TBool ColorAlphaPointerCompare(TUint8* aColorPointer,TUint8 aComponent1,TUint8 aComponent2,TUint8 aComponent3,TUint8 aComponent4) const; williamr@2: void DoInternalizeL(RReadStream& aStream,TInt aSrceSize,TUint32* aBase); williamr@2: void DoInternalizeCompressedDataL(RReadStream& aStream,TInt aSrceSize,TUint32* aBase,TBitmapfileCompression aCompression); williamr@2: void DoDecompressByteData(TUint8* aDestBuffer,TInt aDestSize,TUint8* aSrceBuffer,TInt aSrceSize); williamr@2: williamr@2: void DoDecompressByteDataAltL(RReadStream& aStream,TInt aSrceSizeInBytes,TUint32* aBase); williamr@2: void DoDecompressTwelveBitData(TUint8* aDestBuffer,TInt aDestSize,TUint8* aSrceBuffer,TInt aSrceSize); williamr@2: void DoDecompressTwelveBitDataAltL(RReadStream& aStream,TInt aSrceSizeInBytes,TUint32* aBase); williamr@2: void DoDecompressSixteenBitData(TUint8* aDestBuffer,TInt aDestSize,TUint8* aSrceBuffer,TInt aSrceSize); williamr@2: void DoDecompressSixteenBitDataAltL(RReadStream& aStream,TInt aSrceSizeInBytes,TUint32* aBase); williamr@2: void DoDecompressTwentyFourBitData(TUint8* aDestBuffer,TInt aDestSize,TUint8* aSrceBuffer,TInt aSrceSize); williamr@2: void DoDecompressTwentyFourBitDataAltL(RReadStream& aStream,TInt aSrceSizeInBytes,TUint32* aBase); williamr@2: void DoDecompressThirtyTwoUBitData(TUint8* aDestBuffer,TInt aDestSize,TUint8* aSrceBuffer,TInt aSrceSize); williamr@2: void DoDecompressThirtyTwoUBitDataAltL(RReadStream& aStream,TInt aSrceSizeInBytes,TUint32* aBase); williamr@2: void DoDecompressThirtyTwoABitData(TUint8* aDestBuffer,TInt aDestSize,TUint8* aSrceBuffer,TInt aSrceSize); williamr@2: void DoDecompressThirtyTwoABitDataAltL(RReadStream& aStream,TInt aSrceSizeInBytes,TUint32* aBase); williamr@2: void DoStretchScanLine(TDes8& aBuf,TInt x,TInt y,TInt aClipStrchX,TInt aClipStrchLen,TInt aStretchLength,TInt aOrgX,TInt aOrgLen,const TPoint& aDitherOffset,TDisplayMode aDispMode,TUint32* aBase,TLineScanningPosition& aLineScanningPosition) const; williamr@2: void DoCompressScanLine(TDes8& aBuf,TInt x,TInt y,TInt aClipStrchX,TInt aClipStrchLen,TInt aStretchLength,TInt aOrgX,TInt aOrgLen,const TPoint& aDitherOffset,TDisplayMode aDispMode,TUint32* aBase,TLineScanningPosition& aLineScanningPosition) const; williamr@2: TUint32 HashTo1bpp(TUint32 aGray256,TBool aOddX,TBool aOddY) const; williamr@2: TUint32 HashTo2bpp(TUint32 aGray256,TInt aDitherIndex) const; williamr@2: TBool IsWordMonochrome(TUint32 aWord) const; williamr@2: TUint32* DataAddress() const; williamr@2: static void WhiteFill(TUint8* aData,TInt aDataSize,TDisplayMode aDispMode); williamr@2: static TInt ByteWidth(TInt aPixelWidth,TDisplayMode aDispMode); williamr@2: static TInt Bpp(TDisplayMode aDispMode); williamr@2: static TInt IsColor(TDisplayMode aDispMode); williamr@2: static TDisplayMode DisplayMode(TInt aBpp,TInt aColor); williamr@2: static TBitmapfileCompression CompressionType(TInt aBpp, TInt aColor); williamr@2: TInt DoGetScanLinePtr(TUint32*& aSlptr, TPoint& aPixel,TInt aLength, TUint32* aBase, TLineScanningPosition& aLineScanningPosition) const; williamr@2: void GenerateLineFromCompressedSixteenBitData(TUint8* aDestBuffer, const TPoint& aPixel,TInt aLength, TUint32* aBase, TLineScanningPosition& aLineScanningPosition) const; williamr@2: TDisplayMode InitialDisplayMode() const; williamr@2: TInt SetDisplayMode(TDisplayMode aDisplayMode, TUint32* aDataAddress); williamr@2: TInt DisplayModeArgCheck(TDisplayMode aDisplayMode, TUint32* aDataAddress) const; williamr@2: void ChangeDisplayMode( TDisplayMode aNewDisplayMode, williamr@2: TInt aScanLineWidthNew, williamr@2: TUint8* aDataAddrNew, williamr@2: TUint32* aDataAddress, williamr@2: TInt aYStart, williamr@2: TInt aYInc, williamr@2: TInt aYEnd); williamr@2: void UpdateBitmapProperties(TDisplayMode aNewDisplayMode); williamr@2: TInt SwapWidthAndHeight(TUint32* aDataAddress); williamr@2: void GenerateLineFromCompressed24BitData(TUint8* aDestBuffer, const TPoint& aPixel,TInt aLength, TUint32* aBase, TLineScanningPosition& aLineScanningPosition) const; williamr@2: void GenerateLineFromCompressed32UBitData(TUint8* aDestBuffer, const TPoint& aPixel,TInt aLength, TUint32* aBase, TLineScanningPosition& aLineScanningPosition) const; williamr@2: void GenerateLineFromCompressed32ABitData(TUint8* aDestBuffer, const TPoint& aPixel,TInt aLength, TUint32* aBase, TLineScanningPosition& aLineScanningPosition) const; williamr@2: void AdjustXCoord(TInt& aX) const; williamr@2: void GetLineScanPos(TLineScanningPosition& aLineScanPos, williamr@2: const TCompressionBookMark*& aComprBookMark, williamr@2: const TUint8* aBase) const; williamr@2: void UpdateBookMark(const TLineScanningPosition& aLineScanPos, williamr@2: TCompressionBookMark* aComprBookMark, williamr@2: const TUint8* aBase) const; williamr@2: void GetScanLineColor16MA(TDes8& aBuf,const TPoint& aPixel,TInt aLength,TUint32* aScanlinePtr) const; williamr@2: void GetScanLineColor16MAP(TDes8& aBuf,const TPoint& aPixel,TInt aLength,TUint32* aScanlinePtr) const; williamr@2: TInt PaletteCompress(); williamr@2: void GenerateLineFromPaletteCompressedData(TUint8* aDestBuffer, const TPoint& aPixel,TInt aLength, TUint32* aBase, TLineScanningPosition& aLineScanningPosition) const; williamr@2: TUint PaletteBitsPerPixel(TInt aNumColors) const; williamr@2: TUint PaletteBytesPerPixel(TInt aBitsPerPixel) const; williamr@2: void PaletteDecodeAndAssignGeneric(TUint8* aDataPtr, TUint32* aPalettePtr, TUint8*& aDestPtr, TUint aStartPixel, TUint aEndPixel, TUint aCompressedPixelsPerByte, TUint aCompressedBitsPerPixel) const; williamr@2: static void PaletteDecode1PixelPerByte(TUint8* aDataPtr, TUint32* aPalettePtr, TUint8*& aDestPtr, TAssignFunction aAssignFunction); williamr@2: static void PaletteDecode2PixelPerByte(TUint8* aDataPtr, TUint32* aPalettePtr, TUint8*& aDestPtr, TAssignFunction aAssignFunction); williamr@2: static void PaletteDecode4PixelPerByte(TUint8* aDataPtr, TUint32* aPalettePtr, TUint8*& aDestPtr, TAssignFunction aAssignFunction); williamr@2: static void PaletteDecode8PixelPerByte(TUint8* aDataPtr, TUint32* aPalettePtr, TUint8*& aDestPtr, TAssignFunction aAssignFunction); williamr@2: static void PaletteAssign16BitColor(TUint8*& aDestPtr, TUint32 aColor); williamr@2: static void PaletteAssign24BitColor(TUint8*& aDestPtr, TUint32 aColor); williamr@2: static void PaletteAssign32BitColor(TUint8*& aDestPtr, TUint32 aColor); williamr@2: void UpdatePaddingData(TUint32* aData); williamr@2: static void CheckHeaderIsValidL(const SEpocBitmapHeader& aHeader); williamr@2: static TInt CompressedFormatInfo(TDisplayMode aDispMode, TInt& aBytesPerPack, TInt& aBytesPerCompressed); williamr@2: static void BitmapFill32(TUint32* aDestPtr32, TInt aCount, TUint32 aValue32); williamr@2: static inline void BitmapFill16(TUint16* aDestPtr16, TInt aCount, TUint16 aValue16); williamr@2: private: williamr@4: struct TExtra williamr@4: { williamr@4: #ifdef SYMBIAN_DEBUG_FBS_LOCKHEAP williamr@4: TInt iLockCount; // number of calls to CFbsBitmap::LockHeap() not balanced by calls to CFbsBitmap::UnlockHeap() williamr@4: TThreadId iThreadId; // id of thread that called CFbsBitmap::LockHeap() if any williamr@4: #endif williamr@4: TInt64 iSerialNumber; // serial number of bitmap which is unique to the whole FBServ williamr@4: TInt iTouchCount; // number of calls to TouchBitmap()i.e. number of times bitmap has been changed williamr@4: }; williamr@4: inline TExtra* Extra() const; // only for bitmaps created in RAM williamr@4: private: williamr@2: TUid iUid; williamr@2: struct TSettings williamr@2: { williamr@2: TSettings(TDisplayMode aDisplayMode); williamr@2: void SetDisplayModes(TDisplayMode aDisplayMode); williamr@2: void SetCurrentDisplayMode(TDisplayMode aDisplayMode); williamr@2: TDisplayMode CurrentDisplayMode() const; williamr@2: TDisplayMode InitialDisplayMode() const; williamr@2: inline void SetDirtyBitmap(); williamr@2: inline TBool IsDirtyBitmap() const; williamr@4: inline void SetVolatileBitmap(); williamr@4: inline TBool IsVolatileBitmap() const; williamr@2: enum williamr@2: { williamr@4: EBitmapFlagDirty = 0x00010000, // set in the old bitmap when a re-allocating operation has created a new bitmap williamr@4: EBitmapFlagVolatile = 0x00020000, // set when DataAddress() has been called but BeginDataAccess() has not williamr@2: }; williamr@2: TUint32 iData; williamr@2: } iSettings; williamr@2: RHeap* iHeap; williamr@2: CChunkPile* iPile; williamr@2: TInt iByteWidth; williamr@2: SEpocBitmapHeader iHeader; williamr@4: TInt iSpare; williamr@2: TInt iDataOffset; // offset in bytes from "this" or from base of bitmap chunk, or hardware bitmap handle williamr@2: TBool iIsCompressedInRAM; //flag indicating whether CompressData has been called williamr@2: }; williamr@2: williamr@2: #endif