sys7.1-doc-wip/OS/VDig/ImageCompression.h
2019-07-27 22:37:48 +08:00

621 lines
26 KiB
C

/************************************************************
Created: Tuesday, August 13, 1991 at 4:25 PM
ImageCompression.h
C Interface to the Macintosh Libraries
Copyright Apple Computer, Inc. 1991
All rights reserved
************************************************************/
#ifndef __IMAGECOMPRESSION__
#define __IMAGECOMPRESSION__
#ifndef __QUICKDRAW__
#include <QuickDraw.h>
#endif
#ifndef __QDOFFSCREEN__
#include <QDOffscreen.h>
#endif
#ifndef __TYPES__
#include <Types.h>
#endif
#ifndef __COMPONENTS__
#include <Components.h>
#endif
#ifndef __STANDARDFILE__
#include <StandardFile.h>
#endif
enum {
#define gestaltCompressionMgr 'icmp'
/* These are the bits that are set in the Component flags, and also in the codecInfo struct. */
#define codecInfoDoes1 (1L<<0) /* codec can work with 1-bit pixels */
#define codecInfoDoes2 (1L<<1) /* codec can work with 2-bit pixels */
#define codecInfoDoes4 (1L<<2) /* codec can work with 4-bit pixels */
#define codecInfoDoes8 (1L<<3) /* codec can work with 8-bit pixels */
#define codecInfoDoes16 (1L<<4) /* codec can work with 16-bit pixels */
#define codecInfoDoes32 (1L<<5) /* codec can work with 32-bit pixels */
#define codecInfoDoesDither (1L<<6) /* codec can do ditherMode */
#define codecInfoDoesStretch (1L<<7) /* codec can stretch to arbitrary sizes */
#define codecInfoDoesShrink (1L<<8) /* codec can shrink to arbitrary sizes */
#define codecInfoDoesMask (1L<<9) /* codec can mask to clipping regions */
#define codecInfoDoesTemporal (1L<<10) /* codec can handle temporal redundancy */
#define codecInfoDoesDouble (1L<<11) /* codec can stretch to double size exactly */
#define codecInfoDoesQuad (1L<<12) /* codec can stretch to quadruple size exactly */
#define codecInfoDoesHalf (1L<<13) /* codec can shrink to half size */
#define codecInfoDoesQuarter (1L<<14) /* codec can shrink to quarter size */
#define codecInfoDoesRotate (1L<<15) /* codec can rotate on decompress */
#define codecInfoDoesHorizFlip (1L<<16) /* codec can flip horizontally on decompress */
#define codecInfoDoesVertFlip (1L<<17) /* codec can flip vertically on decompress */
#define codecInfoDoesSkew (1L<<18) /* codec can skew on decompress */
#define codecInfoDoesBlend (1L<<19) /* codec can blend on decompress */
#define codecInfoDoesWarp (1L<<20) /* codec can warp arbitrarily on decompress */
#define codecInfoDoesRecompress (1L<<21) /* codec can recompress image without accumulating errors */
#define codecInfoDoesSpool (1L<<22) /* codec can spool image data */
#define codecInfoDepth1 (1L<<0) /* compressed data at 1 bpp depth available */
#define codecInfoDepth2 (1L<<1) /* compressed data at 2 bpp depth available */
#define codecInfoDepth4 (1L<<2) /* compressed data at 4 bpp depth available */
#define codecInfoDepth8 (1L<<3) /* compressed data at 8 bpp depth available */
#define codecInfoDepth16 (1L<<4) /* compressed data at 16 bpp depth available */
#define codecInfoDepth32 (1L<<5) /* compressed data at 32 bpp depth available */
#define codecInfoDepth24 (1L<<6) /* compressed data at 24 bpp depth available */
#define codecInfoDepth33 (1L<<7) /* compressed data at 1 bpp monochrome depth available */
#define codecInfoDepth34 (1L<<8) /* compressed data at 2 bpp grayscale depth available */
#define codecInfoDepth36 (1L<<9) /* compressed data at 4 bpp grayscale depth available */
#define codecInfoDepth40 (1L<<10) /* compressed data at 8 bpp grayscale depth available */
#define codecInfoStoresClut (1L<<11) /* compressed data can have custom cluts */
#define codecInfoDoesLossless (1L<<12) /* compressed data can be stored in lossless format */
#define codecFlagUseImageBuffer (1L<<0) /* (input) allocate buffer for whole image on decompress sequence */
#define codecFlagUseScreenBuffer (1L<<1) /* (input) allocate buffer for screen on decompress sequence for faster updates */
#define codecFlagUpdatePrevious (1L<<2) /* (input) udate previous buffer on compress sequence */
#define codecFlagNoScreenUpdate (1L<<3) /* (input) dont update screen, but do update image buffer if allocated */
#define codecFlagWasCompressed (1L<<4) /* (input) hint to compressor that image was previously compressed */
#define codecFlagDontOffscreen (1L<<5) /* return error instead of automatically going offscreen */
#define codecFlagUpdatePreviousComp (1L<<6) /* (input) udate previous buffer on compress sequence */
#define codecFlagForceKeyFrame (1L<<7) /* when sent to CompressSequenceFrame, forces that frame to be a key frame */
#define codecFlagOnlyScreenUpdate (1L<<8) /* (input) only update screen from */
#define codecFlagLiveGrab (1L<<9) /* (input) data being compressed is from live source (speed is critical) */
#define codecFlagUsedNewImageBuffer (1L<<14) /* (output) indicates that image buffer was first used on this decompress sequence */
#define codecFlagUsedImageBuffer (1L<<15) /* (output) indicates that image buffer was used on this decompress sequence */
#define codecErr -8960 /* the codec returned an error */
#define noCodecErr -8961 /* the specified codec could not be found */
#define codecUnimpErr -8962 /* this feature is not implemented by the specified codec */
#define codecSizeErr -8963
#define codecScreenBufErr -8964 /* the screen buffer could not be allocated */
#define codecImageBufErr -8965 /* the image buffer could not be allocated */
#define codecSpoolErr -8966 /* the compressed data must be in memory (spooling did not work) */
#define codecAbortErr -8967 /* the operation was aborted by the progress proc */
#define codecWouldOffscreenErr -8968 /* an offscreen access would have been used, but wasn't allowed because codecFlagDontOffscreen was set */
#define codecBadDataErr -8969 /* compressed data was found to have inconsistencies */
#define codecDataVersErr -8970 /* compressed data was of a format version that codec couldn't handle */
#define codecConditionErr -8972 /* codec can not do requested operation */
#define codecOpenErr -8973 /* the codec could not be opened */
codecMinimumDataSize = 32768 /* The minimum data size for spooling in or out data */
#define compressorComponentType 'imco' /* the type for "Components" which compress images */
#define decompressorComponentType 'imdc' /* the type for "Components" which decompress images */
};
typedef Component CompressorComponent; /* a Component which compresses images */
typedef Component DecompressorComponent; /* a Component which decompresses images */
typedef Component CodecComponent; /* a Component which decompresses or compresses images */
#define anyCodec ((CodecComponent)0) /* take first working codec of given type */
#define bestSpeedCodec ((CodecComponent)-1) /* take fastest codec of given type */
#define bestFidelityCodec ((CodecComponent)-2) /* take codec which is most accurate*/
#define bestCompressionCodec ((CodecComponent)-3) /* take codec of given type that is most accurate */
typedef short sBoolean; /* to make sure stack frames are right */
typedef long CodecType; /* type descriptor for codecs i.e: 'appl','jpeg','rle ' */
typedef unsigned short CodecFlags; /* flags for codec manager calls */
typedef unsigned long CodecQ;
#define codecLosslessQuality 0x400L
#define codecMaxQuality 0x3FFL
#define codecMinQuality 0x000L
#define codecLowQuality 0x100L
#define codecNormalQuality 0x200L
#define codecHighQuality 0x300L
typedef pascal OSErr (*DataProcPtr)(Ptr *dataP,long bytesNeeded,long refCon);
typedef pascal OSErr (*FlushProcPtr)(Ptr data,long bytesAdded,long refCon);
#define codecCompletionSource (1<<0) /* asynchronous codec is done with source data */
#define codecCompletionDest (1<<1) /* asynchronous codec is done with destination data */
typedef pascal void (*CompletionProcPtr)(OSErr result,short flags,long refCon);
enum {
codecProgressOpen = 0,
codecProgressUpdatePercent = 1,
codecProgressClose = 2
};
typedef pascal OSErr (*ProgressProcPtr)(short message,Fixed completeness,long refCon);
typedef long ImageSequence;
struct ProgressProcRecord {
ProgressProcPtr progressProc;
long progressRefCon;
};
typedef struct ProgressProcRecord ProgressProcRecord;
typedef ProgressProcRecord *ProgressProcRecordPtr;
struct CompletionProcRecord {
CompletionProcPtr completionProc;
long completionRefCon;
};
typedef struct CompletionProcRecord CompletionProcRecord;
typedef CompletionProcRecord *CompletionProcRecordPtr;
struct DataProcRecord {
DataProcPtr dataProc;
long dataRefCon;
};
typedef struct DataProcRecord DataProcRecord;
typedef DataProcRecord *DataProcRecordPtr;
struct FlushProcRecord {
FlushProcPtr flushProc;
long flushRefCon;
};
typedef struct FlushProcRecord FlushProcRecord;
typedef FlushProcRecord *FlushProcRecordPtr;
/*
The ImageDescription is private data which is produced when an image or sequence
is compressed. It fully describes the format of the compressed data.*/
struct ImageDescription {
long idSize; /* total size of ImageDescription including extra data ( CLUTs and other per sequence data */
CodecType cType; /* what kind of codec compressed this data */
long resvd1; /* reserved for apple use */
short resvd2; /* reserved for apple use */
short dataRefIndex; /* set to zero */
short version; /* which version is this data */
short revisionLevel; /* what version of that codec did this */
long vendor; /* whose codec compressed this data */
CodecQ temporalQuality; /* what was the temporal quality factor */
CodecQ spatialQuality; /* what was the spatial quality factor */
short width; /* how many pixels wide is this data */
short height; /* how many pixels high is this data */
Fixed hRes; /* horizontal resolution */
Fixed vRes; /* vertical resolution */
long dataSize; /* if known, the size of data for this image descriptor */
short frameCount; /* number of frames this description applies to */
char name[32]; /* name of codec ( in case not installed ) */
short depth; /* what depth is this data (1-32) or ( 33-40 grayscale ) */
short clutID; /* clut id or if 0 clut follows or -1 if no clut */
};
typedef struct ImageDescription ImageDescription;
typedef ImageDescription *ImageDescriptionPtr, **ImageDescriptionHandle;
/*
The CodecInfo is the information returned as the codecInfo struct by a codec Component
to the codec manager or to the caller. It is specific to the particular codec
implementation and not to the codec type.*/
struct CodecInfo {
char typeName[32]; /* name of the codec type i.e.: 'Apple Image Compression' */
short version; /* version of the codec data that this codec knows about */
short revisionLevel; /* revision level of this codec i.e: 0x00010001 (1.0.1) */
long vendor; /* Maker of this codec i.e: 'appl' */
long decompressFlags; /* codecInfo flags for decompression capabilities */
long compressFlags; /* codecInfo flags for compression capabilities */
long formatFlags; /* codecInfo flags for compression format details */
unsigned char compressionAccuracy; /* measure (1-255) of accuracy of this codec for compress (0 if unknown) */
unsigned char decompressionAccuracy; /* measure (1-255) of accuracy of this codec for decompress (0 if unknown) */
unsigned short compressionSpeed; /* ( millisecs for compressing 320x240 on base mac II) (0 if unknown) */
unsigned short decompressionSpeed; /* ( millisecs for decompressing 320x240 on mac II)(0 if unknown) */
unsigned char compressionLevel; /* measure (1-255) of compression level of this codec (0 if unknown) */
char resvd; /* pad */
short minimumHeight; /* minimum height of image (block size) */
short minimumWidth; /* minimum width of image (block size) */
short decompressPipelineLatency; /* in milliseconds ( for asynchronous codecs ) */
short compressPipelineLatency; /* in milliseconds ( for asynchronous codecs ) */
long privateData;
};
typedef struct CodecInfo CodecInfo;
/* Table used for fast dithering. */
struct DitherTable {
long tag;
long seed;
long reserved;
char data[1];
};
typedef struct DitherTable DitherTable;
typedef DitherTable *DTabPtr, **DTabHandle;
/* Name list returned by GetCodecNameList. */
struct CodecNameSpec {
CodecComponent codec;
CodecType cType;
char typeName[32];
Handle name;
};
typedef struct CodecNameSpec CodecNameSpec;
struct CodecNameSpecList {
short count;
CodecNameSpec list[1];
};
typedef struct CodecNameSpecList CodecNameSpecList;
typedef CodecNameSpecList *CodecNameSpecListPtr;
/* Matrix stuff */
struct MatrixRecord {
Fixed matrix[3][3];
};
typedef struct MatrixRecord MatrixRecord;
typedef MatrixRecord *MatrixRecordPtr;
#ifndef _FixedPoint_
#define _FixedPoint_
struct FixedPoint {
Fixed x;
Fixed y;
};
typedef struct FixedPoint FixedPoint;
#endif _FixedPoint_
#ifndef _FixedRect_
#define _FixedRect_
struct FixedRect {
Fixed left;
Fixed top;
Fixed right;
Fixed bottom;
};
typedef struct FixedRect FixedRect;
#endif _FixedRect_
#ifdef __cplusplus
extern "C" {
#endif
pascal OSErr CodecManagerVersion(long *version)
= {0x7000,0xAAA3};
pascal OSErr GetCodecNameList(CodecNameSpecListPtr *list,sBoolean showAll)
= {0x7001,0xAAA3};
pascal OSErr DisposeCodecNameList(CodecNameSpecListPtr list)
= {0x700F,0xAAA3};
pascal OSErr GetCodecInfo(CodecInfo *info,CodecType cType,CodecComponent codec)
= {0x7003,0xAAA3};
pascal OSErr GetMaxCompressionSize(PixMapHandle src,const Rect *srcRect,short colorDepth,
CodecQ quality,CodecType cType,CompressorComponent codec,long *size)
= {0x7004,0xAAA3};
pascal OSErr GetCompressionTime(PixMapHandle src,const Rect *srcRect,short colorDepth,
CodecType cType,CompressorComponent codec,CodecQ *spatialQuality,CodecQ *temporalQuality,
unsigned long *compressTime)
= {0x7005,0xAAA3};
pascal OSErr CompressImage(PixMapHandle src,const Rect *srcRect,CodecQ quality,
CodecType cType,ImageDescriptionHandle desc,Ptr data)
= {0x7006,0xAAA3};
pascal OSErr FCompressImage(PixMapHandle src,const Rect *srcRect,short colorDepth,
CodecQ quality,CodecType cType,CompressorComponent codec,CTabHandle clut,
CodecFlags flags,long bufferSize,FlushProcRecordPtr flushProc,ProgressProcRecordPtr progressProc,
ImageDescriptionHandle desc,Ptr data)
= {0x7007,0xAAA3};
pascal OSErr DecompressImage(Ptr data,ImageDescriptionHandle desc,PixMapHandle dst,
const Rect *srcRect,const Rect *dstRect,short mode,RgnHandle mask)
= {0x7008,0xAAA3};
pascal OSErr FDecompressImage(Ptr data,ImageDescriptionHandle desc,PixMapHandle dst,
const Rect *srcRect,MatrixRecordPtr matrix,short mode,RgnHandle mask,PixMapHandle matte,
const Rect *matteRect,CodecQ accuracy,DecompressorComponent codec,long bufferSize,
DataProcRecordPtr dataProc,ProgressProcRecordPtr progressProc)
= {0x7009,0xAAA3};
pascal OSErr CompressSequenceBegin(ImageSequence *seqID,PixMapHandle src,
PixMapHandle prev,const Rect *srcRect,const Rect *prevRect,short colorDepth,CodecType cType,
CompressorComponent codec,CodecQ spatialQuality,CodecQ temporalQuality,
long keyFrameRate,CTabHandle clut,CodecFlags flags,ImageDescriptionHandle desc)
= {0x700A,0xAAA3};
pascal OSErr CompressSequenceFrame(ImageSequence seqID,PixMapHandle src,
const Rect *srcRect,CodecFlags flags,Ptr data,long *dataSize,unsigned char *similarity,
CompletionProcRecordPtr asyncCompletionProc)
= {0x700B,0xAAA3};
pascal OSErr DecompressSequenceBegin(ImageSequence *seqID,ImageDescriptionHandle desc,
CGrafPtr port,GDHandle gdh,const Rect *srcRect,MatrixRecordPtr matrix,short mode,
RgnHandle mask,CodecFlags flags,CodecQ accuracy,DecompressorComponent codec)
= {0x700D,0xAAA3};
pascal OSErr DecompressSequenceFrame(ImageSequence seqID,Ptr data,CodecFlags inFlags,
CodecFlags *outFlags,CompletionProcRecordPtr asyncCompletionProc)
= {0x700E,0xAAA3};
pascal OSErr SetDSequenceMatrix(ImageSequence seqID,MatrixRecordPtr matrix)
= {0x7010,0xAAA3};
pascal OSErr SetDSequenceMatte(ImageSequence seqID,PixMapHandle matte,const Rect *matteRect)
= {0x7011,0xAAA3};
pascal OSErr SetDSequenceMask(ImageSequence seqID,RgnHandle mask)
= {0x7012,0xAAA3};
pascal OSErr SetDSequenceTransferMode(ImageSequence seqID,short mode,const RGBColor *opColor)
= {0x7013,0xAAA3};
pascal OSErr SetDSequenceDataProc(ImageSequence seqID,DataProcRecordPtr dataProc,
long bufferSize)
= {0x7014,0xAAA3};
pascal OSErr SetDSequenceAccuracy(ImageSequence seqID,CodecQ accuracy)
= {0x7034,0xAAA3};
pascal OSErr SetDSequenceSrcRect(ImageSequence seqID,const Rect *srcRect)
= {0x7035,0xAAA3};
pascal OSErr GetDSequenceImageBuffer(ImageSequence seqID,GWorldPtr *gworld)
= {0x7015,0xAAA3};
pascal OSErr GetDSequenceScreenBuffer(ImageSequence seqID,GWorldPtr *gworld)
= {0x7016,0xAAA3};
pascal OSErr SetCSequenceQuality(ImageSequence seqID,CodecQ spatialQuality,
CodecQ temporalQuality)
= {0x7017,0xAAA3};
pascal OSErr SetCSequencePrev(ImageSequence seqID,PixMapHandle prev,const Rect *prevRect)
= {0x7018,0xAAA3};
pascal OSErr SetCSequenceFlushProc(ImageSequence seqID,FlushProcRecordPtr flushProc,
long bufferSize)
= {0x7033,0xAAA3};
pascal OSErr SetCSequenceKeyFrameRate(ImageSequence seqID,long keyframerate)
= {0x7036,0xAAA3};
pascal OSErr GetCSequencePrevBuffer(ImageSequence seqID,GWorldPtr *gworld)
= {0x7019,0xAAA3};
pascal OSErr CDSequenceBusy(ImageSequence seqID)
= {0x701A,0xAAA3};
pascal OSErr CDSequenceEnd(ImageSequence seqID)
= {0x701B,0xAAA3};
pascal OSErr GetCompressedImageSize(ImageDescriptionHandle desc,Ptr data,
long bufferSize,DataProcRecordPtr dataProc,long *dataSize)
= {0x701C,0xAAA3};
pascal OSErr GetSimilarity(PixMapHandle src,const Rect *srcRect,ImageDescriptionHandle desc,
Ptr data,Fixed *similarity)
= {0x701D,0xAAA3};
pascal OSErr GetImageDescriptionCTable(ImageDescriptionHandle desc,CTabHandle *ctable)
= {0x701E,0xAAA3};
pascal OSErr SetImageDescriptionCTable(ImageDescriptionHandle desc,CTabHandle ctable)
= {0x701F,0xAAA3};
pascal OSErr GetImageDescriptionExtension(ImageDescriptionHandle desc,Handle *extension,
long idType,long index)
= {0x7020,0xAAA3};
pascal OSErr SetImageDescriptionExtension(ImageDescriptionHandle desc,Handle extension,
long idType)
= {0x7021,0xAAA3};
pascal OSErr FindCodec(CodecType cType,CodecComponent specCodec,CompressorComponent *compressor,
DecompressorComponent *decompressor)
= {0x7023,0xAAA3};
pascal OSErr CompressPicture(PicHandle srcPicture,PicHandle dstPicture,
CodecQ quality,CodecType cType)
= {0x7024,0xAAA3};
pascal OSErr FCompressPicture(PicHandle srcPicture,PicHandle dstPicture,
short colorDepth,CTabHandle clut,CodecQ quality,sBoolean doDither,sBoolean compressAgain,
ProgressProcRecordPtr progressProc,CodecType cType,CompressorComponent codec)
= {0x7025,0xAAA3};
pascal OSErr CompressPictureFile(short srcRefNum,short dstRefNum,CodecQ quality,
CodecType cType)
= {0x7026,0xAAA3};
pascal OSErr FCompressPictureFile(short srcRefNum,short dstRefNum,short colorDepth,
CTabHandle clut,CodecQ quality,sBoolean doDither,sBoolean compressAgain,
ProgressProcRecordPtr progressProc,CodecType cType,CompressorComponent codec)
= {0x7027,0xAAA3};
pascal OSErr GetPictureFileHeader(short refNum,Rect *frame,OpenCPicParams *header)
= {0x7028,0xAAA3};
pascal OSErr DrawPictureFile(short refNum,const Rect *frame,ProgressProcRecordPtr progressProc)
= {0x7029,0xAAA3};
pascal OSErr DrawTrimmedPicture(PicHandle srcPicture,const Rect *frame,RgnHandle trimMask,
sBoolean doDither,ProgressProcRecordPtr progressProc)
= {0x702E,0xAAA3};
pascal OSErr DrawTrimmedPictureFile(short srcRefnum,const Rect *frame,RgnHandle trimMask,
sBoolean doDither,ProgressProcRecordPtr progressProc)
= {0x702F,0xAAA3};
pascal OSErr MakeThumbnailFromPicture(PicHandle picture,short colorDepth,
PicHandle thumbnail,ProgressProcRecordPtr progressProc)
= {0x702A,0xAAA3};
pascal OSErr MakeThumbnailFromPictureFile(short refNum,short colorDepth,
PicHandle thumbnail,ProgressProcRecordPtr progressProc)
= {0x702B,0xAAA3};
pascal OSErr MakeThumbnailFromPixMap(PixMapHandle src,const Rect *srcRect,short colorDepth,
PicHandle thumbnail,ProgressProcRecordPtr progressProc)
= {0x702C,0xAAA3};
pascal OSErr TrimImage(ImageDescriptionHandle desc,Ptr inData,long inBufferSize,
DataProcRecordPtr dataProc,Ptr outData,long outBufferSize,FlushProcRecordPtr flushProc,
Rect *trimRect,ProgressProcRecordPtr progressProc)
= {0x702D,0xAAA3};
pascal OSErr ConvertImage(ImageDescriptionHandle srcDD,Ptr srcData,short colorDepth,
CTabHandle clut,CodecQ accuracy,CodecQ quality,CodecType cType,CodecComponent codec,
ImageDescriptionHandle dstDD,Ptr dstData)
= {0x7030,0xAAA3};
pascal OSErr MakeDitherTable(GDHandle gdev,DTabHandle *ditherTable)
= {0x7031,0xAAA3};
pascal OSErr DisposeDitherTable(DTabHandle ditherTable)
= {0x7032,0xAAA3};
pascal void
StdPix(PixMapPtr src,const Rect *srcRect,MatrixRecordPtr matrix,short mode,
RgnHandle mask,PixMapPtr matte,const Rect *matteRect,short flags)
= {0x700C,0xAAA3};
pascal OSErr GetCompressedPixMapInfo(PixMapPtr pix,ImageDescriptionHandle *desc,
Ptr *data,long *bufferSize,DataProcRecord *dataProc,ProgressProcRecord *progressProc)
= {0x7037,0xAAA3};
pascal OSErr SetCompressedPixMapInfo(PixMapPtr pix,ImageDescriptionHandle desc,
Ptr data,long bufferSize,DataProcRecordPtr dataProc,ProgressProcRecordPtr progressProc)
= {0x7038,0xAAA3};
pascal OSErr TransformRgn(MatrixRecordPtr mp,RgnHandle r)
= {0x7039,0xAAA3};
#ifdef __cplusplus
}
#endif
enum {
identityMatrixType = 0x00, /* result if matrix is identity */
translateMatrixType = 0x01, /* result if matrix translates */
scaleMatrixType = 0x02, /* result if matrix scales */
scaleTranslateMatrixType = 0x03, /* result if matrix scales and translates */
linearMatrixType = 0x04, /* result if matrix is general 2 x 2 */
linearTranslateMatrixType = 0x05, /* result if matrix is general 2 x 2 and translates */
perspectiveMatrixType = 0x06 /* result if matrix is general 3 x 3 */
};
typedef unsigned char MatrixFlags;
#ifdef __cplusplus
extern "C" {
#endif
pascal short GetMatrixType(MatrixRecordPtr m)
= {0x7014,0xABC2};
pascal void CopyMatrix(MatrixRecordPtr m1,MatrixRecord *m2)
= {0x7020,0xABC2};
pascal Boolean EqualMatrix(MatrixRecordPtr m1,MatrixRecordPtr m2)
= {0x7021,0xABC2};
pascal void SetIdentityMatrix(MatrixRecord *matrix)
= {0x7015,0xABC2};
pascal void TranslateMatrix(MatrixRecord *m,Fixed deltaH,Fixed deltaV)
= {0x7019,0xABC2};
pascal void RotateMatrix(MatrixRecord *m,Fixed degrees,Fixed aboutX,Fixed aboutY)
= {0x7016,0xABC2};
pascal void ScaleMatrix(MatrixRecord *m,Fixed scaleX,Fixed scaleY,Fixed aboutX,
Fixed aboutY)
= {0x7017,0xABC2};
pascal void SkewMatrix(MatrixRecord *m,Fixed skewX,Fixed skewY,Fixed aboutX,
Fixed aboutY)
= {0x7018,0xABC2};
pascal OSErr TransformFixedPoints(MatrixRecordPtr m,FixedPoint *fpt,long count)
= {0x7022,0xABC2};
pascal OSErr TransformPoints(MatrixRecordPtr mp,Point *pt1,long count)
= {0x7023,0xABC2};
pascal Boolean TransformFixedRect(MatrixRecordPtr m,FixedRect *fr,FixedPoint *fpp)
= {0x7024,0xABC2};
pascal Boolean TransformRect(MatrixRecordPtr m,Rect *r,FixedPoint *fpp)
= {0x7025,0xABC2};
pascal Boolean InverseMatrix(MatrixRecordPtr m,MatrixRecord *im)
= {0x701C,0xABC2};
pascal void ConcatMatrix(MatrixRecordPtr a,MatrixRecord *b)
= {0x701B,0xABC2};
pascal void RectMatrix(MatrixRecord *matrix,Rect *srcRect,Rect *dstRect)
= {0x701E,0xABC2};
pascal void MapMatrix(MatrixRecord *matrix,Rect *fromRect,Rect *toRect)
= {0x701D,0xABC2};
#ifdef __cplusplus
}
#endif
#ifdef __cplusplus
extern "C" {
#endif
/* Standard Preview */
pascal void SFGetFilePreview(Point where,
ConstStr255Param prompt,
FileFilterProcPtr fileFilter,
short numTypes,
SFTypeList typeList,
DlgHookProcPtr dlgHook,
SFReply *reply)
= {0x303C,65,0xAAA3};
pascal void SFPGetFilePreview(Point where,
ConstStr255Param prompt,
FileFilterProcPtr fileFilter,
short numTypes,
SFTypeList typeList,
DlgHookProcPtr dlgHook,
SFReply *reply,
short dlgID,
ModalFilterProcPtr filterProc)
= {0x303C,66,0xAAA3};
pascal void StandardGetFilePreview(FileFilterProcPtr fileFilter,
short numTypes,
SFTypeList typeList,
StandardFileReply *reply)
= {0x303C,67,0xAAA3};
pascal void CustomGetFilePreview(FileFilterYDProcPtr fileFilter,
short numTypes,
SFTypeList typeList,
StandardFileReply *reply,
short dlgID,
Point where,
DlgHookYDProcPtr dlgHook,
ModalFilterYDProcPtr filterProc,
short *activeList,
ActivateYDProcPtr activateProc,
void *yourDataPtr)
= {0x303C,68,0xAAA3};
pascal OSErr MakeFilePreview(short resRefNum, ProgressProcRecordPtr progress)
= {0x303C,69,0xAAA3};
pascal OSErr AddFilePreview(short resRefNum, OSType previewType, Handle previewData)
= {0x303C,70,0xAAA3};
#ifdef __cplusplus
}
#endif
enum {
sfpItemPreviewAreaUser = 11,
sfpItemPreviewStaticText = 12,
sfpItemPreviewDividerUser = 13,
sfpItemCreatePreviewButton = 14,
sfpItemShowPreviewButton = 15
};
struct PreviewResourceRecord {
unsigned long modDate;
short version;
OSType resType;
short resID;
};
typedef struct PreviewResourceRecord PreviewResourceRecord;
typedef PreviewResourceRecord *PreviewResourcePtr, **PreviewResource;
#endif