/* File: GXTypes.h Contains: QuickDraw GX object and constant definitions Version: Technology: Quickdraw GX 1.1 Release: QuickTime 7.3 Copyright: (c) 2007 (c) 1994-1999 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 #endif #ifndef __MIXEDMODE__ #include #endif #ifndef __FIXMATH__ #include #endif #ifndef __GXMATH__ #include #endif #ifndef __IMAGECODEC__ #include #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; /* Now defined in ImageCodec.i*/ #if 0 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; #endif /* 0 */ 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 CALL_NOT_IN_CARBON /* * NewgxSpoolUPP() * * Availability: * Non-Carbon CFM: available as macro/inline * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( gxSpoolUPP ) NewgxSpoolUPP(gxSpoolProcPtr userRoutine); #if !OPAQUE_UPP_TYPES enum { uppgxSpoolProcInfo = 0x000003F1 }; /* 4_bytes Func(4_bytes, 4_bytes) */ #ifdef __cplusplus inline DEFINE_API_C(gxSpoolUPP) NewgxSpoolUPP(gxSpoolProcPtr userRoutine) { return (gxSpoolUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppgxSpoolProcInfo, GetCurrentArchitecture()); } #else #define NewgxSpoolUPP(userRoutine) (gxSpoolUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppgxSpoolProcInfo, GetCurrentArchitecture()) #endif #endif /* * DisposegxSpoolUPP() * * Availability: * Non-Carbon CFM: available as macro/inline * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( void ) DisposegxSpoolUPP(gxSpoolUPP userUPP); #if !OPAQUE_UPP_TYPES #ifdef __cplusplus inline DEFINE_API_C(void) DisposegxSpoolUPP(gxSpoolUPP userUPP) { DisposeRoutineDescriptor((UniversalProcPtr)userUPP); } #else #define DisposegxSpoolUPP(userUPP) DisposeRoutineDescriptor(userUPP) #endif #endif /* * InvokegxSpoolUPP() * * Availability: * Non-Carbon CFM: available as macro/inline * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( long ) InvokegxSpoolUPP( gxSpoolCommand command, gxSpoolBlock * block, gxSpoolUPP userUPP); #if !OPAQUE_UPP_TYPES #ifdef __cplusplus inline DEFINE_API_C(long) InvokegxSpoolUPP(gxSpoolCommand command, gxSpoolBlock * block, gxSpoolUPP userUPP) { return (long)CALL_TWO_PARAMETER_UPP(userUPP, uppgxSpoolProcInfo, command, block); } #else #define InvokegxSpoolUPP(command, block, userUPP) (long)CALL_TWO_PARAMETER_UPP((userUPP), uppgxSpoolProcInfo, (command), (block)) #endif #endif #endif /* CALL_NOT_IN_CARBON */ #if CALL_NOT_IN_CARBON || OLDROUTINENAMES /* support for pre-Carbon UPP routines: New...Proc and Call...Proc */ #define NewgxSpoolProc(userRoutine) NewgxSpoolUPP(userRoutine) #define CallgxSpoolProc(userRoutine, command, block) InvokegxSpoolUPP(command, block, userRoutine) #endif /* CALL_NOT_IN_CARBON */ 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__ */