blob: 94300d9623f2d1e6db8076c3bcbddc70961b6c22 [file] [log] [blame]
/***************************************************************************/
/* */
/* 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 */