palm-os-sdk/sdk-5r4/include/Core/System/Bitmap.h
2018-08-30 15:18:26 +01:00

398 lines
13 KiB
C
Executable File

/******************************************************************************
*
* Copyright (c) 1994-2004 PalmSource, Inc. All rights reserved.
*
* File: Bitmap.h
*
* Release: eclipse 5 SDK (68K) R4.
*
* Description:
* This file defines bitmap structures and routines.
*
*****************************************************************************/
#ifndef __BITMAP_H__
#define __BITMAP_H__
#include <PalmTypes.h>
#include <CoreTraps.h>
#include <PalmOptErrorCheckLevel.h> // #define ERROR_CHECK_LEVEL
//-----------------------------------------------
// The Bitmap Structure.
//-----------------------------------------------
// bitmap version numbers
#define BitmapVersionZero 0
#define BitmapVersionOne 1
#define BitmapVersionTwo 2
#define BitmapVersionThree 3
// Compression Types for BitmapVersionTwo
typedef enum BitmapCompressionTag
{
BitmapCompressionTypeScanLine = 0,
BitmapCompressionTypeRLE,
BitmapCompressionTypePackBits,
BitmapCompressionTypeEnd, // must follow last compression algorithm
BitmapCompressionTypeBest = 0x64,
BitmapCompressionTypeNone = 0xFF
} BitmapCompressionType;
// pixel format defined with BitmapVersionThree
typedef enum PixelFormatTag
{
pixelFormatIndexed,
pixelFormat565,
pixelFormat565LE, // not used by 68K-based OS
pixelFormatIndexedLE // not used by 68K-based OS
} PixelFormatType;
// constants used by density field
typedef enum DensityTag {
kDensityLow = 72,
kDensityOneAndAHalf = 108,
kDensityDouble = 144,
kDensityTriple = 216,
kDensityQuadruple = 288
} DensityType;
typedef struct BitmapFlagsType
#ifdef ALLOW_ACCESS_TO_INTERNALS_OF_BITMAPS // These fields will not be available in the next OS release!
{
UInt16 compressed:1; // Data format: 0=raw; 1=compressed
UInt16 hasColorTable:1; // if true, color table stored before bits[]
UInt16 hasTransparency:1; // true if transparency is used
UInt16 indirect:1; // true if bits are stored indirectly
UInt16 forScreen:1; // system use only
UInt16 directColor:1; // direct color bitmap
UInt16 indirectColorTable:1; // if true, color table pointer follows BitmapType structure
UInt16 noDither:1; // if true, blitter does not dither
UInt16 reserved:8;
}
#endif
BitmapFlagsType;
#define kTransparencyNone ((UInt32)0xFFFFFFFF)
// this definition correspond to the 'Tbmp' and 'tAIB' resource types
// Base BitmapType structure
typedef struct BitmapType
#ifdef ALLOW_ACCESS_TO_INTERNALS_OF_BITMAPS // These fields will not be available in the next OS release!
{
Int16 width;
Int16 height;
UInt16 rowBytes;
BitmapFlagsType flags;
UInt8 pixelSize;
UInt8 version;
}
#endif
BitmapType;
typedef BitmapType* BitmapPtr;
// This data structure is the PalmOS 5 version 3 BitmapType.
typedef struct BitmapTypeV3
#ifdef ALLOW_ACCESS_TO_INTERNALS_OF_BITMAPS // These fields will not be available in the next OS release!
{
// BitmapType
Int16 width;
Int16 height;
UInt16 rowBytes;
BitmapFlagsType flags; // see BitmapFlagsType
UInt8 pixelSize; // bits per pixel
UInt8 version; // data structure version 3
// version 3 fields
UInt8 size; // size of this structure in bytes (0x16)
UInt8 pixelFormat; // format of the pixel data, see pixelFormatType
UInt8 unused;
UInt8 compressionType; // see BitmapCompressionType
UInt16 density; // used by the blitter to scale bitmaps
UInt32 transparentValue; // the index or RGB value of the transparent color
UInt32 nextBitmapOffset; // byte offset to next bitmap in bitmap family
// if (flags.hasColorTable)
// {
// if (flags.indirectColorTable)
// ColorTableType* colorTableP; // pointer to color table
// else
// ColorTableType colorTable; // color table, could have 0 entries (2 bytes long)
// }
//
// if (flags.indirect)
// void* bitsP; // pointer to actual bits
// else
// UInt8 bits[]; // or actual bits
//
}
#endif
BitmapTypeV3;
typedef BitmapTypeV3* BitmapPtrV3;
// Version 2 BitmapType structure
typedef struct BitmapTypeV2
#ifdef ALLOW_ACCESS_TO_INTERNALS_OF_BITMAPS // These fields will not be available in the next OS release!
{
// BitmapType
Int16 width;
Int16 height;
UInt16 rowBytes;
BitmapFlagsType flags; // (compressed, hasColorTable, hasTransparency, indirect, forScreen, directColor)
UInt8 pixelSize;
UInt8 version;
// version 2 fields
UInt16 nextDepthOffset; // offset in longwords
UInt8 transparentIndex;
UInt8 compressionType;
UInt16 reserved;
// if (flags.hasColorTable)
// ColorTableType colorTable // color table, could have 0 entries (2 bytes long)
//
// if (flags.directColor)
// BitmapDirectInfoType directInfo;
//
// if (flags.indirect)
// void* bitsP; // pointer to actual bits
// else
// UInt8 bits[]; // or actual bits
//
}
#endif
BitmapTypeV2;
typedef BitmapTypeV2* BitmapPtrV2;
// Version 1 BitmapType structure
typedef struct BitmapTypeV1
#ifdef ALLOW_ACCESS_TO_INTERNALS_OF_BITMAPS // These fields will not be available in the next OS release!
{
// BitmapType
Int16 width;
Int16 height;
UInt16 rowBytes;
BitmapFlagsType flags; // (compressed, hasColorTable)
UInt8 pixelSize;
UInt8 version;
// version 1 fields
UInt16 nextDepthOffset; // offset in longwords
UInt16 reserved[2];
}
#endif
BitmapTypeV1;
typedef BitmapTypeV1* BitmapPtrV1;
// Version 0 BitmapType structure
typedef struct BitmapTypeV0
#ifdef ALLOW_ACCESS_TO_INTERNALS_OF_BITMAPS // These fields will not be available in the next OS release!
{
// BitmapType
Int16 width;
Int16 height;
UInt16 rowBytes;
BitmapFlagsType flags; // (compressed)
// version 0 fields
UInt16 reserved[4]; // pixelSize and version fields do not exist, but the reserved array
// was initialized to 0; the OS recognizes that pixelSize of 0 means
} // the the bitmap's depth is 1
#endif
BitmapTypeV0;
typedef BitmapTypeV0* BitmapPtrV0;
// -----------------------------------------------
// This is the structure of a color table. It maps pixel values into
// RGB colors. Each element in the table corresponds to the next
// index, starting at 0.
// -----------------------------------------------
typedef struct RGBColorType
{
UInt8 index; // index of color or best match to cur CLUT or unused.
UInt8 r; // amount of red, 0->255
UInt8 g; // amount of green, 0->255
UInt8 b; // amount of blue, 0->255
}
RGBColorType;
// -----------------------------------------------
// For direct color bitmaps (flags.directColor set), this structure follows
// the color table if one is present, or immediately follows the BitmapType if a
// color table is not present.
// The only type of direct color bitmap that is currently supported in version 3
// of the Window Manager (feature: sysFtrCreator, #sysFtrNumWinVersion) are
// 16 bits/pixel with redBits=5, greenBits=6, blueBits=5.
// -----------------------------------------------
typedef struct BitmapDirectInfoType
{
UInt8 redBits; // # of red bits in each pixel
UInt8 greenBits; // # of green bits in each pixel
UInt8 blueBits; // # of blue bits in each pixel
UInt8 reserved; // must be zero
RGBColorType transparentColor; // transparent color (index field ignored)
}
BitmapDirectInfoType;
// -----------------------------------------------
// Color Table
// -----------------------------------------------
typedef struct ColorTableType
{
// high bits (numEntries > 256) reserved
UInt16 numEntries; // number of entries in table
// RGBColorType entry[]; array 0..numEntries-1 of colors
// starts immediately after numEntries
}
ColorTableType;
// get start of color table entries aray given pointer to ColorTableType
#define ColorTableEntries(ctP) ((RGBColorType *)((ColorTableType *)(ctP)+1))
// high density trap selectors
#define HDSelectorBmpGetNextBitmapAnyDensity 0
#define HDSelectorBmpGetVersion 1
#define HDSelectorBmpGetCompressionType 2
#define HDSelectorBmpGetDensity 3
#define HDSelectorBmpSetDensity 4
#define HDSelectorBmpGetTransparentValue 5
#define HDSelectorBmpSetTransparentValue 6
#define HDSelectorBmpCreateBitmapV3 7
#define HDSelectorWinSetCoordinateSystem 8
#define HDSelectorWinGetCoordinateSystem 9
#define HDSelectorWinScalePoint 10
#define HDSelectorWinUnscalePoint 11
#define HDSelectorWinScaleRectangle 12
#define HDSelectorWinUnscaleRectangle 13
#define HDSelectorWinScreenGetAttribute 14
#define HDSelectorWinPaintTiledBitmap 15
#define HDSelectorWinGetSupportedDensity 16
#define HDSelectorEvtGetPenNative 17
#define HDSelectorWinScaleCoord 18
#define HDSelectorWinUnscaleCoord 19
#define HDSelectorWinPaintRoundedRectangleFrame 20
#define HDSelectorWinSetScalingMode 21
#define HDSelectorWinGetScalingMode 22
#define HDSelectorInvalid 23 // leave this selector at end
// If nobody has explicitly specified whether the high density trap dispatcher
// should be used, set it based on the emulation level.
#ifndef USE_HIGH_DENSITY_TRAPS
#if EMULATION_LEVEL == EMULATION_NONE
#define USE_HIGH_DENSITY_TRAPS 1
#else
#define USE_HIGH_DENSITY_TRAPS 0
#endif
#endif
#if USE_HIGH_DENSITY_TRAPS
#define HIGH_DENSITY_TRAP(selector) \
_SYSTEM_API(_CALL_WITH_SELECTOR)(_SYSTEM_TABLE, sysTrapHighDensityDispatch, selector)
#else
#define HIGH_DENSITY_TRAP(selector)
#endif
#ifdef __cplusplus
extern "C"
{
#endif
// -----------------------------------------------
// Routines relating to bitmap management
// -----------------------------------------------
extern BitmapType* BmpCreate (Coord width, Coord height, UInt8 depth, ColorTableType * colortableP, UInt16 * error)
SYS_TRAP (sysTrapBmpCreate);
extern Err BmpDelete (BitmapType * bitmapP)
SYS_TRAP (sysTrapBmpDelete);
extern Err BmpCompress (BitmapType * bitmapP, BitmapCompressionType compType)
SYS_TRAP (sysTrapBmpCompress);
extern void* BmpGetBits (BitmapType * bitmapP)
SYS_TRAP (sysTrapBmpGetBits);
extern ColorTableType* BmpGetColortable (BitmapType * bitmapP)
SYS_TRAP (sysTrapBmpGetColortable);
extern UInt16 BmpSize (const BitmapType * bitmapP)
SYS_TRAP (sysTrapBmpSize);
extern UInt16 BmpBitsSize (const BitmapType * bitmapP)
SYS_TRAP (sysTrapBmpBitsSize);
extern void BmpGetSizes (const BitmapType * bitmapP, UInt32 * dataSizeP, UInt32 * headerSizeP)
SYS_TRAP (sysTrapBmpGetSizes);
extern UInt16 BmpColortableSize (const BitmapType * bitmapP)
SYS_TRAP (sysTrapBmpColortableSize);
extern void BmpGetDimensions (const BitmapType * bitmapP, Coord * widthP, Coord * heightP, UInt16 * rowBytesP)
SYS_TRAP (sysTrapBmpGetDimensions);
extern UInt8 BmpGetBitDepth (const BitmapType * bitmapP)
SYS_TRAP (sysTrapBmpGetBitDepth);
extern BitmapType* BmpGetNextBitmap (BitmapType * bitmapP)
SYS_TRAP (sysTrapBmpGetNextBitmap);
//-----------------------------------------------
// High Density support functions
//-----------------------------------------------
#if EMULATION_LEVEL == EMULATION_NONE
void WinHighDensityDispatch();
#endif
extern BitmapType* BmpGetNextBitmapAnyDensity(BitmapType* bitmapP)
HIGH_DENSITY_TRAP(HDSelectorBmpGetNextBitmapAnyDensity);
extern UInt8 BmpGetVersion(const BitmapType* bitmapP)
HIGH_DENSITY_TRAP(HDSelectorBmpGetVersion);
extern BitmapCompressionType BmpGetCompressionType(const BitmapType* bitmapP)
HIGH_DENSITY_TRAP(HDSelectorBmpGetCompressionType);
extern UInt16 BmpGetDensity(const BitmapType* bitmapP)
HIGH_DENSITY_TRAP(HDSelectorBmpGetDensity);
extern Err BmpSetDensity(BitmapType* bitmapP, UInt16 density)
HIGH_DENSITY_TRAP(HDSelectorBmpSetDensity);
extern Boolean BmpGetTransparentValue(const BitmapType* bitmapP, UInt32* transparentValueP)
HIGH_DENSITY_TRAP(HDSelectorBmpGetTransparentValue);
extern void BmpSetTransparentValue(BitmapType* bitmapP, UInt32 transparentValue)
HIGH_DENSITY_TRAP(HDSelectorBmpSetTransparentValue);
extern BitmapTypeV3* BmpCreateBitmapV3(const BitmapType* bitmapP, UInt16 density, const void* bitsP, const ColorTableType* colorTableP)
HIGH_DENSITY_TRAP(HDSelectorBmpCreateBitmapV3);
#ifdef __cplusplus
}
#endif
#endif // __BITMAP_H__