| /***************************************************************************/ |
| /* */ |
| /* ttgxvar.h */ |
| /* */ |
| /* TrueType GX Font Variation loader (specification) */ |
| /* */ |
| /* Copyright 2004-2016 by */ |
| /* David Turner, Robert Wilhelm, Werner Lemberg and George Williams. */ |
| /* */ |
| /* This file is part of the FreeType project, and may only be used, */ |
| /* modified, and distributed under the terms of the FreeType project */ |
| /* license, LICENSE.TXT. By continuing to use, modify, or distribute */ |
| /* this file you indicate that you have read the license and */ |
| /* understand and accept it fully. */ |
| /* */ |
| /***************************************************************************/ |
| |
| |
| #ifndef TTGXVAR_H_ |
| #define TTGXVAR_H_ |
| |
| |
| #include <ft2build.h> |
| #include "ttobjs.h" |
| |
| |
| FT_BEGIN_HEADER |
| |
| |
| /*************************************************************************/ |
| /* */ |
| /* <Struct> */ |
| /* GX_AVarCorrespondenceRec */ |
| /* */ |
| /* <Description> */ |
| /* A data structure representing `shortFracCorrespondence' in `avar' */ |
| /* table according to the specifications from Apple. */ |
| /* */ |
| typedef struct GX_AVarCorrespondenceRec_ |
| { |
| FT_Fixed fromCoord; |
| FT_Fixed toCoord; |
| |
| } GX_AVarCorrespondenceRec_, *GX_AVarCorrespondence; |
| |
| |
| /*************************************************************************/ |
| /* */ |
| /* <Struct> */ |
| /* GX_AVarRec */ |
| /* */ |
| /* <Description> */ |
| /* Data from the segment field of `avar' table. */ |
| /* There is one of these for each axis. */ |
| /* */ |
| typedef struct GX_AVarSegmentRec_ |
| { |
| FT_UShort pairCount; |
| GX_AVarCorrespondence correspondence; /* array with pairCount entries */ |
| |
| } GX_AVarSegmentRec, *GX_AVarSegment; |
| |
| |
| /*************************************************************************/ |
| /* */ |
| /* <Struct> */ |
| /* GX_HVarRec */ |
| /* */ |
| /* <Description> */ |
| /* Data from the `HVAR' table. */ |
| /* */ |
| /* See similar variation store structures in cfftypes.h */ |
| /* */ |
| typedef struct GX_HVarData_ |
| { |
| FT_UInt itemCount; /* # delta sets per item */ |
| FT_UInt regionIdxCount; /* # region indices in this data */ |
| FT_UInt* regionIndices; /* array of regionCount indices */ |
| /* these index the varRegionList */ |
| FT_Short* deltaSet; /* array of itemCount deltas */ |
| /* use innerIndex for this array */ |
| } GX_HVarDataRec, *GX_HVarData; |
| |
| typedef struct GX_AxisCoords_ /* contribution of one axis to a region */ |
| { |
| FT_Fixed startCoord; |
| FT_Fixed peakCoord; /* zero means no effect (factor = 1) */ |
| FT_Fixed endCoord; |
| } GX_AxisCoordsRec, *GX_AxisCoords; |
| |
| typedef struct GX_HVarRegion_ |
| { |
| GX_AxisCoords axisList; /* array of axisCount records */ |
| } GX_HVarRegionRec, *GX_HVarRegion; |
| |
| typedef struct GX_HVStoreRec_ /* HVAR item variation store */ |
| { |
| FT_UInt dataCount; |
| GX_HVarData varData; /* array of dataCount records */ |
| /* use outerIndex for this array */ |
| FT_UShort axisCount; |
| FT_UInt regionCount; /* total # regions defined */ |
| GX_HVarRegion varRegionList; |
| |
| } GX_HVStoreRec, *GX_HVStore; |
| |
| typedef struct GX_WidthMapRec_ |
| { |
| FT_UInt mapCount; |
| FT_UInt* outerIndex; /* indices to item var data */ |
| FT_UInt* innerIndex; /* indices to delta set */ |
| } GX_WidthMapRec, *GX_WidthMap; |
| |
| typedef struct GX_HVarRec_ |
| { |
| GX_HVStoreRec itemStore; /* Item Variation Store */ |
| GX_WidthMapRec widthMap; /* Advance Width Mapping */ |
| /* GX_LSBMap LsbMap; Not implemented */ |
| /* GX_RSBMap RsbMap; Not implemented */ |
| } GX_HVarTableRec, *GX_HVarTable; |
| |
| /*************************************************************************/ |
| /* */ |
| /* <Struct> */ |
| /* GX_BlendRec */ |
| /* */ |
| /* <Description> */ |
| /* Data for interpolating a font from a distortable font specified */ |
| /* by the GX *var tables ([fgca]var). */ |
| /* */ |
| /* <Fields> */ |
| /* num_axis :: The number of axes along which interpolation */ |
| /* may happen */ |
| /* */ |
| /* normalizedcoords :: A normalized value (between [-1,1]) indicating */ |
| /* the contribution along each axis to the final */ |
| /* interpolated font. */ |
| /* */ |
| typedef struct GX_BlendRec_ |
| { |
| FT_UInt num_axis; |
| FT_Fixed* normalizedcoords; |
| |
| FT_MM_Var* mmvar; |
| FT_Offset mmvar_len; |
| |
| FT_Bool avar_checked; |
| GX_AVarSegment avar_segment; |
| |
| FT_Bool hvar_checked; |
| GX_HVarTable hvar_table; |
| |
| FT_UInt tuplecount; /* shared tuples in `gvar' */ |
| FT_Fixed* tuplecoords; /* tuplecoords[tuplecount][num_axis] */ |
| |
| FT_UInt gv_glyphcnt; |
| FT_ULong* glyphoffsets; |
| |
| FT_ULong gvar_size; |
| |
| } GX_BlendRec; |
| |
| |
| /*************************************************************************/ |
| /* */ |
| /* <enum> */ |
| /* GX_TupleCountFlags */ |
| /* */ |
| /* <Description> */ |
| /* Flags used within the `TupleCount' field of the `gvar' table. */ |
| /* */ |
| typedef enum GX_TupleCountFlags_ |
| { |
| GX_TC_TUPLES_SHARE_POINT_NUMBERS = 0x8000, |
| GX_TC_RESERVED_TUPLE_FLAGS = 0x7000, |
| GX_TC_TUPLE_COUNT_MASK = 0x0FFF |
| |
| } GX_TupleCountFlags; |
| |
| |
| /*************************************************************************/ |
| /* */ |
| /* <enum> */ |
| /* GX_TupleIndexFlags */ |
| /* */ |
| /* <Description> */ |
| /* Flags used within the `TupleIndex' field of the `gvar' and `cvar' */ |
| /* tables. */ |
| /* */ |
| typedef enum GX_TupleIndexFlags_ |
| { |
| GX_TI_EMBEDDED_TUPLE_COORD = 0x8000, |
| GX_TI_INTERMEDIATE_TUPLE = 0x4000, |
| GX_TI_PRIVATE_POINT_NUMBERS = 0x2000, |
| GX_TI_RESERVED_TUPLE_FLAG = 0x1000, |
| GX_TI_TUPLE_INDEX_MASK = 0x0FFF |
| |
| } GX_TupleIndexFlags; |
| |
| |
| #define TTAG_wght FT_MAKE_TAG( 'w', 'g', 'h', 't' ) |
| #define TTAG_wdth FT_MAKE_TAG( 'w', 'd', 't', 'h' ) |
| #define TTAG_opsz FT_MAKE_TAG( 'o', 'p', 's', 'z' ) |
| #define TTAG_slnt FT_MAKE_TAG( 's', 'l', 'n', 't' ) |
| |
| |
| FT_EXPORT( FT_Error ) |
| TT_Set_MM_Blend( TT_Face face, |
| FT_UInt num_coords, |
| FT_Fixed* coords ); |
| |
| FT_EXPORT( FT_Error ) |
| TT_Set_Var_Design( TT_Face face, |
| FT_UInt num_coords, |
| FT_Fixed* coords ); |
| |
| FT_EXPORT( FT_Error ) |
| TT_Get_MM_Var( TT_Face face, |
| FT_MM_Var* *master ); |
| |
| FT_EXPORT( FT_Error ) |
| TT_Get_Var_Design( TT_Face face, |
| FT_UInt num_coords, |
| FT_Fixed* coords ); |
| |
| FT_EXPORT( FT_Error ) |
| TT_Get_Var_Blend( TT_Face face, |
| FT_UInt num_coords, |
| FT_Fixed* coords ); |
| |
| FT_LOCAL( FT_Error ) |
| tt_face_vary_cvt( TT_Face face, |
| FT_Stream stream ); |
| |
| |
| FT_LOCAL( FT_Error ) |
| TT_Vary_Apply_Glyph_Deltas( TT_Face face, |
| FT_UInt glyph_index, |
| FT_Outline* outline, |
| FT_UInt n_points ); |
| |
| FT_EXPORT( void ) |
| tt_adjust_advance( TT_Face face, |
| FT_UInt gindex, |
| FT_UShort *aadvance ); |
| |
| FT_EXPORT( void ) |
| tt_done_blend( FT_Memory memory, |
| GX_Blend blend ); |
| |
| |
| FT_END_HEADER |
| |
| |
| #endif /* TTGXVAR_H_ */ |
| |
| |
| /* END */ |