JPEGView/Headers/JPEGViewTypes.h

1 line
7.5 KiB
C

/*********************************************************/
/* 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 <Files.h>
#include <ImageCompression.h>
#include <Palettes.h>
#include <QDOffscreen.h>
#include <QuickDraw.h>
#include <Types.h>
#include <Windows.h>
#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