topical media & game development

talk show tell print

lib-of-vs-libs-QTDevWin-CIncludes-GXTypes.h / h



  /*
       File:       GXTypes.h
   
       Contains:   QuickDraw GX object and constant definitions
   
       Version:    Technology: Quickdraw GX 1.1
                   Release:    QuickTime 6.0.2
   
       Copyright:  (c) 1994-2001 by Apple Computer, Inc., all rights reserved.
   
       Bugs?:      For bug reports, consult the following page on
                   the World Wide Web:
   
                       http://developer.apple.com/bugreporter/
   
  */
  ifndef __GXTYPES__
  define __GXTYPES__
  
  ifndef __MACTYPES__
  include <MacTypes.h>
  endif
  
  ifndef __MIXEDMODE__
  include <MixedMode.h>
  endif
  
  ifndef __FIXMATH__
  include <FixMath.h>
  endif
  
  ifndef __GXMATH__
  include <GXMath.h>
  endif
  
  if PRAGMA_ONCE
  #pragma once
  endif
  
  ifdef __cplusplus
  extern "C" {
  endif
  
  if PRAGMA_IMPORT
  #pragma import on
  endif
  
  if PRAGMA_STRUCT_ALIGN
      #pragma options align=mac68k
  #elif PRAGMA_STRUCT_PACKPUSH
      #pragma pack(push, 2)
  #elif PRAGMA_STRUCT_PACK
      #pragma pack(2)
  endif
  
  typedef struct OpaquegxShape*           gxShape;
  typedef struct OpaquegxStyle*           gxStyle;
  typedef struct OpaquegxInk*             gxInk;
  typedef struct OpaquegxTransform*       gxTransform;
  typedef struct OpaquegxTag*             gxTag;
  typedef struct OpaquegxColorSet*        gxColorSet;
  typedef struct OpaquegxColorProfile*    gxColorProfile;
  typedef struct OpaquegxGraphicsClient*  gxGraphicsClient;
  typedef struct OpaquegxViewGroup*       gxViewGroup;
  typedef struct OpaquegxViewPort*        gxViewPort;
  typedef struct OpaquegxViewDevice*      gxViewDevice;
  
  typedef long                            gxColorSpace;
  /* gxShape enumerations */
  enum {
      gxEmptyType                 = 1,
      gxPointType                 = 2,
      gxLineType                  = 3,
      gxCurveType                 = 4,
      gxRectangleType             = 5,
      gxPolygonType               = 6,
      gxPathType                  = 7,
      gxBitmapType                = 8,
      gxTextType                  = 9,
      gxGlyphType                 = 10,
      gxLayoutType                = 11,
      gxFullType                  = 12,
      gxPictureType               = 13
  };
  
  typedef long                            gxShapeType;
  enum {
      gxNoFill                    = 0,
      gxOpenFrameFill             = 1,
      gxFrameFill                 = gxOpenFrameFill,
      gxClosedFrameFill           = 2,
      gxHollowFill                = gxClosedFrameFill,
      gxEvenOddFill               = 3,
      gxSolidFill                 = gxEvenOddFill,
      gxWindingFill               = 4,
      gxInverseEvenOddFill        = 5,
      gxInverseSolidFill          = gxInverseEvenOddFill,
      gxInverseFill               = gxInverseEvenOddFill,
      gxInverseWindingFill        = 6
  };
  
  typedef long                            gxShapeFill;
  enum {
      gxNoAttributes              = 0,
      gxDirectShape               = 0x0001,
      gxRemoteShape               = 0x0002,
      gxCachedShape               = 0x0004,
      gxLockedShape               = 0x0008,
      gxGroupShape                = 0x0010,
      gxMapTransformShape         = 0x0020,
      gxUniqueItemsShape          = 0x0040,
      gxIgnorePlatformShape       = 0x0080,
      gxNoMetricsGridShape        = 0x0100,
      gxDiskShape                 = 0x0200,
      gxMemoryShape               = 0x0400
  };
  
  typedef long                            gxShapeAttribute;
  /* gxShape editing enumerations */
  enum {
      gxBreakNeitherEdit          = 0,
      gxBreakLeftEdit             = 0x0001,
      gxBreakRightEdit            = 0x0002,
      gxRemoveDuplicatePointsEdit = 0x0004
  };
  
  /* if the new first (or last) point exactly matches the point before it in */
  /* the same contour, then remove it) */
  typedef long                            gxEditShapeFlag;
  enum {
      gxSelectToEnd               = -1
  };
  
  define gxSetToNil  (void *)(-1)
  define gxAnyNumber     1
  enum {
      gxCounterclockwiseDirection = 0,
      gxClockwiseDirection        = 1
  };
  
  typedef long                            gxContourDirection;
  /* gxShape structures */
  /* The type 'gxPoint' is defined in <GXMath.h> */
  
  struct gxLine {
      gxPoint                         first;
      gxPoint                         last;
  };
  typedef struct gxLine                   gxLine;
  
  struct gxCurve {
      gxPoint                         first;
      gxPoint                         control;
      gxPoint                         last;
  };
  typedef struct gxCurve                  gxCurve;
  
  struct gxRectangle {
      Fixed                           left;
      Fixed                           top;
      Fixed                           right;
      Fixed                           bottom;
  };
  typedef struct gxRectangle              gxRectangle;
  
  struct gxPolygon {
      long                            vectors;
      gxPoint                         vector[1];
  };
  typedef struct gxPolygon                gxPolygon;
  
  struct gxPolygons {
      long                            contours;
      gxPolygon                       contour[1];
  };
  typedef struct gxPolygons               gxPolygons;
  
  struct gxPath {
      long                            vectors;
      long                            controlBits[1];
      gxPoint                         vector[1];
  };
  typedef struct gxPath                   gxPath;
  
  struct gxPaths {
      long                            contours;
      gxPath                          contour[1];
  };
  typedef struct gxPaths                  gxPaths;
  struct gxBitmap {
      char            *image;     /* pointer to pixels */
      long            width;      /* width in pixels */
      long            height;     /* height in pixels */
      long            rowBytes;   /* width in bytes */
      long            pixelSize;      /* physical bits per pixel */
      gxColorSpace    space;
      gxColorSet      set;
      gxColorProfile  profile;
  };
  typedef struct gxBitmap gxBitmap;
  
  struct gxLongRectangle {
      long                            left;
      long                            top;
      long                            right;
      long                            bottom;
  };
  typedef struct gxLongRectangle          gxLongRectangle;
  /* gxStyle enumerations */
  enum {
      gxCenterFrameStyle          = 0,
      gxSourceGridStyle           = 0x0001,
      gxDeviceGridStyle           = 0x0002,
      gxInsideFrameStyle          = 0x0004,
      gxOutsideFrameStyle         = 0x0008,
      gxAutoInsetStyle            = 0x0010
  };
  
  typedef long                            gxStyleAttribute;
  enum {
      gxBendDash                  = 0x0001,
      gxBreakDash                 = 0x0002,
      gxClipDash                  = 0x0004,
      gxLevelDash                 = 0x0008,
      gxAutoAdvanceDash           = 0x0010
  };
  
  typedef long                            gxDashAttribute;
  enum {
      gxPortAlignPattern          = 0x0001,
      gxPortMapPattern            = 0x0002
  };
  
  typedef long                            gxPatternAttribute;
  enum {
      gxSharpJoin                 = 0x0000,
      gxCurveJoin                 = 0x0001,
      gxLevelJoin                 = 0x0002,
      gxSnapJoin                  = 0x0004
  };
  
  typedef long                            gxJoinAttribute;
  enum {
      gxLevelStartCap             = 0x0001,
      gxLevelEndCap               = 0x0002
  };
  
  typedef long                            gxCapAttribute;
  enum {
      gxAutoAdvanceText           = 0x0001,
      gxNoContourGridText         = 0x0002,
      gxNoMetricsGridText         = 0x0004,
      gxAnchorPointsText          = 0x0008,
      gxVerticalText              = 0x0010,
      gxNoOpticalScaleText        = 0x0020
  };
  
  typedef long                            gxTextAttribute;
  enum {
      gxLeftJustify               = 0,
      gxCenterJustify             = fract1 / 2,
      gxRightJustify              = fract1,
      gxFillJustify               = -1
  };
  
  enum {
      gxUnderlineAdvanceLayer     = 0x0001,                       /* a gxLine is drawn through the advances */
      gxSkipWhiteSpaceLayer       = 0x0002,                       /* except characters describing white space */
      gxUnderlineIntervalLayer    = 0x0004,                       /* (+ gxStringLayer) a gxLine is drawn through the gaps between advances */
      gxUnderlineContinuationLayer = 0x0008,                      /* (+ gxStringLayer) join this underline with another face */
      gxWhiteLayer                = 0x0010,                       /* the layer draws to white instead of black */
      gxClipLayer                 = 0x0020,                       /* the characters define a clip */
      gxStringLayer               = 0x0040                        /* all characters in run are combined */
  };
  
  typedef long                            gxLayerFlag;
  /* gxStyle structures */
  
  struct gxFaceLayer {
      gxShapeFill                     outlineFill;                /* outline framed or filled */
      gxLayerFlag                     flags;                      /* various additional effects */
      gxStyle                         outlineStyle;               /* outline */
      gxTransform                     outlineTransform;           /* italic, condense, extend */
      gxPoint                         boldOutset;                 /* bold */
  };
  typedef struct gxFaceLayer              gxFaceLayer;
  
  struct gxTextFace {
      long                            faceLayers;                 /* layer to implement shadow */
      gxMapping                       advanceMapping;             /* algorithmic change to advance width */
      gxFaceLayer                     faceLayer[1];               /* zero or more face layers describing the face */
  };
  typedef struct gxTextFace               gxTextFace;
  
  struct gxJoinRecord {
      gxJoinAttribute                 attributes;
      gxShape                         join;
      Fixed                           miter;
  };
  typedef struct gxJoinRecord             gxJoinRecord;
  
  struct gxDashRecord {
      gxDashAttribute                 attributes;
      gxShape                         dash;                       /* similar to pattern, except rotated to gxLine slope */
      Fixed                           advance;                    /* specifies repeating frequency of dash */
      Fract                           phase;                      /* specifies offset into the gxPath to start dashing */
      Fixed                           scale;                      /* specifies height of dash to be mapped to penWidth */
  };
  typedef struct gxDashRecord             gxDashRecord;
  
  struct gxPatternRecord {
      gxPatternAttribute              attributes;
      gxShape                         pattern;
      gxPoint                         u;
      gxPoint                         v;
  };
  typedef struct gxPatternRecord          gxPatternRecord;
  
  struct gxCapRecord {
      gxCapAttribute                  attributes;
      gxShape                         startCap;
      gxShape                         endCap;
  };
  typedef struct gxCapRecord              gxCapRecord;
  
  /* gxInk enumerations */
  enum {
      gxPortAlignDitherInk        = 0x0001,
      gxForceDitherInk            = 0x0002,
      gxSuppressDitherInk         = 0x0004,
      gxSuppressHalftoneInk       = 0x0008
  };
  
  typedef long                            gxInkAttribute;
  enum {
      gxNoMode                    = 0,
      gxCopyMode                  = 1,
      gxAddMode                   = 2,
      gxBlendMode                 = 3,
      gxMigrateMode               = 4,
      gxMinimumMode               = 5,
      gxMaximumMode               = 6,
      gxHighlightMode             = 7,
      gxAndMode                   = 8,
      gxOrMode                    = 9,
      gxXorMode                   = 10,
      gxRampAndMode               = 11,
      gxRampOrMode                = 12,
      gxRampXorMode               = 13,
      gxOverMode                  = 14,                           /* Alpha channel modes          */
      gxAtopMode                  = 15,                           /* Note: In England = Beta channel modes   */
      gxExcludeMode               = 16,
      gxFadeMode                  = 17
  };
  
  typedef unsigned char                   gxComponentMode;
  enum {
      gxRejectSourceTransfer      = 0x0001,                       /* at least one component must be out of range       */
      gxRejectDeviceTransfer      = 0x0002,                       /* at least one component must be out of range       */
      gxSingleComponentTransfer   = 0x0004                        /* duplicate gxTransferComponent[0] for all components in transfer */
  };
  
  typedef long                            gxTransferFlag;
  enum {
      gxOverResultComponent       = 0x01,                         /* & result gxColor with 0xFFFF before clamping   */
      gxReverseComponent          = 0x02                          /* reverse source and device before moding       */
  };
  
  typedef unsigned char                   gxComponentFlag;
  /* gxInk structures */
  
  struct gxTransferComponent {
      gxComponentMode                 mode;                       /* how the component is operated upon */
      gxComponentFlag                 flags;                      /* flags for each component   */
      gxColorValue                    sourceMinimum;
      gxColorValue                    sourceMaximum;              /* input filter range */
      gxColorValue                    deviceMinimum;
      gxColorValue                    deviceMaximum;              /* output filter range */
      gxColorValue                    clampMinimum;
      gxColorValue                    clampMaximum;               /* output clamping range */
      gxColorValue                    operand;                    /* ratio for blend, step for migrate, gxColor for highlight   */
  };
  typedef struct gxTransferComponent      gxTransferComponent;
  struct gxTransferMode {
      gxColorSpace        space;          /* the gxColor-space the transfer mode is to operate in */
      gxColorSet          set;
      gxColorProfile      profile;
      Fixed               sourceMatrix[5][4];
      Fixed               deviceMatrix[5][4];
      Fixed               resultMatrix[5][4];
      gxTransferFlag      flags;
      gxTransferComponent component[4];  /* how each component is operated upon           */
  };
  typedef struct gxTransferMode gxTransferMode;
  
  /* gxColor space enumerations */
  enum {
      gxNoColorPacking            = 0x0000,                       /* 16 bits per channel */
      gxAlphaSpace                = 0x0080,                       /* space includes alpha channel */
      gxWord5ColorPacking         = 0x0500,                       /* 5 bits per channel, right-justified */
      gxLong8ColorPacking         = 0x0800,                       /* 8 bits per channel, right-justified */
      gxLong10ColorPacking        = 0x0A00,                       /* 10 bits per channel, right-justified */
      gxAlphaFirstPacking         = 0x1000                        /* alpha channel is the first field in the packed space */
  };
  
  enum {
      gxNoSpace                   = 0,
      gxRGBSpace                  = 1,
      gxCMYKSpace                 = 2,
      gxHSVSpace                  = 3,
      gxHLSSpace                  = 4,
      gxYXYSpace                  = 5,
      gxXYZSpace                  = 6,
      gxLUVSpace                  = 7,
      gxLABSpace                  = 8,
      gxYIQSpace                  = 9,
      gxNTSCSpace                 = gxYIQSpace,
      gxPALSpace                  = gxYIQSpace,
      gxGraySpace                 = 10,
      gxIndexedSpace              = 11,
      gxRGBASpace                 = gxRGBSpace + gxAlphaSpace,
      gxGrayASpace                = gxGraySpace + gxAlphaSpace,
      gxRGB16Space                = gxWord5ColorPacking + gxRGBSpace,
      gxRGB32Space                = gxLong8ColorPacking + gxRGBSpace,
      gxARGB32Space               = gxLong8ColorPacking + gxAlphaFirstPacking + gxRGBASpace,
      gxCMYK32Space               = gxLong8ColorPacking + gxCMYKSpace,
      gxHSV32Space                = gxLong10ColorPacking + gxHSVSpace,
      gxHLS32Space                = gxLong10ColorPacking + gxHLSSpace,
      gxYXY32Space                = gxLong10ColorPacking + gxYXYSpace,
      gxXYZ32Space                = gxLong10ColorPacking + gxXYZSpace,
      gxLUV32Space                = gxLong10ColorPacking + gxLUVSpace,
      gxLAB32Space                = gxLong10ColorPacking + gxLABSpace,
      gxYIQ32Space                = gxLong10ColorPacking + gxYIQSpace,
      gxNTSC32Space               = gxYIQ32Space,
      gxPAL32Space                = gxYIQ32Space
  };
  
  /* gxColor space structures */
  
  struct gxRGBColor {
      gxColorValue                    red;
      gxColorValue                    green;
      gxColorValue                    blue;
  };
  typedef struct gxRGBColor               gxRGBColor;
  
  struct gxRGBAColor {
      gxColorValue                    red;
      gxColorValue                    green;
      gxColorValue                    blue;
      gxColorValue                    alpha;
  };
  typedef struct gxRGBAColor              gxRGBAColor;
  
  struct gxHSVColor {
      gxColorValue                    hue;
      gxColorValue                    saturation;
      gxColorValue                    value;
  };
  typedef struct gxHSVColor               gxHSVColor;
  
  struct gxHLSColor {
      gxColorValue                    hue;
      gxColorValue                    lightness;
      gxColorValue                    saturation;
  };
  typedef struct gxHLSColor               gxHLSColor;
  
  struct gxCMYKColor {
      gxColorValue                    cyan;
      gxColorValue                    magenta;
      gxColorValue                    yellow;
      gxColorValue                    black;
  };
  typedef struct gxCMYKColor              gxCMYKColor;
  
  struct gxXYZColor {
      gxColorValue                    x;
      gxColorValue                    y;
      gxColorValue                    z;
  };
  typedef struct gxXYZColor               gxXYZColor;
  
  struct gxYXYColor {
      gxColorValue                    capY;
      gxColorValue                    x;
      gxColorValue                    y;
  };
  typedef struct gxYXYColor               gxYXYColor;
  
  struct gxLUVColor {
      gxColorValue                    l;
      gxColorValue                    u;
      gxColorValue                    v;
  };
  typedef struct gxLUVColor               gxLUVColor;
  
  struct gxLABColor {
      gxColorValue                    l;
      gxColorValue                    a;
      gxColorValue                    b;
  };
  typedef struct gxLABColor               gxLABColor;
  
  struct gxYIQColor {
      gxColorValue                    y;
      gxColorValue                    i;
      gxColorValue                    q;
  };
  typedef struct gxYIQColor               gxYIQColor;
  
  struct gxGrayAColor {
      gxColorValue                    gray;
      gxColorValue                    alpha;
  };
  typedef struct gxGrayAColor             gxGrayAColor;
  
  typedef long                            gxColorIndex;
  struct gxIndexedColor {
      gxColorIndex    index;
      gxColorSet      set;
  };
  typedef struct gxIndexedColor gxIndexedColor;
  
  struct gxColor {
      gxColorSpace                    space;
      gxColorProfile                  profile;
      union {
          gxCMYKColor                     cmyk;
          gxRGBColor                      rgb;
          gxRGBAColor                     rgba;
          gxHSVColor                      hsv;
          gxHLSColor                      hls;
          gxXYZColor                      xyz;
          gxYXYColor                      yxy;
          gxLUVColor                      luv;
          gxLABColor                      lab;
          gxYIQColor                      yiq;
          gxColorValue                    gray;
          gxGrayAColor                    graya;
          unsigned short                  pixel16;
          unsigned long                   pixel32;
          gxIndexedColor                  indexed;
          gxColorValue                    component[4];
      }                                 element;
  };
  typedef struct gxColor                  gxColor;
  
  /* gxColorSet structures */
  
  union gxSetColor {
      gxCMYKColor                     cmyk;
      gxRGBColor                      rgb;
      gxRGBAColor                     rgba;
      gxHSVColor                      hsv;
      gxHLSColor                      hls;
      gxXYZColor                      xyz;
      gxYXYColor                      yxy;
      gxLUVColor                      luv;
      gxLABColor                      lab;
      gxYIQColor                      yiq;
      gxColorValue                    gray;
      gxGrayAColor                    graya;
      unsigned short                  pixel16;
      unsigned long                   pixel32;
      gxColorValue                    component[4];
  };
  typedef union gxSetColor                gxSetColor;
  /* gxTransform enumerations */
  /* parts of a gxShape considered in hit testing: */
  enum {
      gxNoPart                    = 0,                            /* (in order of evaluation) */
      gxBoundsPart                = 0x0001,
      gxGeometryPart              = 0x0002,
      gxPenPart                   = 0x0004,
      gxCornerPointPart           = 0x0008,
      gxControlPointPart          = 0x0010,
      gxEdgePart                  = 0x0020,
      gxJoinPart                  = 0x0040,
      gxStartCapPart              = 0x0080,
      gxEndCapPart                = 0x0100,
      gxDashPart                  = 0x0200,
      gxPatternPart               = 0x0400,
      gxGlyphBoundsPart           = gxJoinPart,
      gxGlyphFirstPart            = gxStartCapPart,
      gxGlyphLastPart             = gxEndCapPart,
      gxSideBearingPart           = gxDashPart,
      gxAnyPart                   = gxBoundsPart | gxGeometryPart | gxPenPart | gxCornerPointPart | gxControlPointPart | gxEdgePart | gxJoinPart | gxStartCapPart | gxEndCapPart | gxDashPart | gxPatternPart
  };
  
  typedef long                            gxShapePart;
  /* gxTransform structures */
  
  struct gxHitTestInfo {
      gxShapePart                     what;                       /* which part of gxShape */
      long                            index;                      /* control gxPoint index */
      Fixed                           distance;                   /* how far from gxPoint or outside of area click was */
  
                                                                  /* these fields are only set by GXHitTestPicture */
      gxShape                         which;
      gxShape                         containerPicture;           /* picture which contains gxShape hit */
      long                            containerIndex;             /* the index within that picture  */
      long                            totalIndex;                 /* the total index within the root picture */
  };
  typedef struct gxHitTestInfo            gxHitTestInfo;
  /* gxViewPort enumerations */
  enum {
      gxGrayPort                  = 0x0001,
      gxAlwaysGridPort            = 0x0002,
      gxEnableMatchPort           = 0x0004
  };
  
  typedef long                            gxPortAttribute;
  /* gxViewDevice enumerations */
  enum {
      gxDirectDevice              = 0x01,                         /* for the device gxBitmap baseAddr pointer */
      gxRemoteDevice              = 0x02,
      gxInactiveDevice            = 0x04
  };
  
  typedef long                            gxDeviceAttribute;
  enum {
      gxRoundDot                  = 1,
      gxSpiralDot                 = 2,
      gxSquareDot                 = 3,
      gxLineDot                   = 4,
      gxEllipticDot               = 5,
      gxTriangleDot               = 6,
      gxDispersedDot              = 7,
      gxCustomDot                 = 8
  };
  
  typedef long                            gxDotType;
  /* gxViewPort structures */
  enum {
      gxNoTint                    = 0,
      gxLuminanceTint             = 1,                            /* use the luminance of the gxColor */
      gxAverageTint               = 2,                            /* add all the components and divide by the number of components */
      gxMixtureTint               = 3,                            /* find the closest gxColor on the axis between the foreground and background */
      gxComponent1Tint            = 4,                            /* use the value of the first component of the gxColor */
      gxComponent2Tint            = 5,                            /* ... etc. */
      gxComponent3Tint            = 6,
      gxComponent4Tint            = 7
  };
  
  typedef long                            gxTintType;
  
  struct gxHalftone {
      Fixed                           angle;
      Fixed                           frequency;
      gxDotType                       method;
      gxTintType                      tinting;
      gxColor                         dotColor;
      gxColor                         backgroundColor;
      gxColorSpace                    tintSpace;
  };
  typedef struct gxHalftone               gxHalftone;
  
  struct gxHalftoneMatrix {
      Fixed                           dpiX;                       /* intended resolution */
      Fixed                           dpiY;
      long                            width;                      /* width of matrix (in device pixels) */
      long                            height;                     /* height of matrix (in device pixels) */
      long                            tileShift;                  /* shift amount (in samples) for rectangular tiling */
      unsigned short                  samples[1];                 /* samples from 0..MAX(halftone tintSpace) */
  };
  typedef struct gxHalftoneMatrix         gxHalftoneMatrix;
  /* gxViewGroup enumerations */
  define gxAllViewDevices        ((gxViewGroup) 0)
  define gxScreenViewDevices     ((gxViewGroup) 1)
  /* graphics stream constants and structures */
  enum {
      gxOpenReadSpool             = 1,
      gxOpenWriteSpool            = 2,
      gxReadSpool                 = 3,
      gxWriteSpool                = 4,
      gxCloseSpool                = 5
  };
  
  typedef long                            gxSpoolCommand;
  typedef unsigned char                   gxGraphicsOpcode;
  typedef struct gxSpoolBlock             gxSpoolBlock;
  typedef CALLBACK_API_C( long , gxSpoolProcPtr )(gxSpoolCommand command, gxSpoolBlock *block);
  typedef STACK_UPP_TYPE(gxSpoolProcPtr)                          gxSpoolUPP;
  
  struct gxSpoolBlock {
      gxSpoolUPP                      spoolProcedure;             /* these fields are read only */
      void *                          buffer;                     /* source/destination pointer to data */
      long                            bufferSize;                 /* how many bytes for the system to read (flatten) / write (unflatten) */
                                                                  /* these fields are written to (but are not read from) */
      long                            count;                      /* how many bytes for the caller to read (unflatten) /write (flatten) */
      long                            operationSize;              /* operation size (including operand byte) */
      long                            operationOffset;            /* the data offset, if any, within the current operation */
      gxGraphicsOpcode                lastTypeOpcode;             /* type of last created object */
      gxGraphicsOpcode                currentOperation;           /* operation emitted by flatten, or intrepreted by last unflatten */
      gxGraphicsOpcode                currentOperand;             /* e.g., gxTransformTypeOpcode, gxInkTagOpcode */
      unsigned char                   compressed;                 /* one of: gxTwoBitCompressionValues */
  };
  
  if OPAQUE_UPP_TYPES
  if CALL_NOT_IN_CARBON
      EXTERN_API(gxSpoolUPP)
      NewgxSpoolUPP                  (gxSpoolProcPtr          userRoutine);
  
      EXTERN_API(void)
      DisposegxSpoolUPP              (gxSpoolUPP              userUPP);
  
      EXTERN_API(long)
      InvokegxSpoolUPP               (gxSpoolCommand          command,
                                      gxSpoolBlock *          block,
                                      gxSpoolUPP              userUPP);
  
  endif  /* CALL_NOT_IN_CARBON */
  
  else
      enum { uppgxSpoolProcInfo = 0x000003F1 };                       /* 4_bytes Func(4_bytes, 4_bytes) */
      #define NewgxSpoolUPP(userRoutine)                              (gxSpoolUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppgxSpoolProcInfo, GetCurrentArchitecture())
      #define DisposegxSpoolUPP(userUPP)                              DisposeRoutineDescriptor(userUPP)
      #define InvokegxSpoolUPP(command, block, userUPP)               (long)CALL_TWO_PARAMETER_UPP((userUPP), uppgxSpoolProcInfo, (command), (block))
  endif
  /* support for pre-Carbon UPP routines: NewXXXProc and CallXXXProc */
  define NewgxSpoolProc(userRoutine)                             NewgxSpoolUPP(userRoutine)
  define CallgxSpoolProc(userRoutine, command, block)            InvokegxSpoolUPP(command, block, userRoutine)
  
  enum {
      gxFontListFlatten           = 0x01,                         /* if set, generate a gxTag containing list of each gxFont referenced */
      gxFontGlyphsFlatten         = 0x02,                         /* if set, generate a gxTag containing the list of glyphs referenced inside the gxFont */
      gxFontVariationsFlatten     = 0x04,                         /* if set, append the gxTag with separate [variation] coordinates */
      gxBitmapAliasFlatten        = 0x08                          /* if set, open bitmap alias files and flatten out their image data */
  };
  
  typedef long                            gxFlattenFlag;
  /* gxGraphicsClient constants */
  define gxGraphicsSystemClient      (gxGraphicsClient)(-1)
  enum {
      gxStaticHeapClient          = 0x0001
  };
  
  typedef long                            gxClientAttribute;
  /* graphics patching constants */
  enum {
      gxOriginalGraphicsFunction  = -1,
      gxOriginalGraphicsIdentifier = FOUR_CHAR_CODE('grfx')
  };
  
  struct gxBitmapDataSourceAlias {
      unsigned long                   fileOffset;                 /* file offset (in bytes) of top-left pixel */
      unsigned long                   aliasRecordSize;            /* size of alias record below */
      unsigned char                   aliasRecord[1];             /* the actual alias record data */
  };
  typedef struct gxBitmapDataSourceAlias  gxBitmapDataSourceAlias;
  enum {
      gxBitmapFileAliasTagType    = FOUR_CHAR_CODE('bfil'),
      gxPICTFileAliasTagType      = FOUR_CHAR_CODE('pict'),
      gxBitmapFileAliasImageValue = 1L
  };
  
  typedef struct OpaquegxFont*            gxFont;
  enum {
      gxNoPlatform                = 0,
      gxNoScript                  = 0,
      gxNoLanguage                = 0,
      gxNoFontName                = 0,
      gxGlyphPlatform             = -1
  };
  
  enum {
      gxUnicodePlatform           = 1,
      gxMacintoshPlatform         = 2,
      gxReservedPlatform          = 3,
      gxMicrosoftPlatform         = 4,
      gxCustomPlatform            = 5
  };
  
  typedef long                            gxFontPlatform;
  enum {
      gxUnicodeDefaultSemantics   = 1,
      gxUnicodeV1_1Semantics      = 2,
      gxISO10646_1993Semantics    = 3
  };
  
  enum {
      gxRomanScript               = 1,
      gxJapaneseScript            = 2,
      gxTraditionalChineseScript  = 3,
      gxChineseScript             = gxTraditionalChineseScript,
      gxKoreanScript              = 4,
      gxArabicScript              = 5,
      gxHebrewScript              = 6,
      gxGreekScript               = 7,
      gxCyrillicScript            = 8,
      gxRussian                   = gxCyrillicScript,
      gxRSymbolScript             = 9,
      gxDevanagariScript          = 10,
      gxGurmukhiScript            = 11,
      gxGujaratiScript            = 12,
      gxOriyaScript               = 13,
      gxBengaliScript             = 14,
      gxTamilScript               = 15,
      gxTeluguScript              = 16,
      gxKannadaScript             = 17,
      gxMalayalamScript           = 18,
      gxSinhaleseScript           = 19,
      gxBurmeseScript             = 20,
      gxKhmerScript               = 21,
      gxThaiScript                = 22,
      gxLaotianScript             = 23,
      gxGeorgianScript            = 24,
      gxArmenianScript            = 25,
      gxSimpleChineseScript       = 26,
      gxTibetanScript             = 27,
      gxMongolianScript           = 28,
      gxGeezScript                = 29,
      gxEthiopicScript            = gxGeezScript,
      gxAmharicScript             = gxGeezScript,
      gxSlavicScript              = 30,
      gxEastEuropeanRomanScript   = gxSlavicScript,
      gxVietnameseScript          = 31,
      gxExtendedArabicScript      = 32,
      gxSindhiScript              = gxExtendedArabicScript,
      gxUninterpretedScript       = 33
  };
  
  enum {
      gxMicrosoftSymbolScript     = 1,
      gxMicrosoftStandardScript   = 2
  };
  
  enum {
      gxCustom8BitScript          = 1,
      gxCustom816BitScript        = 2,
      gxCustom16BitScript         = 3
  };
  
  typedef long                            gxFontScript;
  enum {
      gxEnglishLanguage           = 1,
      gxFrenchLanguage            = 2,
      gxGermanLanguage            = 3,
      gxItalianLanguage           = 4,
      gxDutchLanguage             = 5,
      gxSwedishLanguage           = 6,
      gxSpanishLanguage           = 7,
      gxDanishLanguage            = 8,
      gxPortugueseLanguage        = 9,
      gxNorwegianLanguage         = 10,
      gxHebrewLanguage            = 11,
      gxJapaneseLanguage          = 12,
      gxArabicLanguage            = 13,
      gxFinnishLanguage           = 14,
      gxGreekLanguage             = 15,
      gxIcelandicLanguage         = 16,
      gxMalteseLanguage           = 17,
      gxTurkishLanguage           = 18,
      gxCroatianLanguage          = 19,
      gxTradChineseLanguage       = 20,
      gxUrduLanguage              = 21,
      gxHindiLanguage             = 22,
      gxThaiLanguage              = 23,
      gxKoreanLanguage            = 24,
      gxLithuanianLanguage        = 25,
      gxPolishLanguage            = 26,
      gxHungarianLanguage         = 27,
      gxEstonianLanguage          = 28,
      gxLettishLanguage           = 29,
      gxLatvianLanguage           = gxLettishLanguage,
      gxSaamiskLanguage           = 30,
      gxLappishLanguage           = gxSaamiskLanguage,
      gxFaeroeseLanguage          = 31,
      gxFarsiLanguage             = 32,
      gxPersianLanguage           = gxFarsiLanguage,
      gxRussianLanguage           = 33,
      gxSimpChineseLanguage       = 34,
      gxFlemishLanguage           = 35,
      gxIrishLanguage             = 36,
      gxAlbanianLanguage          = 37,
      gxRomanianLanguage          = 38,
      gxCzechLanguage             = 39,
      gxSlovakLanguage            = 40,
      gxSlovenianLanguage         = 41,
      gxYiddishLanguage           = 42,
      gxSerbianLanguage           = 43,
      gxMacedonianLanguage        = 44,
      gxBulgarianLanguage         = 45,
      gxUkrainianLanguage         = 46,
      gxByelorussianLanguage      = 47,
      gxUzbekLanguage             = 48,
      gxKazakhLanguage            = 49,
      gxAzerbaijaniLanguage       = 50,
      gxAzerbaijanArLanguage      = 51,
      gxArmenianLanguage          = 52,
      gxGeorgianLanguage          = 53,
      gxMoldavianLanguage         = 54,
      gxKirghizLanguage           = 55,
      gxTajikiLanguage            = 56,
      gxTurkmenLanguage           = 57,
      gxMongolianLanguage         = 58,
      gxMongolianCyrLanguage      = 59,
      gxPashtoLanguage            = 60,
      gxKurdishLanguage           = 61,
      gxKashmiriLanguage          = 62,
      gxSindhiLanguage            = 63,
      gxTibetanLanguage           = 64,
      gxNepaliLanguage            = 65,
      gxSanskritLanguage          = 66,
      gxMarathiLanguage           = 67,
      gxBengaliLanguage           = 68,
      gxAssameseLanguage          = 69,
      gxGujaratiLanguage          = 70,
      gxPunjabiLanguage           = 71,
      gxOriyaLanguage             = 72,
      gxMalayalamLanguage         = 73,
      gxKannadaLanguage           = 74,
      gxTamilLanguage             = 75,
      gxTeluguLanguage            = 76,
      gxSinhaleseLanguage         = 77,
      gxBurmeseLanguage           = 78,
      gxKhmerLanguage             = 79,
      gxLaoLanguage               = 80,
      gxVietnameseLanguage        = 81,
      gxIndonesianLanguage        = 82,
      gxTagalogLanguage           = 83,
      gxMalayRomanLanguage        = 84,
      gxMalayArabicLanguage       = 85,
      gxAmharicLanguage           = 86,
      gxTigrinyaLanguage          = 87,
      gxGallaLanguage             = 88,
      gxOromoLanguage             = gxGallaLanguage,
      gxSomaliLanguage            = 89,
      gxSwahiliLanguage           = 90,
      gxRuandaLanguage            = 91,
      gxRundiLanguage             = 92,
      gxChewaLanguage             = 93,
      gxMalagasyLanguage          = 94,
      gxEsperantoLanguage         = 95,
      gxWelshLanguage             = 129,
      gxBasqueLanguage            = 130,
      gxCatalanLanguage           = 131,
      gxLatinLanguage             = 132,
      gxQuechuaLanguage           = 133,
      gxGuaraniLanguage           = 134,
      gxAymaraLanguage            = 135,
      gxTatarLanguage             = 136,
      gxUighurLanguage            = 137,
      gxDzongkhaLanguage          = 138,
      gxJavaneseRomLanguage       = 139,
      gxSundaneseRomLanguage      = 140
  };
  
  typedef long                            gxFontLanguage;
  enum {
      gxCopyrightFontName         = 1,
      gxFamilyFontName            = 2,
      gxStyleFontName             = 3,
      gxUniqueFontName            = 4,
      gxFullFontName              = 5,
      gxVersionFontName           = 6,
      gxPostscriptFontName        = 7,
      gxTrademarkFontName         = 8,
      gxManufacturerFontName      = 9,
      gxLastReservedFontName      = 256
  };
  
  typedef long                            gxFontName;
  typedef long                            gxFontTableTag;
  typedef long                            gxFontVariationTag;
  typedef long                            gxFontFormatTag;
  typedef long                            gxFontStorageTag;
  typedef gxFontVariationTag              gxFontDescriptorTag;
  
  struct gxFontVariation {
      gxFontVariationTag              name;
      Fixed                           value;
  };
  typedef struct gxFontVariation          gxFontVariation;
  
  typedef gxFontVariation                 gxFontDescriptor;
  
  struct gxFontFeatureSetting {
      unsigned short                  setting;
      unsigned short                  nameID;
  };
  typedef struct gxFontFeatureSetting     gxFontFeatureSetting;
  enum {
      gxSystemFontAttribute       = 0x0001,
      gxReadOnlyFontAttribute     = 0x0002
  };
  
  typedef long                            gxFontAttribute;
  enum {
      gxMutuallyExclusiveFeature  = 0x00008000
  };
  
  typedef long                            gxFontFeatureFlag;
  typedef long                            gxFontFeature;
  enum {
      gxResourceFontStorage       = FOUR_CHAR_CODE('rsrc'),
      gxHandleFontStorage         = FOUR_CHAR_CODE('hndl'),
      gxFileFontStorage           = FOUR_CHAR_CODE('bass'),
      gxNfntFontStorage           = FOUR_CHAR_CODE('nfnt')
  };
  
  typedef void *                          gxFontStorageReference;
  typedef unsigned short                  gxGlyphcode;
  /* single glyph in a font */
  /* byte offset within backing store */
  typedef long                            gxByteOffset;
  /* The actual constants for feature types and selectors have been moved to a library. */
  typedef unsigned short                  gxRunFeatureType;
  typedef unsigned short                  gxRunFeatureSelector;
  /* If tracking is not desired, specify the following value in the track field in the
          gxRunControls record (note that a track of 0 does *not* mean to turn tracking off;
          rather, it means to use normal tracking). */
  enum {
      gxNoTracking                = gxNegativeInfinity
  };
  
  /* The special "gxNoStake" value is returned by the GXGetLayoutBreakOffset call to
          indicate the absence of a character offset that is stable with respect to
          metamorphosis and contextual kerning. */
  enum {
      gxNoStake                   = -1
  };
  
  /* A glyph's behavior with respect to other glyphs on its line is defined in part by its
          gxBaselineType. These types allow correct alignment of the baselines of all glyphs on
          the line. */
  enum {
      gxRomanBaseline             = 0,
      gxIdeographicCenterBaseline = 1,
      gxIdeographicLowBaseline    = 2,
      gxHangingBaseline           = 3,
      gxMathBaseline              = 4,
      gxLastBaseline              = 31,
      gxNumberOfBaselineTypes     = gxLastBaseline + 1,
      gxNoOverrideBaseline        = 255
  };
  
  typedef unsigned long                   gxBaselineType;
  typedef Fixed                           gxBaselineDeltas[32];
  /* gxJustificationPriority defines the point during the justification process at which a
      glyph will begin to receive deltas before and after itself. */
  enum {
      gxKashidaPriority           = 0,
      gxWhiteSpacePriority        = 1,
      gxInterCharPriority         = 2,
      gxNullJustificationPriority = 3,
      gxNumberOfJustificationPriorities = 4
  };
  
  typedef unsigned char                   gxJustificationPriority;
  /* gxJustificationFlags are used to control which fields of a gxWidthDeltaRecord are to
          be overridden and which are not if a gxPriorityJustificationOverride or
          gxGlyphJustificationOverride (qq.v.) is specified. */
  enum {
      gxOverridePriority          = 0x8000,                       /* use priority value from override */
      gxOverrideLimits            = 0x4000,                       /* use limits values from override */
      gxOverrideUnlimited         = 0x2000,                       /* use unlimited flag from override */
      gxUnlimitedGapAbsorption    = 0x1000,                       /* glyph can take unlimited gap */
      gxJustificationPriorityMask = 0x000F,                       /* justification priority */
      gxAllJustificationFlags     = (gxOverridePriority | gxOverrideLimits | gxOverrideUnlimited | gxUnlimitedGapAbsorption | gxJustificationPriorityMask)
  };
  
  typedef unsigned short                  gxJustificationFlags;
  /* The directional behavior of a glyph can be overridden using a gxDirectionOverride. */
  enum {
      gxNoDirectionOverride       = 0,
      gxImposeLeftToRight         = 1,
      gxImposeRightToLeft         = 2,
      gxImposeArabic              = 3
  };
  
  typedef unsigned short                  gxDirectionOverride;
  /* gxRunControlFlags describe the nonparametric layout options contained in a gxStyle. */
  enum {
      gxNoCaretAngle              = 0x40000000,
      gxImposeWidth               = 0x20000000,
      gxNoCrossKerning            = 0x10000000,
      gxNoOpticalAlignment        = 0x08000000,
      gxForceHanging              = 0x04000000,
      gxNoSpecialJustification    = 0x02000000,
      gxDirectionOverrideMask     = 0x00000003,
      gxNoLigatureSplits          = (long)0x80000000
  };
  
  enum {
      gxAllRunControlFlags        = (gxNoLigatureSplits | gxNoCaretAngle | gxImposeWidth | gxNoCrossKerning | gxNoOpticalAlignment | gxForceHanging | gxNoSpecialJustification | gxDirectionOverrideMask)
  };
  
  typedef unsigned long                   gxRunControlFlags;
  /* gxHighlightType is used to distinguish various highlighting methods, both in terms of
          character offset based vs. visual based, and in terms of angled sides vs. non-angled
          sides. */
  enum {
      gxHighlightStraight         = 0,                            /* straight-edged simple highlighting */
      gxHighlightAverageAngle     = 1                             /* takes average of two edge angles */
  };
  
  typedef unsigned long                   gxHighlightType;
  /* gxCaretType is used to control whether the caret that is returned from GXGetLayoutCaret
          is a split caret or a (keyboard-syncronized) single caret. */
  enum {
      gxSplitCaretType            = 0,                            /* returns Mac-style split caret (default) */
      gxLeftRightKeyboardCaret    = 1,                            /* single caret in left-right position */
      gxRightLeftKeyboardCaret    = 2                             /* single caret in right-left position */
  };
  
  typedef unsigned long                   gxCaretType;
  /* gxLayoutOffsetState describes the characteristics of a given gxByteOffset in some
          layout. It is returned by the GXGetOffsetGlyphs call. Note that the
          gxOffsetInsideLigature value is returned in addition to the 8/16 (or invalid)
          indication. */
  enum {
      gxOffset8_8                 = 0,
      gxOffset8_16                = 1,
      gxOffset16_8                = 2,
      gxOffset16_16               = 3,
      gxOffsetInvalid             = 4
  };
  
  enum {
      gxOffsetInsideLigature      = 0x8000
  };
  
  typedef unsigned short                  gxLayoutOffsetState;
  /* gxLayoutOptionsFlags are single-bit flags contained in a gxLayoutOptions record. We
      also define here some utility constants that are useful in setting various fields in
      the gxLayoutOptions record. */
  enum {
      gxNoLayoutOptions           = 0,
      gxLineIsDisplayOnly         = 0x00000001,
      gxKeepSpacesInMargin        = 0x00000002,
      gxLimitReorderingToTwoLevels = 0x00000004,
      gxLineLeftEdgeNotAtMargin   = 0x00000008,
      gxLineRightEdgeNotAtMargin  = 0x00000010,
      gxAllLayoutOptionsFlags     = gxLineIsDisplayOnly | gxKeepSpacesInMargin | gxLimitReorderingToTwoLevels | gxLineLeftEdgeNotAtMargin | gxLineRightEdgeNotAtMargin,
      gxMaxRunLevel               = 15,
      gxFlushLeft                 = 0,
      gxFlushCenter               = fract1 / 2,
      gxFlushRight                = fract1,
      gxNoJustification           = 0,
      gxFullJustification         = fract1
  };
  
  typedef unsigned long                   gxLayoutOptionsFlags;
  /* A gxRunFeature describes a feature and a level for that feature. */
  
  struct gxRunFeature {
      gxRunFeatureType                featureType;
      gxRunFeatureSelector            featureSelector;
  };
  typedef struct gxRunFeature             gxRunFeature;
  /* A gxWidthDeltaRecord contains all of the information needed to describe the behavior of one
          class of glyphs during the justification process. */
  
  struct gxWidthDeltaRecord {
      Fixed                           beforeGrowLimit;            /* ems AW can grow by at most on LT */
      Fixed                           beforeShrinkLimit;          /* ems AW can shrink by at most on LT */
      Fixed                           afterGrowLimit;             /* ems AW can grow by at most on RB */
      Fixed                           afterShrinkLimit;           /* ems AW can shrink by at most on RB */
      gxJustificationFlags            growFlags;                  /* flags controlling grow case */
      gxJustificationFlags            shrinkFlags;                /* flags controlling shrink case */
  };
  typedef struct gxWidthDeltaRecord       gxWidthDeltaRecord;
  /* A gxPriorityJustificationOverride contains an array of WidthDeltaRecords, one for each
          gxJustificationPriority. */
  
  struct gxPriorityJustificationOverride {
      gxWidthDeltaRecord              deltas[4];                  /* overrides for each of the priorities */
  };
  typedef struct gxPriorityJustificationOverride gxPriorityJustificationOverride;
  /* A gxGlyphJustificationOverride contains a gxWidthDeltaRecord that is to be used for a
          specific glyph in a specific run (this limitation is because glyphcodes vary by font). */
  
  struct gxGlyphJustificationOverride {
      gxGlyphcode                     glyph;
      gxWidthDeltaRecord              override;
  };
  typedef struct gxGlyphJustificationOverride gxGlyphJustificationOverride;
  
  /* gxRunControls contains flags, shifts, imposed widths and overrides for a run. */
  /* NOTE: a value of "gxNoTracking" (see above) in track disables tracking */
  
  struct gxRunControls {
      gxRunControlFlags               flags;
      Fixed                           beforeWithStreamShift;
      Fixed                           afterWithStreamShift;
      Fixed                           crossStreamShift;
      Fixed                           imposedWidth;
      Fixed                           track;
      Fract                           hangingInhibitFactor;
      Fract                           kerningInhibitFactor;
      Fixed                           decompositionAdjustmentFactor;
      gxBaselineType                  baselineType;
  };
  typedef struct gxRunControls            gxRunControls;
  /* A gxGlyphSubstitution describes one client-provided substitution that occurs after all
          other automatic glyph changes have happened. */
  
  struct gxGlyphSubstitution {
      gxGlyphcode                     originalGlyph;              /* Whenever you see this glyph... */
      gxGlyphcode                     substituteGlyph;            /* ...change it to this one. */
  };
  typedef struct gxGlyphSubstitution      gxGlyphSubstitution;
  /* gxKerningAdjustmentFactors specify an adjustment to automatic kerning. The adjustment
          is ax + b where x is the automatic kerning value, a is scaleFactor, and b is
          adjustmentPointSizeFactor times the run's point size. */
  
  struct gxKerningAdjustmentFactors {
      Fract                           scaleFactor;
      Fixed                           adjustmentPointSizeFactor;
  };
  typedef struct gxKerningAdjustmentFactors gxKerningAdjustmentFactors;
  /* A gxKerningAdjustment identifies with- and cross-stream kerning adjustments
          for specific glyph pairs. */
  
  struct gxKerningAdjustment {
      gxGlyphcode                     firstGlyph;
      gxGlyphcode                     secondGlyph;
      gxKerningAdjustmentFactors      withStreamFactors;
      gxKerningAdjustmentFactors      crossStreamFactors;
  };
  typedef struct gxKerningAdjustment      gxKerningAdjustment;
  /* A value of gxResetCrossStreamFactor in crossStreamFactors.adjustmentPointSizeFactor
          will reset the cross-stream kerning to the baseline. */
  enum {
      gxResetCrossStreamFactor    = gxNegativeInfinity
  };
  
  /* gxLayoutHitInfo contains the output from the GXHitTestLayout call. */
  
  struct gxLayoutHitInfo {
      Fixed                           firstPartialDist;
      Fixed                           lastPartialDist;
      gxByteOffset                    hitSideOffset;
      gxByteOffset                    nonHitSideOffset;
      Boolean                         leadingEdge;
      Boolean                         inLoose;
  };
  typedef struct gxLayoutHitInfo          gxLayoutHitInfo;
  /* A gxLineBaselineRecord contains the deltas from 0 to all the different baselines for
          the layout. It can be filled via a call to GetBaselineDeltas (q.v.). */
  
  struct gxLineBaselineRecord {
      gxBaselineDeltas                deltas;
  };
  typedef struct gxLineBaselineRecord     gxLineBaselineRecord;
  /* The gxLayoutOptions type contains information about the layout characteristics of the
          whole line. */
  
  struct gxLayoutOptions {
      Fixed                           width;
      Fract                           flush;
      Fract                           just;
      gxLayoutOptionsFlags            flags;
      gxLineBaselineRecord *          baselineRec;
  };
  typedef struct gxLayoutOptions          gxLayoutOptions;
  enum {
      gxNewObjectOpcode           = 0x00,                         /* create new object */
      gxSetDataOpcode             = 0x40,                         /* add reference to current object */
      gxSetDefaultOpcode          = 0x80,                         /* replace current default with this object */
      gxReservedOpcode            = 0xC0,                         /* (may be used in future expansion) */
      gxNextOpcode                = 0xFF                          /* used by currentOperand field to say opcode is coming */
  };
  
  /* new object types (new object opcode) */
  enum {
      gxHeaderTypeOpcode          = 0x00,                         /* byte following new object uses bottom 6 bits for type */
                                                                  /* gxShape types use values 1 (gxEmptyType) through 13 (gxPictureType) */
      gxStyleTypeOpcode           = 0x28,
      gxInkTypeOpcode             = 0x29,
      gxTransformTypeOpcode       = 0x2A,
      gxColorProfileTypeOpcode    = 0x2B,
      gxColorSetTypeOpcode        = 0x2C,
      gxTagTypeOpcode             = 0x2D,
      gxBitImageOpcode            = 0x2E,
      gxFontNameTypeOpcode        = 0x2F,
      gxTrailerTypeOpcode         = 0x3F
  };
  
  /* fields of objects (set data opcodes) */
  enum {
      gxShapeAttributesOpcode     = 0,
      gxShapeTagOpcode            = 1,
      gxShapeFillOpcode           = 2
  };
  
  enum {
      gxOmitPathPositionXMask     = 0xC0,
      gxOmitPathPositionYMask     = 0x30,
      gxOmitPathDeltaXMask        = 0x0C,
      gxOmitPathDeltaYMask        = 0x03
  };
  
  enum {
      gxOmitPathPositionXShift    = 6,
      gxOmitPathPositionYShift    = 4,
      gxOmitPathDeltaXShift       = 2,
      gxOmitPathDeltaYShift       = 0
  };
  
  enum {
      gxOmitBitmapImageMask       = 0xC0,
      gxOmitBitmapWidthMask       = 0x30,
      gxOmitBitmapHeightMask      = 0x0C,
      gxOmitBitmapRowBytesMask    = 0x03
  };
  
  enum {
      gxOmitBitmapImageShift      = 6,
      gxOmitBitmapWidthShift      = 4,
      gxOmitBitmapHeightShift     = 2,
      gxOmitBitmapRowBytesShift   = 0
  };
  
  enum {
      gxOmitBitmapPixelSizeMask   = 0xC0,
      gxOmitBitmapSpaceMask       = 0x30,
      gxOmitBitmapSetMask         = 0x0C,
      gxOmitBitmapProfileMask     = 0x03
  };
  
  enum {
      gxOmitBitmapPixelSizeShift  = 6,
      gxOmitBitmapSpaceShift      = 4,
      gxOmitBitmapSetShift        = 2,
      gxOmitBitmapProfileShift    = 0
  };
  
  enum {
      gxOmitBitmapPositionXMask   = 0xC0,
      gxOmitBitmapPositionYMask   = 0x30
  };
  
  enum {
      gxOmitBitmapPositionXShift  = 6,
      gxOmitBitmapPositionYShift  = 4
  };
  
  enum {
      gxOmitBitImageRowBytesMask  = 0xC0,
      gxOmitBitImageHeightMask    = 0x30,
      gxOmitBitImageDataMask      = 0x08
  };
  
  enum {
      gxOmitBitImageRowBytesShift = 6,
      gxOmitBitImageHeightShift   = 4,
      gxOmitBitImageDataShift     = 3
  };
  
  enum {
      gxCopyBitImageBytesOpcode   = 0x00,
      gxRepeatBitImageBytesOpcode = 0x40,
      gxLookupBitImageBytesOpcode = 0x80,
      gxRepeatBitImageScanOpcode  = 0xC0
  };
  
  enum {
      gxOmitTextCharactersMask    = 0xC0,
      gxOmitTextPositionXMask     = 0x30,
      gxOmitTextPositionYMask     = 0x0C,
      gxOmitTextDataMask          = 0x02
  };
  
  enum {
      gxOmitTextCharactersShift   = 6,
      gxOmitTextPositionXShift    = 4,
      gxOmitTextPositionYShift    = 2,
      gxOmitTextDataShift         = 1
  };
  
  enum {
      gxOmitGlyphCharactersMask   = 0xC0,
      gxOmitGlyphLengthMask       = 0x30,
      gxOmitGlyphRunNumberMask    = 0x0C,
      gxOmitGlyphOnePositionMask  = 0x02,
      gxOmitGlyphDataMask         = 0x01
  };
  
  enum {
      gxOmitGlyphCharactersShift  = 6,
      gxOmitGlyphLengthShift      = 4,
      gxOmitGlyphRunNumberShift   = 2,
      gxOmitGlyphOnePositionShift = 1,
      gxOmitGlyphDataShift        = 0
  };
  
  enum {
      gxOmitGlyphPositionsMask    = 0xC0,
      gxOmitGlyphAdvancesMask     = 0x20,
      gxOmitGlyphTangentsMask     = 0x18,
      gxOmitGlyphRunsMask         = 0x04,
      gxOmitGlyphStylesMask       = 0x03
  };
  
  enum {
      gxOmitGlyphPositionsShift   = 6,
      gxOmitGlyphAdvancesShift    = 5,
      gxOmitGlyphTangentsShift    = 3,
      gxOmitGlyphRunsShift        = 2,
      gxOmitGlyphStylesShift      = 0
  };
  
  enum {
      gxOmitLayoutLengthMask      = 0xC0,
      gxOmitLayoutPositionXMask   = 0x30,
      gxOmitLayoutPositionYMask   = 0x0C,
      gxOmitLayoutDataMask        = 0x02
  };
  
  enum {
      gxOmitLayoutLengthShift     = 6,
      gxOmitLayoutPositionXShift  = 4,
      gxOmitLayoutPositionYShift  = 2,
      gxOmitLayoutDataShift       = 1
  };
  
  enum {
      gxOmitLayoutWidthMask       = 0xC0,
      gxOmitLayoutFlushMask       = 0x30,
      gxOmitLayoutJustMask        = 0x0C,
      gxOmitLayoutOptionsMask     = 0x03
  };
  
  enum {
      gxOmitLayoutWidthShift      = 6,
      gxOmitLayoutFlushShift      = 4,
      gxOmitLayoutJustShift       = 2,
      gxOmitLayoutOptionsShift    = 0
  };
  
  enum {
      gxOmitLayoutStyleRunNumberMask = 0xC0,
      gxOmitLayoutLevelRunNumberMask = 0x30,
      gxOmitLayoutHasBaselineMask = 0x08,
      gxOmitLayoutStyleRunsMask   = 0x04,
      gxOmitLayoutStylesMask      = 0x03
  };
  
  enum {
      gxOmitLayoutStyleRunNumberShift = 6,
      gxOmitLayoutLevelRunNumberShift = 4,
      gxOmitLayoutHasBaselineShift = 3,
      gxOmitLayoutStyleRunsShift  = 2,
      gxOmitLayoutStylesShift     = 0
  };
  
  enum {
      gxOmitLayoutLevelRunsMask   = 0x80,
      gxOmitLayoutLevelsMask      = 0x40
  };
  
  enum {
      gxOmitLayoutLevelRunsShift  = 7,
      gxOmitLayoutLevelsShift     = 6
  };
  
  enum {
      gxInkAttributesOpcode       = 0,
      gxInkTagOpcode              = 1,
      gxInkColorOpcode            = 2,
      gxInkTransferModeOpcode     = 3
  };
  
  enum {
      gxOmitColorsSpaceMask       = 0xC0,
      gxOmitColorsProfileMask     = 0x30,
      gxOmitColorsComponentsMask  = 0x0F,
      gxOmitColorsIndexMask       = 0x0C,
      gxOmitColorsIndexSetMask    = 0x03
  };
  
  enum {
      gxOmitColorsSpaceShift      = 6,
      gxOmitColorsProfileShift    = 4,
      gxOmitColorsComponentsShift = 0,
      gxOmitColorsIndexShift      = 2,
      gxOmitColorsIndexSetShift   = 0
  };
  
  enum {
      gxOmitTransferSpaceMask     = 0xC0,
      gxOmitTransferSetMask       = 0x30,
      gxOmitTransferProfileMask   = 0x0C
  };
  
  enum {
      gxOmitTransferSpaceShift    = 6,
      gxOmitTransferSetShift      = 4,
      gxOmitTransferProfileShift  = 2
  };
  
  enum {
      gxOmitTransferSourceMatrixMask = 0xC0,
      gxOmitTransferDeviceMatrixMask = 0x30,
      gxOmitTransferResultMatrixMask = 0x0C,
      gxOmitTransferFlagsMask     = 0x03
  };
  
  enum {
      gxOmitTransferSourceMatrixShift = 6,
      gxOmitTransferDeviceMatrixShift = 4,
      gxOmitTransferResultMatrixShift = 2,
      gxOmitTransferFlagsShift    = 0
  };
  
  enum {
      gxOmitTransferComponentModeMask = 0x80,
      gxOmitTransferComponentFlagsMask = 0x40,
      gxOmitTransferComponentSourceMinimumMask = 0x30,
      gxOmitTransferComponentSourceMaximumMask = 0x0C,
      gxOmitTransferComponentDeviceMinimumMask = 0x03
  };
  
  enum {
      gxOmitTransferComponentModeShift = 7,
      gxOmitTransferComponentFlagsShift = 6,
      gxOmitTransferComponentSourceMinimumShift = 4,
      gxOmitTransferComponentSourceMaximumShift = 2,
      gxOmitTransferComponentDeviceMinimumShift = 0
  };
  
  enum {
      gxOmitTransferComponentDeviceMaximumMask = 0xC0,
      gxOmitTransferComponentClampMinimumMask = 0x30,
      gxOmitTransferComponentClampMaximumMask = 0x0C,
      gxOmitTransferComponentOperandMask = 0x03
  };
  
  enum {
      gxOmitTransferComponentDeviceMaximumShift = 6,
      gxOmitTransferComponentClampMinimumShift = 4,
      gxOmitTransferComponentClampMaximumShift = 2,
      gxOmitTransferComponentOperandShift = 0
  };
  
  enum {
      gxStyleAttributesOpcode     = 0,
      gxStyleTagOpcode            = 1,
      gxStyleCurveErrorOpcode     = 2,
      gxStylePenOpcode            = 3,
      gxStyleJoinOpcode           = 4,
      gxStyleDashOpcode           = 5,
      gxStyleCapsOpcode           = 6,
      gxStylePatternOpcode        = 7,
      gxStyleTextAttributesOpcode = 8,
      gxStyleTextSizeOpcode       = 9,
      gxStyleFontOpcode           = 10,
      gxStyleTextFaceOpcode       = 11,
      gxStylePlatformOpcode       = 12,
      gxStyleFontVariationsOpcode = 13,
      gxStyleRunControlsOpcode    = 14,
      gxStyleRunPriorityJustOverrideOpcode = 15,
      gxStyleRunGlyphJustOverridesOpcode = 16,
      gxStyleRunGlyphSubstitutionsOpcode = 17,
      gxStyleRunFeaturesOpcode    = 18,
      gxStyleRunKerningAdjustmentsOpcode = 19,
      gxStyleJustificationOpcode  = 20
  };
  
  enum {
      gxOmitDashAttributesMask    = 0xC0,
      gxOmitDashShapeMask         = 0x30,
      gxOmitDashAdvanceMask       = 0x0C,
      gxOmitDashPhaseMask         = 0x03
  };
  
  enum {
      gxOmitDashAttributesShift   = 6,
      gxOmitDashShapeShift        = 4,
      gxOmitDashAdvanceShift      = 2,
      gxOmitDashPhaseShift        = 0
  };
  
  enum {
      gxOmitDashScaleMask         = 0xC0
  };
  
  enum {
      gxOmitDashScaleShift        = 6
  };
  
  enum {
      gxOmitPatternAttributesMask = 0xC0,
      gxOmitPatternShapeMask      = 0x30,
      gxOmitPatternUXMask         = 0x0C,
      gxOmitPatternUYMask         = 0x03
  };
  
  enum {
      gxOmitPatternAttributesShift = 6,
      gxOmitPatternShapeShift     = 4,
      gxOmitPatternUXShift        = 2,
      gxOmitPatternUYShift        = 0
  };
  
  enum {
      gxOmitPatternVXMask         = 0xC0,
      gxOmitPatternVYMask         = 0x30
  };
  
  enum {
      gxOmitPatternVXShift        = 6,
      gxOmitPatternVYShift        = 4
  };
  
  enum {
      gxOmitJoinAttributesMask    = 0xC0,
      gxOmitJoinShapeMask         = 0x30,
      gxOmitJoinMiterMask         = 0x0C
  };
  
  enum {
      gxOmitJoinAttributesShift   = 6,
      gxOmitJoinShapeShift        = 4,
      gxOmitJoinMiterShift        = 2
  };
  
  enum {
      gxOmitCapAttributesMask     = 0xC0,
      gxOmitCapStartShapeMask     = 0x30,
      gxOmitCapEndShapeMask       = 0x0C
  };
  
  enum {
      gxOmitCapAttributesShift    = 6,
      gxOmitCapStartShapeShift    = 4,
      gxOmitCapEndShapeShift      = 2
  };
  
  enum {
      gxOmitFaceLayersMask        = 0xC0,
      gxOmitFaceMappingMask       = 0x30
  };
  
  enum {
      gxOmitFaceLayersShift       = 6,
      gxOmitFaceMappingShift      = 4
  };
  
  enum {
      gxOmitFaceLayerFillMask     = 0xC0,
      gxOmitFaceLayerFlagsMask    = 0x30,
      gxOmitFaceLayerStyleMask    = 0x0C,
      gxOmitFaceLayerTransformMask = 0x03
  };
  
  enum {
      gxOmitFaceLayerFillShift    = 6,
      gxOmitFaceLayerFlagsShift   = 4,
      gxOmitFaceLayerStyleShift   = 2,
      gxOmitFaceLayerTransformShift = 0
  };
  
  enum {
      gxOmitFaceLayerBoldXMask    = 0xC0,
      gxOmitFaceLayerBoldYMask    = 0x30
  };
  
  enum {
      gxOmitFaceLayerBoldXShift   = 6,
      gxOmitFaceLayerBoldYShift   = 4
  };
  
  enum {
      gxColorSetReservedOpcode    = 0,
      gxColorSetTagOpcode         = 1
  };
  
  enum {
      gxColorProfileReservedOpcode = 0,
      gxColorProfileTagOpcode     = 1
  };
  
  enum {
      gxTransformReservedOpcode   = 0,
      gxTransformTagOpcode        = 1,
      gxTransformClipOpcode       = 2,
      gxTransformMappingOpcode    = 3,
      gxTransformPartMaskOpcode   = 4,
      gxTransformToleranceOpcode  = 5
  };
  
  enum {
      gxTypeOpcode                = 0,
      gxSizeOpcode                = 1
  };
  
  /* used by currentOperand when currentOperation is gxNextOpcode */
  /*    format of top byte:
  xx yyyyyy   xx == 0x00, 0x40, 0x80, 0xC0: defines graphics operation (see gxGraphicsOperationOpcode)
              yyyyyy == size of operation in bytes
              if (yyyyyy == 0), byte size follows. If byte following == 0, word size follows; if == 0, long follows
              word and long, if present, are specified in high-endian order (first byte is largest magnitude)
              
  format of byte following size specifiers, if any:
  xx yyyyyy   xx == 0x00, 0x40, 0x80, 0xC0: defines compression level (0 == none, 0xC0 == most)
              exact method of compression is defined by type of data
              yyyyyy == data type selector (0 to 63): see gxGraphicsNewOpcode, __DataOpcode
  */
  enum {
      gxOpcodeShift               = 6,
      gxObjectSizeMask            = 0x3F,
      gxCompressionShift          = 6,
      gxObjectTypeMask            = 0x3F,
      gxBitImageOpcodeMask        = 0xC0,
      gxBitImageCountMask         = 0x3F,
      gxBitImageOpcodeShift       = 6
  };
  
  enum {
      gxNoCompression             = 0,
      gxWordCompression           = 1,
      gxByteCompression           = 2,
      gxOmitCompression           = 3,
      gxCompressionMask           = 0x03
  };
  
  /*    the following structures define how primitives without a public geometry
      are stored (their format mirrors that of the New call to create them)   */
  
  struct gxFlatFontName {
      unsigned char                   name;                       /* gxFontName */
      unsigned char                   platform;                   /* gxFontPlatform */
      unsigned char                   script;                     /* gxFontScript */
      unsigned char                   language;                   /* gxFontLanguage */
      short                           length;                     /* byte length */
  };
  typedef struct gxFlatFontName           gxFlatFontName;
  enum {
      gxFlatFontListItemTag       = FOUR_CHAR_CODE('flst')
  };
  
  struct gxFlatFontListItem {
      gxFont                          fontID;                     
* if we get rid of this, remove #include "font types.h", above

  
      unsigned char                   name;                       /* gxFontName */
      unsigned char                   platform;                   /* gxFontPlatform */
      unsigned char                   script;                     /* gxFontScript */
      unsigned char                   language;                   /* gxFontLanguage */
      short                           length;                     /* byte length of the name that follows */
      unsigned short                  glyphCount;                 /* CountFontGlyphs or 0 if gxFontGlyphsFlatten is false */
      unsigned short                  axisCount;                  /* CountFontVariations or 0 if gxFontVariationsFlatten is false */
      unsigned short                  variationCount;             /* number of bitsVariationPairs that follow the (optional) glyphBits */
  };
  typedef struct gxFlatFontListItem       gxFlatFontListItem;
  
  struct gxFlatFontList {
      long                            count;
      gxFlatFontListItem              items[1];
  };
  typedef struct gxFlatFontList           gxFlatFontList;
  
  struct gxFlattenHeader {
      Fixed                           version;
      unsigned char                   flatFlags;
      SInt8                           padding;
  };
  typedef struct gxFlattenHeader          gxFlattenHeader;
  enum {
      gxOmitPictureShapeMask      = 0xC0,
      gxOmitOverrideStyleMask     = 0x30,
      gxOmitOverrideInkMask       = 0x0C,
      gxOmitOverrideTransformMask = 0x03
  };
  
  enum {
      gxOmitPictureShapeShift     = 0x06,
      gxOmitOverrideStyleShift    = 0x04,
      gxOmitOverrideInkShift      = 0x02,
      gxOmitOverrideTransformShift = 0x00
  };
  
  enum {
      gxPostScriptTag             = FOUR_CHAR_CODE('post'),
      gxPostControlTag            = FOUR_CHAR_CODE('psct')
  };
  
  enum {
      gxNoSave                    = 1,                            /* don't do save-restore around PS data */
      gxPSContinueNext            = 2                             /* next shape is continuation of this shape's PS -- only obeyed if gxNoSave is true */
  };
  
  struct gxPostControl {
      long                            flags;                      /* PostScript state flags */
  };
  typedef struct gxPostControl            gxPostControl;
  enum {
      gxDashSynonymTag            = FOUR_CHAR_CODE('sdsh')
  };
  
  struct gxDashSynonym {
      long                            size;                       /* number of elements in array */
      Fixed                           dashLength[1];              /* Array of dash lengths */
  };
  typedef struct gxDashSynonym            gxDashSynonym;
  enum {
      gxLineCapSynonymTag         = FOUR_CHAR_CODE('lcap')
  };
  
  enum {
      gxButtCap                   = 0,
      gxRoundCap                  = 1,
      gxSquareCap                 = 2,
      gxTriangleCap               = 3
  };
  
  /* gxLine cap type */
  
  typedef long                            gxLineCapSynonym;
  enum {
      gxCubicSynonymTag           = FOUR_CHAR_CODE('cubx')
  };
  
  enum {
      gxIgnoreFlag                = 0x0000,                       /* Ignore this word, get next one */
      gxLineToFlag                = 0x0001,                       /* Draw a gxLine to gxPoint following this flag */
      gxCurveToFlag               = 0x0002,                       /* Draw a gxCurve through the 3 points following this flag */
      gxMoveToFlag                = 0x0003,                       /* Start a new contour at the gxPoint following this flag */
      gxClosePathFlag             = 0x0004                        /* Close the contour */
  };
  
  typedef long                            gxCubicSynonym;
  enum {
      gxCubicInstructionMask      = 0x000F                        /* low four bits are gxPoint instructions */
  };
  
  /* Low four bits are instruction (moveto, lineto, curveto, closepath) */
  typedef short                           gxCubicSynonymFlags;
  enum {
      gxPatternSynonymTag         = FOUR_CHAR_CODE('ptrn')
  };
  
  enum {
      gxHatch                     = 0,
      gxCrossHatch                = 1
  };
  
  struct gxPatternSynonym {
      long                            patternType;                /* one of the gxPatterns: gxHatch or gxCrossHatch */
      Fixed                           angle;                      /* angle at which pattern is drawn */
      Fixed                           spacing;                    /* distance between two parallel pattern lines */
      Fixed                           thickness;                  /* thickness of the pattern */
      gxPoint                         anchorPoint;                /* gxPoint with with respect to which pattern position is calculated */
  };
  typedef struct gxPatternSynonym         gxPatternSynonym;
  enum {
      gxURLTag                    = FOUR_CHAR_CODE('urlt')
  };
  
  if PRAGMA_STRUCT_ALIGN
      #pragma options align=reset
  #elif PRAGMA_STRUCT_PACKPUSH
      #pragma pack(pop)
  #elif PRAGMA_STRUCT_PACK
      #pragma pack()
  endif
  
  ifdef PRAGMA_IMPORT_OFF
  #pragma import off
  #elif PRAGMA_IMPORT
  #pragma import reset
  endif
  
  ifdef __cplusplus
  }
  endif
  
  endif /* __GXTYPES__ */
  
  


(C) Æliens 04/09/2009

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.