/*********************************************************/ /* This source code copyright (c) 1991-2001, Aaron Giles */ /* See the Read Me file for licensing information. */ /* Contact email: mac@aarongiles.com */ /*********************************************************/ #ifndef __JPEGVIEWTYPES__ #define __JPEGVIEWTYPES__ #include #include #include #include #include #include #include #include "MarchingAnts.h" typedef unsigned char uchar; typedef unsigned short ushort; typedef unsigned long ulong; typedef struct ImageItem ImageItem, *ImagePtr, **ImageHandle; //=================================================================================== // NestedProgress: structure for holding data necessary to do nested progress // procedures. //=================================================================================== typedef struct NestedProgress { ICMProgressProcRecord prog; short level; Fixed begin, end; char aborted; } NestedProgress, *NestedProgressPtr, **NestedProgressHandle; //=================================================================================== // JVPortParams: structure for holding drawing parameters that describe a port. //=================================================================================== typedef struct JVPortParams { CGrafPtr port; // pointer to the port to draw in Rect outer; // bounds of the image, in dest. coordinates Boolean dither; // flag: true to dither when drawing } JVPortParams; //=================================================================================== // JVDrawParams: structs for holding the drawing parameters for a particular drawing // operation, both onscreen and offscreen. //=================================================================================== typedef struct JVDrawParams { struct JVDrawParams **next; // handle to the next in the list Rect bounds; // full-size bounds of image CGrafPtr dummy; // dummy GrafPort for drawing into JVPortParams on; // on-screen drawing parameters JVPortParams off; // off-screen drawing parameters JVPortParams extra; // extra off-screen drawing parameters Boolean quantize; // quantizing flag: true to fill the histogram short quality; // drawing quality to be used Handle privateData; // private data for the plug-in NestedProgress progress; // nested progress procedure record short endprogress; // scan line where we stop drawing progress RgnHandle newupdates; // handle to new updates in the onscreen port PixMapPtr src; // pointer to the source pixmap for DeviceCopy Rect srcrect; // source bounds for DeviceCopy Rect dstrect; // destination bounds for DeviceCopy Rect drawProgressRect; // rectangle used by drawing progress Ptr oldbits; // pointer to the old StdBits routine for FixBits CQDProcs *oldprocs; // pointer to the old set of CQDProcs for FixBits } JVDrawParams, *JVDrawParamsPtr, **JVDrawParamsHandle; typedef Boolean (*idImagePtr)(uchar *theData, long theSize, short refNum, FSSpec *theSpec); typedef OSErr (*OpenImagePtr)(ImageHandle theImage); typedef OSErr (*DrawImagePtr)(Handle theHandle, JVDrawParamsHandle theParams); typedef OSErr (*LoadImagePtr)(short theFile, ImageHandle theImage); typedef OSErr (*SaveImagePtr)(FSSpec *theSpec, Handle theHandle, GWorldPtr thePreview, Rect *theRect, Handle privates); typedef OSErr (*FixImagePtr)(ImageHandle theImage, Handle *finalData, Boolean palette); typedef OSErr (*CloneImagePtr)(ImageHandle origImage, ImageHandle newImage); typedef OSErr (*CloseImagePtr)(ImageHandle theImage); typedef pascal void (*StdBitsProcPtr)(PixMap *, Rect *, Rect *, short, RgnHandle); /* * sMonitorItem = linked list item describing a graphics device * */ typedef struct MonitorItem { struct MonitorItem **next; // pointer to the next monitor RgnHandle gray; // this monitor's contribution to the GrayRgn RgnHandle screen; // the full screen area of this monitor GDHandle device; // handle to the original device record short oldres; // old itable resolution Boolean color; // flag: true if monitor has a greyscale CLUT Boolean full; // flag: true if monitor is currently full-screen short depth; // last depth of the monitor Rect rect; // screen rectangle, in global coordinates } MonitorItem, *MonitorPtr, **MonitorHandle; /* * sImageFormat = list of pointers to various actions that need to be performed on * images; used to simply opening/saving [ImageFormat, ImageFormatPtr] */ typedef struct ImageFormat { OSType inType; // the input file type associated with this guy OSType altInType; // alternate input file type OSType outType; // the output file type associated with this guy Boolean customPreviews; // flag: true if this type has different previews Boolean doesColors; // flag: true if the file type can handle quantization Boolean doesBanded; // flag: true if we can save banded images Boolean positiveID; // flag: true if we can make a positive ID Str31 formatName; // string identifying the format idImagePtr id; // identify the image as this type LoadImagePtr load; // read in the data OpenImagePtr open; // initialize the ImageRecord DrawImagePtr draw; // draw to a destination PixMap FixImagePtr fix; // convert PICT or JFIF to this type SaveImagePtr save; // save the data CloneImagePtr clone; // clone the image CloseImagePtr close; // close the image } ImageFormat, *ImageFormatPtr; enum { kStandardQTPreview = false, kCustomPreview = true, kCanSaveQuantization = true, kCantSaveQuantization = false, kCanSaveBanded = true, kCantSaveBanded = false, kIDIsPositive = true, kIDIsPossible = false }; /* * sImageItem = linked list item for images [ImageItem, ImagePtr, ImageHandle] */ struct ImageItem { unsigned short id; // id to flag this as an ImageItem struct ImageItem **next; // pointer to next image record FSSpec file; // file specification of the original image Handle data; // handle to the actual image data Handle comments; // handle to the comments text, if it exists ImageFormatPtr format; // pointer to the appropriate set of procs OSType compression; // type of compression used Str63 compressionDesc; // string description of compression ImageDescription desc; // image descriptor record, for QT images PaletteHandle palette; // current palette for this image PaletteHandle ipalette; // custom palette for this image, if any PaletteHandle qpalette; // quantized palette for this image, if any short npalette; // the numbered palette of the image GWorldPtr gworld; // offscreen copy of the image WindowPtr window; // window record for this image RgnHandle update; // cached update region MonitorHandle dmon; // pointer to the deepest intersecting monitor MonitorHandle smon; // pointer to the shallowest intersecting monitor short quality; // display quality for this image ulong flags; // set of flags describing the image short depth; // depth of the image (1,2,4,8,16,24,32) Rect grect; // greater rectangle of the image (in pixels) Rect qrect; // QuickDraw rectangle (in 72dpi pixels) Rect crect; // cropped image area, relative to grect (in pixels) Rect wrect; // rectangle of this images's window (in screen pixels) AntsReference ants; // reference to our marching ants short num; // number appended to the end long dtime; // last decompressing & display time Handle privateData; // private data for the plug-in }; #endif