Home | History | Annotate | Download | only in truetype
      1 /***************************************************************************/
      2 /*                                                                         */
      3 /*  ttgxvar.h                                                              */
      4 /*                                                                         */
      5 /*    TrueType GX Font Variation loader (specification)                    */
      6 /*                                                                         */
      7 /*  Copyright 2004-2015 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_Apply_Glyph_Deltas( TT_Face      face,
    166                               FT_UInt      glyph_index,
    167                               FT_Outline*  outline,
    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