1 /***************************************************************************/ 2 /* */ 3 /* ttgxvar.h */ 4 /* */ 5 /* TrueType GX Font Variation loader (specification) */ 6 /* */ 7 /* Copyright 2004 by */ 8 /* David Turner, Robert Wilhelm, Werner Lemberg and George Williams. */ 9 /* */ 10 /* This file is part of the FreeType project, and may only be used, */ 11 /* modified, and distributed under the terms of the FreeType project */ 12 /* license, LICENSE.TXT. By continuing to use, modify, or distribute */ 13 /* this file you indicate that you have read the license and */ 14 /* understand and accept it fully. */ 15 /* */ 16 /***************************************************************************/ 17 18 19 #ifndef __TTGXVAR_H__ 20 #define __TTGXVAR_H__ 21 22 23 #include <ft2build.h> 24 #include "ttobjs.h" 25 26 27 FT_BEGIN_HEADER 28 29 30 /*************************************************************************/ 31 /* */ 32 /* <Struct> */ 33 /* GX_AVarCorrespondenceRec */ 34 /* */ 35 /* <Description> */ 36 /* A data structure representing `shortFracCorrespondence' in `avar' */ 37 /* table according to the specifications from Apple. */ 38 /* */ 39 typedef struct GX_AVarCorrespondenceRec_ 40 { 41 FT_Fixed fromCoord; 42 FT_Fixed toCoord; 43 44 } GX_AVarCorrespondenceRec_, *GX_AVarCorrespondence; 45 46 47 /*************************************************************************/ 48 /* */ 49 /* <Struct> */ 50 /* GX_AVarRec */ 51 /* */ 52 /* <Description> */ 53 /* Data from the segment field of `avar' table. */ 54 /* There is one of these for each axis. */ 55 /* */ 56 typedef struct GX_AVarSegmentRec_ 57 { 58 FT_UShort pairCount; 59 GX_AVarCorrespondence correspondence; /* array with pairCount entries */ 60 61 } GX_AVarSegmentRec, *GX_AVarSegment; 62 63 64 /*************************************************************************/ 65 /* */ 66 /* <Struct> */ 67 /* GX_BlendRec */ 68 /* */ 69 /* <Description> */ 70 /* Data for interpolating a font from a distortable font specified */ 71 /* by the GX *var tables ([fgca]var). */ 72 /* */ 73 /* <Fields> */ 74 /* num_axis :: The number of axes along which interpolation */ 75 /* may happen */ 76 /* */ 77 /* normalizedcoords :: A normalized value (between [-1,1]) indicating */ 78 /* the contribution along each axis to the final */ 79 /* interpolated font. */ 80 /* */ 81 typedef struct GX_BlendRec_ 82 { 83 FT_UInt num_axis; 84 FT_Fixed* normalizedcoords; 85 86 FT_MM_Var* mmvar; 87 FT_Offset mmvar_len; 88 89 FT_Bool avar_checked; 90 GX_AVarSegment avar_segment; 91 92 FT_UInt tuplecount; /* shared tuples in `gvar' */ 93 FT_Fixed* tuplecoords; /* tuplecoords[tuplecount][num_axis] */ 94 95 FT_UInt gv_glyphcnt; 96 FT_ULong* glyphoffsets; 97 98 } GX_BlendRec; 99 100 101 /*************************************************************************/ 102 /* */ 103 /* <enum> */ 104 /* GX_TupleCountFlags */ 105 /* */ 106 /* <Description> */ 107 /* Flags used within the `TupleCount' field of the `gvar' table. */ 108 /* */ 109 typedef enum GX_TupleCountFlags_ 110 { 111 GX_TC_TUPLES_SHARE_POINT_NUMBERS = 0x8000, 112 GX_TC_RESERVED_TUPLE_FLAGS = 0x7000, 113 GX_TC_TUPLE_COUNT_MASK = 0x0FFF 114 115 } GX_TupleCountFlags; 116 117 118 /*************************************************************************/ 119 /* */ 120 /* <enum> */ 121 /* GX_TupleIndexFlags */ 122 /* */ 123 /* <Description> */ 124 /* Flags used within the `TupleIndex' field of the `gvar' and `cvar' */ 125 /* tables. */ 126 /* */ 127 typedef enum GX_TupleIndexFlags_ 128 { 129 GX_TI_EMBEDDED_TUPLE_COORD = 0x8000, 130 GX_TI_INTERMEDIATE_TUPLE = 0x4000, 131 GX_TI_PRIVATE_POINT_NUMBERS = 0x2000, 132 GX_TI_RESERVED_TUPLE_FLAG = 0x1000, 133 GX_TI_TUPLE_INDEX_MASK = 0x0FFF 134 135 } GX_TupleIndexFlags; 136 137 138 #define TTAG_wght FT_MAKE_TAG( 'w', 'g', 'h', 't' ) 139 #define TTAG_wdth FT_MAKE_TAG( 'w', 'd', 't', 'h' ) 140 #define TTAG_opsz FT_MAKE_TAG( 'o', 'p', 's', 'z' ) 141 #define TTAG_slnt FT_MAKE_TAG( 's', 'l', 'n', 't' ) 142 143 144 FT_LOCAL( FT_Error ) 145 TT_Set_MM_Blend( TT_Face face, 146 FT_UInt num_coords, 147 FT_Fixed* coords ); 148 149 FT_LOCAL( FT_Error ) 150 TT_Set_Var_Design( TT_Face face, 151 FT_UInt num_coords, 152 FT_Fixed* coords ); 153 154 FT_LOCAL( FT_Error ) 155 TT_Get_MM_Var( TT_Face face, 156 FT_MM_Var* *master ); 157 158 159 FT_LOCAL( FT_Error ) 160 tt_face_vary_cvt( TT_Face face, 161 FT_Stream stream ); 162 163 164 FT_LOCAL( FT_Error ) 165 TT_Vary_Get_Glyph_Deltas( TT_Face face, 166 FT_UInt glyph_index, 167 FT_Vector* *deltas, 168 FT_UInt n_points ); 169 170 171 FT_LOCAL( void ) 172 tt_done_blend( FT_Memory memory, 173 GX_Blend blend ); 174 175 176 FT_END_HEADER 177 178 179 #endif /* __TTGXVAR_H__ */ 180 181 182 /* END */ 183