/***************************************************************************/

/*                                                                         */

/*  ttgxvar.h                                                              */

/*                                                                         */

/*    TrueType GX Font Variation loader (specification)                    */

/*                                                                         */

/*  Copyright 2004 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_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_UInt         tuplecount;      /* shared tuples in `gvar'           */

    FT_Fixed*       tuplecoords;     /* tuplecoords[tuplecount][num_axis] */



    FT_UInt         gv_glyphcnt;

    FT_ULong*       glyphoffsets;



  } 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_LOCAL( FT_Error )

  TT_Set_MM_Blend( TT_Face    face,

                   FT_UInt    num_coords,

                   FT_Fixed*  coords );



  FT_LOCAL( FT_Error )

  TT_Set_Var_Design( TT_Face    face,

                     FT_UInt    num_coords,

                     FT_Fixed*  coords );



  FT_LOCAL( FT_Error )

  TT_Get_MM_Var( TT_Face      face,

                 FT_MM_Var*  *master );





  FT_LOCAL( FT_Error )

  tt_face_vary_cvt( TT_Face    face,

                    FT_Stream  stream );





  FT_LOCAL( FT_Error )

  TT_Vary_Get_Glyph_Deltas( TT_Face      face,

                            FT_UInt      glyph_index,

                            FT_Vector*  *deltas,

                            FT_UInt      n_points );





  FT_LOCAL( void )

  tt_done_blend( FT_Memory  memory,

                 GX_Blend   blend );





FT_END_HEADER





#endif /* __TTGXVAR_H__ */





/* END */

