You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
710 lines
22 KiB
710 lines
22 KiB
4 years ago
|
/*
|
||
|
File: ATSLayoutTypes.h
|
||
|
|
||
|
Contains: Apple Type Services layout public structures and constants.
|
||
|
|
||
|
Version: QuickTime 7.3
|
||
|
|
||
|
Copyright: (c) 2007 (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 __ATSLAYOUTTYPES__
|
||
|
#define __ATSLAYOUTTYPES__
|
||
|
|
||
|
#ifndef __MACTYPES__
|
||
|
#include <MacTypes.h>
|
||
|
#endif
|
||
|
|
||
|
#ifndef __SFNTLAYOUTTYPES__
|
||
|
#include <SFNTLayoutTypes.h>
|
||
|
#endif
|
||
|
|
||
|
#ifndef __ATSTYPES__
|
||
|
#include <ATSTypes.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
|
||
|
|
||
|
/* --------------------------------------------------------------------------- */
|
||
|
/* CONSTANTS and related scalar types */
|
||
|
/* --------------------------------------------------------------------------- */
|
||
|
/* --------------------------------------------------------------------------- */
|
||
|
/* Miscellaneous Constants */
|
||
|
/* --------------------------------------------------------------------------- */
|
||
|
enum {
|
||
|
kATSUseGlyphAdvance = 0x7FFFFFFF, /* assignment to use natural glyph advance value */
|
||
|
kATSUseLineHeight = 0x7FFFFFFF, /* assignment to use natural line ascent/descent values */
|
||
|
kATSNoTracking = (long)0x80000000 /* negativeInfinity */
|
||
|
};
|
||
|
|
||
|
/* --------------------------------------------------------------------------- */
|
||
|
|
||
|
/*
|
||
|
* Summary:
|
||
|
* These values are passed into the ATSUGetGlyphBounds function to
|
||
|
* indicate whether the width of the resulting typographic glyph
|
||
|
* bounds will be determined using the caret origin, glyph origin in
|
||
|
* device space, or glyph origin in fractional absolute positions
|
||
|
*/
|
||
|
enum {
|
||
|
|
||
|
/*
|
||
|
* Specifies that the width of the typographic glyph bounds will be
|
||
|
* determined using the caret origin. The caret origin is halfway
|
||
|
* between two characters.
|
||
|
*/
|
||
|
kATSUseCaretOrigins = 0,
|
||
|
|
||
|
/*
|
||
|
* Specifies that the width of the typographic glyph bounds will be
|
||
|
* determined using the glyph origin in device space. This is useful
|
||
|
* for adjusting text on the screen.
|
||
|
*/
|
||
|
kATSUseDeviceOrigins = 1,
|
||
|
|
||
|
/*
|
||
|
* Specifies that the width of the typographic glyph bounds will be
|
||
|
* determined using the glyph origin in fractional absolute
|
||
|
* positions, which are uncorrected for device display. This provides
|
||
|
* the ideal position of laid-out text and is useful for scaling text
|
||
|
* on the screen. This origin is also used to get the width of the
|
||
|
* typographic bounding rectangle when you call ATSUMeasureText.
|
||
|
*/
|
||
|
kATSUseFractionalOrigins = 2,
|
||
|
kATSUseOriginFlags = 3
|
||
|
};
|
||
|
|
||
|
/* ---------------------------------------------------------------------------- */
|
||
|
|
||
|
/*
|
||
|
* ATSULayoutOperationSelector
|
||
|
*
|
||
|
* Summary:
|
||
|
* This is used to select which operations to override, or which
|
||
|
* operation is currently being run.
|
||
|
*/
|
||
|
typedef UInt32 ATSULayoutOperationSelector;
|
||
|
enum {
|
||
|
|
||
|
/*
|
||
|
* No Layout operation is currently selected.
|
||
|
*/
|
||
|
kATSULayoutOperationNone = 0x00000000,
|
||
|
|
||
|
/*
|
||
|
* Select the Justification operation.
|
||
|
*/
|
||
|
kATSULayoutOperationJustification = 0x00000001,
|
||
|
|
||
|
/*
|
||
|
* Select the character morphing operation.
|
||
|
*/
|
||
|
kATSULayoutOperationMorph = 0x00000002,
|
||
|
|
||
|
/*
|
||
|
* Select the kerning adjustment operation.
|
||
|
*/
|
||
|
kATSULayoutOperationKerningAdjustment = 0x00000004,
|
||
|
|
||
|
/*
|
||
|
* Select the baseline adjustment operation.
|
||
|
*/
|
||
|
kATSULayoutOperationBaselineAdjustment = 0x00000008,
|
||
|
|
||
|
/*
|
||
|
* Select the tracking adjustment operation.
|
||
|
*/
|
||
|
kATSULayoutOperationTrackingAdjustment = 0x00000010,
|
||
|
|
||
|
/*
|
||
|
* Select the period of time after ATSUI has finished all of it's
|
||
|
* layout operations.
|
||
|
*/
|
||
|
kATSULayoutOperationPostLayoutAdjustment = 0x00000020,
|
||
|
kATSULayoutOperationAppleReserved = (unsigned long)0xFFFFFFC0
|
||
|
};
|
||
|
|
||
|
/* ---------------------------------------------------------------------------- */
|
||
|
|
||
|
/*
|
||
|
* ATSULayoutOperationCallbackStatus
|
||
|
*
|
||
|
* Summary:
|
||
|
* One of these must be returned by a
|
||
|
* ATSUDLayoutOperationOverrideUPP callback function in order to
|
||
|
* indicate ATSUI's status.
|
||
|
*/
|
||
|
typedef UInt32 ATSULayoutOperationCallbackStatus;
|
||
|
enum {
|
||
|
|
||
|
/*
|
||
|
* Return this if the callback function has totally handled the
|
||
|
* operation which triggered the callback and does not need ATSUI to
|
||
|
* run any further processing for the operation.
|
||
|
*/
|
||
|
kATSULayoutOperationCallbackStatusHandled = 0x00000000,
|
||
|
|
||
|
/*
|
||
|
* Return this if the callback function has not totally handled the
|
||
|
* operation which triggered the callback and needs ATSUI to run it's
|
||
|
* own processing.
|
||
|
*/
|
||
|
kATSULayoutOperationCallbackStatusContinue = 0x00000001
|
||
|
};
|
||
|
|
||
|
/* ---------------------------------------------------------------------------- */
|
||
|
|
||
|
/*
|
||
|
* ATSLineLayoutOptions
|
||
|
*
|
||
|
* Summary:
|
||
|
* ATSLineLayoutOptions are normally set in an ATSUTextLayout object
|
||
|
* via the kATSULineLayoutOptionsTag layout control attribute. They
|
||
|
* can also be set in an ATSLineLayoutParams structure and passed
|
||
|
* into the ATSLayoutText function for finer control over the line
|
||
|
* layout.
|
||
|
*/
|
||
|
typedef UInt32 ATSLineLayoutOptions;
|
||
|
enum {
|
||
|
|
||
|
/*
|
||
|
* No options specified.
|
||
|
*/
|
||
|
kATSLineNoLayoutOptions = 0x00000000,
|
||
|
|
||
|
/*
|
||
|
* This line option is no longer used.
|
||
|
*/
|
||
|
kATSLineIsDisplayOnly = 0x00000001, /* obsolete option*/
|
||
|
|
||
|
/*
|
||
|
* Specifies that no hangers to be formed on the line.
|
||
|
*/
|
||
|
kATSLineHasNoHangers = 0x00000002,
|
||
|
|
||
|
/*
|
||
|
* Specifies that no optical alignment to be performed on the line.
|
||
|
*/
|
||
|
kATSLineHasNoOpticalAlignment = 0x00000004,
|
||
|
|
||
|
/*
|
||
|
* Specifies that space charcters should not be treated as hangers.
|
||
|
*/
|
||
|
kATSLineKeepSpacesOutOfMargin = 0x00000008,
|
||
|
|
||
|
/*
|
||
|
* Specifies no post-compensation justification is to be performed.
|
||
|
*/
|
||
|
kATSLineNoSpecialJustification = 0x00000010,
|
||
|
|
||
|
/*
|
||
|
* Specifies that if the line is the last of a paragraph, it will not
|
||
|
* get justified.
|
||
|
*/
|
||
|
kATSLineLastNoJustification = 0x00000020,
|
||
|
|
||
|
/*
|
||
|
* Specifies that the displayed line glyphs will adjust for device
|
||
|
* metrics.
|
||
|
*/
|
||
|
kATSLineFractDisable = 0x00000040,
|
||
|
|
||
|
/*
|
||
|
* Specifies that the carets at the ends of the line will be
|
||
|
* guarenteed to be perpendicular to the baseline.
|
||
|
*/
|
||
|
kATSLineImposeNoAngleForEnds = 0x00000080,
|
||
|
|
||
|
/*
|
||
|
* Highlights for the line end characters will be extended to 0 and
|
||
|
* the specified line width.
|
||
|
*/
|
||
|
kATSLineFillOutToWidth = 0x00000100,
|
||
|
|
||
|
/*
|
||
|
* Specifies that the tab character width will be automatically
|
||
|
* adjusted to fit the specified line width.
|
||
|
*/
|
||
|
kATSLineTabAdjustEnabled = 0x00000200,
|
||
|
|
||
|
/*
|
||
|
* Specifies that any leading value specified by a font will be
|
||
|
* ignored.
|
||
|
*/
|
||
|
kATSLineIgnoreFontLeading = 0x00000400,
|
||
|
|
||
|
/*
|
||
|
* Specifies that ATS produce antialiased glyph images despite system
|
||
|
* preferences or CGContext settings.
|
||
|
*/
|
||
|
kATSLineApplyAntiAliasing = 0x00000800,
|
||
|
|
||
|
/*
|
||
|
* Specifies that ATS turn-off antialiasing glyph imaging despite
|
||
|
* system preferences or CGContext settings (negates
|
||
|
* kATSLineApplyAntiAliasing bit if set).
|
||
|
*/
|
||
|
kATSLineNoAntiAliasing = 0x00001000,
|
||
|
|
||
|
/*
|
||
|
* Specifies that if the line width is not sufficient to hold all its
|
||
|
* glyphs, glyph positions are allowed to extend beyond the line's
|
||
|
* assigned width so negative justification is not used.
|
||
|
*/
|
||
|
kATSLineDisableNegativeJustification = 0x00002000,
|
||
|
|
||
|
/*
|
||
|
* Specifies that lines with any integer glyph positioning (due to
|
||
|
* either any character non-antialiased or kATSLineFractDisable
|
||
|
* specified), not automatically esthetically adjust individual
|
||
|
* character positions while rendering to display.
|
||
|
*/
|
||
|
kATSLineDisableAutoAdjustDisplayPos = 0x00004000,
|
||
|
|
||
|
/*
|
||
|
* Specifies that rendering be done through Quickdraw (default
|
||
|
* rendering in ATSUI is through CoreGraphics on MacOSX).
|
||
|
*/
|
||
|
kATSLineUseQDRendering = 0x00008000,
|
||
|
|
||
|
/*
|
||
|
* Specifies that any Justification operations will not be run.
|
||
|
*/
|
||
|
kATSLineDisableAllJustification = 0x00010000,
|
||
|
|
||
|
/*
|
||
|
* Specifies that any glyph morphing operations will not be run.
|
||
|
*/
|
||
|
kATSLineDisableAllGlyphMorphing = 0x00020000,
|
||
|
|
||
|
/*
|
||
|
* Specifies that any kerning adjustment operations will not be run.
|
||
|
*/
|
||
|
kATSLineDisableAllKerningAdjustments = 0x00040000,
|
||
|
|
||
|
/*
|
||
|
* Specifies that any baseline adjustment operations will not be run.
|
||
|
*/
|
||
|
kATSLineDisableAllBaselineAdjustments = 0x00080000,
|
||
|
|
||
|
/*
|
||
|
* Specifies that any tracking adjustment operations will not be run.
|
||
|
*/
|
||
|
kATSLineDisableAllTrackingAdjustments = 0x00100000,
|
||
|
|
||
|
/*
|
||
|
* Convenience constant for turning-off all adjustments.
|
||
|
*/
|
||
|
kATSLineDisableAllLayoutOperations = kATSLineDisableAllJustification | kATSLineDisableAllGlyphMorphing | kATSLineDisableAllKerningAdjustments | kATSLineDisableAllBaselineAdjustments | kATSLineDisableAllTrackingAdjustments,
|
||
|
|
||
|
/*
|
||
|
* Specifies to optimize for displaying text only. Note, rounded
|
||
|
* device metrics will be used instead of fractional path metrics.
|
||
|
*/
|
||
|
kATSLineUseDeviceMetrics = 0x01000000,
|
||
|
|
||
|
/*
|
||
|
* These bits are reserved by Apple and will result in a invalid
|
||
|
* value error if attemped to set. Obsolete constants:
|
||
|
*/
|
||
|
kATSLineAppleReserved = (unsigned long)0xFEE00000
|
||
|
};
|
||
|
|
||
|
/* --------------------------------------------------------------------------- */
|
||
|
|
||
|
/*
|
||
|
* ATSStyleRenderingOptions
|
||
|
*
|
||
|
* Summary:
|
||
|
* ATSStyleRenderingOptions are set in the ATSUStyle object via the
|
||
|
* attribute tag kATSUStyleRenderingOptions. They provide finer
|
||
|
* control over how the style is rendered.
|
||
|
*/
|
||
|
typedef UInt32 ATSStyleRenderingOptions;
|
||
|
enum {
|
||
|
|
||
|
/*
|
||
|
* No options specified.
|
||
|
*/
|
||
|
kATSStyleNoOptions = 0x00000000,
|
||
|
|
||
|
/*
|
||
|
* Specifies that ATS produce "unhinted" glyph outlines (default is
|
||
|
* hinted glyph outlines).
|
||
|
*/
|
||
|
kATSStyleNoHinting = 0x00000001,
|
||
|
|
||
|
/*
|
||
|
* Specifies that ATS produce antialiased glyph images despite system
|
||
|
* preferences or CGContext settings.
|
||
|
*/
|
||
|
kATSStyleApplyAntiAliasing = 0x00000002,
|
||
|
|
||
|
/*
|
||
|
* Specifies that ATS turn-off antialiasing glyph imaging despite
|
||
|
* system preferences or CGContext settings (negates
|
||
|
* kATSStyleApplyAntiAliasing bit if set).
|
||
|
*/
|
||
|
kATSStyleNoAntiAliasing = 0x00000004,
|
||
|
|
||
|
/*
|
||
|
* These bits are reserved by Apple and will result in a invalid
|
||
|
* value error if attemped to set.
|
||
|
*/
|
||
|
kATSStyleAppleReserved = (unsigned long)0xFFFFFFF8,
|
||
|
|
||
|
/*
|
||
|
* (OBSOLETE) Specifies that ATS produce "hinted" glyph outlines (the
|
||
|
* default behavior). THIS NAME IS OBSOLETE. DO NOT USE. It's only
|
||
|
* left in for backwards compatibility.
|
||
|
*/
|
||
|
kATSStyleApplyHints = kATSStyleNoOptions
|
||
|
};
|
||
|
|
||
|
/* --------------------------------------------------------------------------- */
|
||
|
|
||
|
|
||
|
|
||
|
/*
|
||
|
* ATSGlyphInfoFlags
|
||
|
*
|
||
|
* Summary:
|
||
|
* ATSGlyphInfoFlags are set in the individual ATSLayoutRecord
|
||
|
* structures and apply only to the ATSGlyphRef in that structure.
|
||
|
* The are used by the layout engine to flag a glyph with specific
|
||
|
* properties.
|
||
|
*/
|
||
|
typedef UInt32 ATSGlyphInfoFlags;
|
||
|
enum {
|
||
|
|
||
|
/*
|
||
|
* These bits are Apple reserved and may result in an invalid value
|
||
|
* error if attempted to set.
|
||
|
*/
|
||
|
kATSGlyphInfoAppleReserved = 0x1FFBFFE8,
|
||
|
|
||
|
/*
|
||
|
* The glyph attaches to another glyph.
|
||
|
*/
|
||
|
kATSGlyphInfoIsAttachment = (unsigned long)0x80000000,
|
||
|
|
||
|
/*
|
||
|
* The glyph can hang off left/top edge of line.
|
||
|
*/
|
||
|
kATSGlyphInfoIsLTHanger = 0x40000000,
|
||
|
|
||
|
/*
|
||
|
* The glyph can hang off right/bottom edge of line.
|
||
|
*/
|
||
|
kATSGlyphInfoIsRBHanger = 0x20000000,
|
||
|
|
||
|
/*
|
||
|
* The glyph is not really a glyph at all, but an end-marker designed
|
||
|
* to allow the calculation of the previous glyph's advance.
|
||
|
*/
|
||
|
kATSGlyphInfoTerminatorGlyph = 0x00080000,
|
||
|
|
||
|
/*
|
||
|
* The glyph is a white space glyph.
|
||
|
*/
|
||
|
kATSGlyphInfoIsWhiteSpace = 0x00040000,
|
||
|
|
||
|
/*
|
||
|
* Glyph has a style specified imposed width (i.e. advance)
|
||
|
*/
|
||
|
kATSGlyphInfoHasImposedWidth = 0x00000010,
|
||
|
|
||
|
/*
|
||
|
* A three-bit mask, that can be used to get the size of the original
|
||
|
* character that spawned this glyph. When a logical 'and' operation
|
||
|
* with this mask and an ATSGlyphInfoFlags variable, it will yield
|
||
|
* the size in bytes of the original character (0 - 7 bytes possible).
|
||
|
*/
|
||
|
kATSGlyphInfoByteSizeMask = 0x00000007
|
||
|
};
|
||
|
|
||
|
/* --------------------------------------------------------------------------- */
|
||
|
/* STRUCTURED TYPES and related constants */
|
||
|
/* --------------------------------------------------------------------------- */
|
||
|
|
||
|
/*
|
||
|
* ATSLayoutRecord
|
||
|
*
|
||
|
* Summary:
|
||
|
* The ATSLayoutRecord structure defines all the needed info for a
|
||
|
* single glyph during the layout process. This struct must be
|
||
|
* declared as the first element of an enclosing glyph record struct
|
||
|
* defined by ATSUI DirectAccess clients.
|
||
|
*/
|
||
|
struct ATSLayoutRecord {
|
||
|
|
||
|
/*
|
||
|
* The glyph ID reference.
|
||
|
*/
|
||
|
ATSGlyphRef glyphID;
|
||
|
|
||
|
/*
|
||
|
* These flags describe the individual state of the glyph (see above).
|
||
|
*/
|
||
|
ATSGlyphInfoFlags flags;
|
||
|
|
||
|
/*
|
||
|
* The byte offset of the original character that spawned this glyph.
|
||
|
*/
|
||
|
ByteCount originalOffset;
|
||
|
|
||
|
/*
|
||
|
* This is the real position that the glyph sits.
|
||
|
*/
|
||
|
Fixed realPos;
|
||
|
};
|
||
|
typedef struct ATSLayoutRecord ATSLayoutRecord;
|
||
|
/* --------------------------------------------------------------------------- */
|
||
|
|
||
|
/*
|
||
|
* ATSTrapezoid
|
||
|
*
|
||
|
* Summary:
|
||
|
* The ATSTrapezoid structure supplies a convenient container for
|
||
|
* glyph bounds in trapezoidal form.
|
||
|
*/
|
||
|
struct ATSTrapezoid {
|
||
|
FixedPoint upperLeft;
|
||
|
FixedPoint upperRight;
|
||
|
FixedPoint lowerRight;
|
||
|
FixedPoint lowerLeft;
|
||
|
};
|
||
|
typedef struct ATSTrapezoid ATSTrapezoid;
|
||
|
/* --------------------------------------------------------------------------- */
|
||
|
|
||
|
/*
|
||
|
* ATSJustWidthDeltaEntryOverride
|
||
|
*
|
||
|
* Summary:
|
||
|
* The JustWidthDeltaEntryOverride structure specifies values for
|
||
|
* the grow and shrink case during justification, both on the left
|
||
|
* and on the right. It also contains flags. This particular
|
||
|
* structure is used for passing justification overrides to LLC. For
|
||
|
* further sfnt resource 'just' table constants and structures, see
|
||
|
* SFNTLayoutTypes.h.
|
||
|
*/
|
||
|
struct ATSJustWidthDeltaEntryOverride {
|
||
|
|
||
|
/*
|
||
|
* ems AW can grow by at most on LT
|
||
|
*/
|
||
|
Fixed beforeGrowLimit;
|
||
|
|
||
|
/*
|
||
|
* ems AW can shrink by at most on LT
|
||
|
*/
|
||
|
Fixed beforeShrinkLimit;
|
||
|
|
||
|
/*
|
||
|
* ems AW can grow by at most on RB
|
||
|
*/
|
||
|
Fixed afterGrowLimit;
|
||
|
|
||
|
/*
|
||
|
* ems AW can shrink by at most on RB
|
||
|
*/
|
||
|
Fixed afterShrinkLimit;
|
||
|
|
||
|
/*
|
||
|
* flags controlling grow case
|
||
|
*/
|
||
|
JustificationFlags growFlags;
|
||
|
|
||
|
/*
|
||
|
* flags controlling shrink case
|
||
|
*/
|
||
|
JustificationFlags shrinkFlags;
|
||
|
};
|
||
|
typedef struct ATSJustWidthDeltaEntryOverride ATSJustWidthDeltaEntryOverride;
|
||
|
/* The JustPriorityOverrides type is an array of 4 width delta records, one per priority level override. */
|
||
|
typedef ATSJustWidthDeltaEntryOverride ATSJustPriorityWidthDeltaOverrides[4];
|
||
|
/* ---------------------------------------------------------------------------- */
|
||
|
|
||
|
/*
|
||
|
* ATSULineRef
|
||
|
*
|
||
|
* Summary:
|
||
|
* A reference to a line that is being laid out. This is passed into
|
||
|
* the ATSUDirectLayoutOperationOverrideUPP callback function to be
|
||
|
* used by the ATSUDirectGetLayoutDataArrayPtrFromLineRef function.
|
||
|
* The only way to get a line ref is inside of the callback. The
|
||
|
* only time the line ref is valid is inside of the callback.
|
||
|
*/
|
||
|
typedef struct ATSGlyphVector* ATSULineRef;
|
||
|
/* ---------------------------------------------------------------------------- */
|
||
|
/* DirectAccess Layout Callback Definitions */
|
||
|
/* ---------------------------------------------------------------------------- */
|
||
|
|
||
|
/*
|
||
|
* ATSUDirectLayoutOperationOverrideProcPtr
|
||
|
*
|
||
|
* Summary:
|
||
|
* Callback definition for a low-level adjustment routine hook.
|
||
|
*
|
||
|
* Discussion:
|
||
|
* This callback can be set in an ATSUTextLayout object by setting
|
||
|
* the attribute tag kATSULayoutOperationOverrideUPP and passing in
|
||
|
* a ATSULayoutOperationOverrideSpecifier structure into
|
||
|
* ATSUSetLayoutAttribute. This callback will be called whenever an
|
||
|
* ATSUI call triggers a re-layout for each operation it is
|
||
|
* installed for. The operation that triggered the callback will be
|
||
|
* set in the iCurrentOperation parameter. The callback function
|
||
|
* defined by the developer is only required to do one thing: return
|
||
|
* it's status to ATSUI as to what it has done. This is done via the
|
||
|
* oCallbackStatus parameter. It needs to tell ATSUI if it had
|
||
|
* handled the layout operation or if it still needs ATSUI to run
|
||
|
* it's own processes. iOperationCallbackParameterPtr is there in
|
||
|
* case there are ever any ATSUDirectLayoutOperationSelector which
|
||
|
* require extra parameters to be passed into the callback function.
|
||
|
* It is currently unused and will always be set to NULL. iRefCon is
|
||
|
* the constant that is set in the ATSUTextLayout object that
|
||
|
* spawned the operation by the ATSUSetTextLayoutRefCon() API.
|
||
|
* Within the context of the callback itself, only a limited subset
|
||
|
* of ATSUI APIs may be called. Basically, only the APIs that have
|
||
|
* no chance of triggering a re-layout are allowed to be called. The
|
||
|
* reason for this restriction is to prevent runaway recursion. Most
|
||
|
* of the APIs that have "create", "get", or "copy" are safe. Any
|
||
|
* attempt to call one of the restricted APIs will result in an
|
||
|
* immediate return with the kATSUInvalidCallInsideCallbackErr
|
||
|
* error. ATSULayoutOperationSelector and
|
||
|
* ATSULayoutOperationCallbackStatus are defined in ATSLayoutTypes.i.
|
||
|
*/
|
||
|
typedef CALLBACK_API_C( OSStatus , ATSUDirectLayoutOperationOverrideProcPtr )(ATSULayoutOperationSelector iCurrentOperation, ATSULineRef iLineRef, UInt32 iRefCon, void *iOperationCallbackParameterPtr, ATSULayoutOperationCallbackStatus *oCallbackStatus);
|
||
|
typedef TVECTOR_UPP_TYPE(ATSUDirectLayoutOperationOverrideProcPtr) ATSUDirectLayoutOperationOverrideUPP;
|
||
|
/*
|
||
|
* NewATSUDirectLayoutOperationOverrideUPP()
|
||
|
*
|
||
|
* Availability:
|
||
|
* Non-Carbon CFM: available as macro/inline
|
||
|
* CarbonLib: not available in CarbonLib 1.x, is available on Mac OS X version 10.2 and later
|
||
|
* Mac OS X: in version 10.2 and later
|
||
|
*/
|
||
|
EXTERN_API_C( ATSUDirectLayoutOperationOverrideUPP )
|
||
|
NewATSUDirectLayoutOperationOverrideUPP(ATSUDirectLayoutOperationOverrideProcPtr userRoutine);
|
||
|
#if !OPAQUE_UPP_TYPES
|
||
|
enum { uppATSUDirectLayoutOperationOverrideProcInfo = 0x0000FFF1 }; /* 4_bytes Func(4_bytes, 4_bytes, 4_bytes, 4_bytes, 4_bytes) */
|
||
|
#ifdef __cplusplus
|
||
|
inline DEFINE_API_C(ATSUDirectLayoutOperationOverrideUPP) NewATSUDirectLayoutOperationOverrideUPP(ATSUDirectLayoutOperationOverrideProcPtr userRoutine) { return userRoutine; }
|
||
|
#else
|
||
|
#define NewATSUDirectLayoutOperationOverrideUPP(userRoutine) (userRoutine)
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
* DisposeATSUDirectLayoutOperationOverrideUPP()
|
||
|
*
|
||
|
* Availability:
|
||
|
* Non-Carbon CFM: available as macro/inline
|
||
|
* CarbonLib: not available in CarbonLib 1.x, is available on Mac OS X version 10.2 and later
|
||
|
* Mac OS X: in version 10.2 and later
|
||
|
*/
|
||
|
EXTERN_API_C( void )
|
||
|
DisposeATSUDirectLayoutOperationOverrideUPP(ATSUDirectLayoutOperationOverrideUPP userUPP);
|
||
|
#if !OPAQUE_UPP_TYPES
|
||
|
#ifdef __cplusplus
|
||
|
inline DEFINE_API_C(void) DisposeATSUDirectLayoutOperationOverrideUPP(ATSUDirectLayoutOperationOverrideUPP) {}
|
||
|
#else
|
||
|
#define DisposeATSUDirectLayoutOperationOverrideUPP(userUPP)
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
* InvokeATSUDirectLayoutOperationOverrideUPP()
|
||
|
*
|
||
|
* Availability:
|
||
|
* Non-Carbon CFM: available as macro/inline
|
||
|
* CarbonLib: not available in CarbonLib 1.x, is available on Mac OS X version 10.2 and later
|
||
|
* Mac OS X: in version 10.2 and later
|
||
|
*/
|
||
|
EXTERN_API_C( OSStatus )
|
||
|
InvokeATSUDirectLayoutOperationOverrideUPP(
|
||
|
ATSULayoutOperationSelector iCurrentOperation,
|
||
|
ATSULineRef iLineRef,
|
||
|
UInt32 iRefCon,
|
||
|
void * iOperationCallbackParameterPtr,
|
||
|
ATSULayoutOperationCallbackStatus * oCallbackStatus,
|
||
|
ATSUDirectLayoutOperationOverrideUPP userUPP);
|
||
|
#if !OPAQUE_UPP_TYPES
|
||
|
#ifdef __cplusplus
|
||
|
inline DEFINE_API_C(OSStatus) InvokeATSUDirectLayoutOperationOverrideUPP(ATSULayoutOperationSelector iCurrentOperation, ATSULineRef iLineRef, UInt32 iRefCon, void * iOperationCallbackParameterPtr, ATSULayoutOperationCallbackStatus * oCallbackStatus, ATSUDirectLayoutOperationOverrideUPP userUPP) { return (*userUPP)(iCurrentOperation, iLineRef, iRefCon, iOperationCallbackParameterPtr, oCallbackStatus); }
|
||
|
#else
|
||
|
#define InvokeATSUDirectLayoutOperationOverrideUPP(iCurrentOperation, iLineRef, iRefCon, iOperationCallbackParameterPtr, oCallbackStatus, userUPP) (*userUPP)(iCurrentOperation, iLineRef, iRefCon, iOperationCallbackParameterPtr, oCallbackStatus)
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
/* ---------------------------------------------------------------------------- */
|
||
|
|
||
|
/*
|
||
|
* ATSULayoutOperationOverrideSpecifier
|
||
|
*
|
||
|
* Summary:
|
||
|
* This structure is used to install a callback for one or more
|
||
|
* ATSUI operations. To do this, simply passed one of these
|
||
|
* structure into the ATSUSetLayoutControls call with the
|
||
|
* kATSULayoutOperationOverrideUPP tag.
|
||
|
*/
|
||
|
struct ATSULayoutOperationOverrideSpecifier {
|
||
|
|
||
|
|
||
|
/*
|
||
|
* A bitfield containing the selector for the operations in which the
|
||
|
* callback will be installed for.
|
||
|
*/
|
||
|
ATSULayoutOperationSelector operationSelector;
|
||
|
ATSUDirectLayoutOperationOverrideUPP overrideUPP;
|
||
|
|
||
|
};
|
||
|
typedef struct ATSULayoutOperationOverrideSpecifier ATSULayoutOperationOverrideSpecifier;
|
||
|
|
||
|
#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 /* __ATSLAYOUTTYPES__ */
|
||
|
|