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