/*********************************************************/ /* This source code copyright (c) 1991-2001, Aaron Giles */ /* See the Read Me file for licensing information. */ /* Contact email: mac@aarongiles.com */ /*********************************************************/ #ifndef __JPEGVIEWPLUGIN__ #define __JPEGVIEWPLUGIN__ /* Function descriptions: --------------------------------------------------------------------------------------- plugInAbout: Display the plug-in's about box --> plugInResFile file specification record of the plug-in --> plugInGlobals handle to the plug-in's globals (from plugInOpen) returns: noErr -- initialization was successful memFullErr -- not enough memory to identify the image other errors -- any other problems --------------------------------------------------------------------------------------- plugInInitialize: Initialize the plug in; called once when the plug-in is initialized --> plugInResFile file specification record of the plug-in <-- plugInInfo handle to a plug-in information record <-- plugInGlobals handle to the plug-in's globals returns: noErr -- initialization was successful memFullErr -- not enough memory to initialize the plug-in errInitializeFailed -- initialization failed --------------------------------------------------------------------------------------- plugInIdentify: Attempt to identify the image --> plugInResFile file specification record of the plug-in --> plugInGlobals handle to the plug-in's globals (from plugInOpen) <--> imageData handle to the currently-loaded data; guaranteed to be at least 1024 bytes long; more can be loaded if necessary --> dfRefNum reference number of the file's data fork --> imageFile file specification record of the file returns: noErr -- the image was identified correctly memFullErr -- not enough memory to identify the image errInvalidImage -- the image was not identified other errors -- error reading the file --------------------------------------------------------------------------------------- plugInLoad: Load the image data --> plugInResFile file specification record of the plug-in --> plugInGlobals handle to the plug-in's globals (from plugInOpen) <--> imageData handle to the image data; initially contains data from the data fork --> dfRefNum reference number of the file's data fork --> imageFile file specification record of the file returns: noErr -- the image was loaded successfully memFullErr -- not enough memory to load the image errInvalidImage -- the image was not identified other errors -- error reading the file --------------------------------------------------------------------------------------- plugInOpen: Open the image after loading, by pulling vital information from the data --> plugInResFile file specification record of the plug-in --> plugInGlobals handle to the plug-in's globals (from plugInOpen) <-- imageGlobals handle to the plug-in's globals for this image <-- horizontalDPI horizontal resolution of the image (in DPI) as a Fixed <-- verticalDPI vertical resolution of the image (in DPI) as a Fixed <-- globalRect rectangle, in pixels, of the full-sized image <-- croppedRect rectangle, in pixels, of the initial cropped area <-- imageDepth depth of the image, or 32+depth for grayscale images <-- imageColors handle to a color table containing the image colors, or nil if none <-- compressionType index in the plugInInfo record of the compression info <-- compressionDesc description of the compression (as seen in the stats), or nil to take the description from the plugInInfo <-- imageComments handle to the image's comments returns: noErr -- the image was recognized successfully memFullErr -- not enough memory to open the image errInvalidImage -- an error was found in the image data other errors -- any other problems --------------------------------------------------------------------------------------- plugInDraw: Draw the image to the current port --> plugInResFile file specification record of the plug-in --> plugInGlobals handle to the plug-in's globals (from plugInOpen) --> imageGlobals handle to the plug-in's globals for this image --> imageData handle to the image data --> horizontalDPI horizontal resolution of the image (in DPI) as a Fixed --> verticalDPI vertical resolution of the image (in DPI) as a Fixed --> globalRect rectangle, in pixels, of the full-sized image --> croppedRect rectangle, in pixels, of the initial cropped area --> imageDepth depth of the image, or 32+depth for grayscale images --> imageColors handle to a color table containing the image colors, or nil if none --> compressionType index in the plugInInfo record of the compression info --> imageComments handle to the image's comments --> progressProc a progress procedure record; call this occasionally to update the progress display returns: noErr -- the image was drawn successfully memFullErr -- not enough memory to draw the image errInvalidImage -- an error was found in the image data other errors -- any other problems --------------------------------------------------------------------------------------- plugInConvert: Convert the image to a different format --> plugInResFile file specification record of the plug-in --> plugInGlobals handle to the plug-in's globals (from plugInOpen) --> imageGlobals handle to the plug-in's globals for this image ... (not finished yet) */ typedef unsigned short PlugInFlags; typedef unsigned short CompressionFlags; typedef OSErr PlugInError; typedef struct CompressionInfo { Str31 compressionName; // the name as it should appear in the menu CompressionFlags compressionParams; // the compression support flags } CompressionInfo, *CompressionInfoPtr, **CompressionInfoHandle; typedef struct PlugInInfo { PlugInFlags plugInParams; // the plug-in's parameters short compressionMethods; // the number of compression methods supported CompressionInfo compressionInfo[1]; // list of compression info records } PlugInInfo, *PlugInInfoPtr, **PlugInInfoHandle; typedef struct PlugInData { FSSpec plugInResFile; // file specification of the resource file Handle plugInGlobals; // handle to the plug-in's globals PlugInInfoHandle plugInInfo; // handle to the plug-in information Handle imageData; // handle to the current image data short dfRefNum; // reference number of the file's data fork FSSpec imageFile; // file specification record of the image file Handle imageGlobals; // handle to the plug-in's image globals Fixed horizontalDPI; // horizontal resolution of the image Fixed verticalDPI; // vertical resolution of the image Rect globalRect; // rectangle of the full-sized image Rect croppedRect; // rectangle of the initial cropped area short imageDepth; // depth of the image, or 32+depth for grays CTabHandle imageColors; // handle to the image color table short compressionType; // index in the plugInInfo of compression Str64 compressionDesc; // description of the compression (for stats) Handle imageComments; // handle to the image's comments NestedProgress drawProgress; // the progress function for drawing Handle drawPrivates; // private data structure for drawing } PlugInData, *PlugInDataPtr, **PlugInDataHandle; enum { pifSupportsOpening = 0x0001, // i.e., identify, load, draw pifSupportsConverting = 0x0002, // i.e., convert, save pifSupportsCompressing = 0x0004, // i.e., compress, save pifSupportsPreviews = 0x0008, // should we offer preview option? pifSupportsReducedColors = 0x0010, // should we offer color reduction saving? }; enum { cfCanSaveInMillions = 0x0001, // can we compress in millions of colors? cfCanSaveInThousands = 0x0002, // can we compress in thousands of colors? cfCanSaveIn256Colors = 0x0004, // can we compress in 256 colors? cfCanSaveIn256Grays = 0x0008, // can we compress in 256 grays? }; enum { errInvalidImage = 1, errInitializeFailed = 2, errCantConvert = 3 }; // Examples:JPEG = pifSupportsOpening + pifSupportsSaving + pifSupportsPreviews + // pifSupportsLossyCompression + pifCanSaveInMillions + // pifCanSaveIn256Grays // // PICT = pifSupportsOpening + pifSupportsSaving + pifSupportsPreviews + // pifSupportsReducedColors + pifSupportsLosslessCompression + // pifSupportsLossyCompression + pifSupportsNoCompression + // pifSupportsMultipleCompression + pifCanSaveInMillions + // pifCanSaveInThousands + pifCanSaveIn256Colors + pifCanSaveIn256Grays // // GIF = pifSupportsOpening + pifSupportsSaving + // pifSupportsLosslessCompression + pifCanSaveIn256Colors enum { plugInAbout, plugInInitialize, plugInIdentify, plugInLoad, plugInOpen, plugInDraw, plugInConvert, plugInCompress, plugInSave, plugInClose, plugInQuit }; typedef pascal OSErr (*PlugInDispatcher)(short selector, PlugInDataHandle theData); #endif