1 /****************************************************************************
   2  *
   3  * svmm.h
   4  *
   5  *   The FreeType Multiple Masters and GX var services (specification).
   6  *
   7  * Copyright (C) 2003-2020 by
   8  * David Turner, Robert Wilhelm, and Werner Lemberg.
   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 SVMM_H_
  20 #define SVMM_H_
  21 
  22 #include FT_INTERNAL_SERVICE_H
  23 
  24 
  25 FT_BEGIN_HEADER
  26 
  27 
  28   /*
  29    * A service used to manage multiple-masters data in a given face.
  30    *
  31    * See the related APIs in `ftmm.h' (FT_MULTIPLE_MASTERS_H).
  32    *
  33    */
  34 
  35 #define FT_SERVICE_ID_MULTI_MASTERS  "multi-masters"
  36 
  37 
  38   typedef FT_Error
  39   (*FT_Get_MM_Func)( FT_Face           face,
  40                      FT_Multi_Master*  master );
  41 
  42   typedef FT_Error
  43   (*FT_Get_MM_Var_Func)( FT_Face      face,
  44                          FT_MM_Var*  *master );
  45 
  46   typedef FT_Error
  47   (*FT_Set_MM_Design_Func)( FT_Face   face,
  48                             FT_UInt   num_coords,
  49                             FT_Long*  coords );
  50 
  51   /* use return value -1 to indicate that the new coordinates  */
  52   /* are equal to the current ones; no changes are thus needed */
  53   typedef FT_Error
  54   (*FT_Set_Var_Design_Func)( FT_Face    face,
  55                              FT_UInt    num_coords,
  56                              FT_Fixed*  coords );
  57 
  58   /* use return value -1 to indicate that the new coordinates  */
  59   /* are equal to the current ones; no changes are thus needed */
  60   typedef FT_Error
  61   (*FT_Set_MM_Blend_Func)( FT_Face   face,
  62                            FT_UInt   num_coords,
  63                            FT_Long*  coords );
  64 
  65   typedef FT_Error
  66   (*FT_Get_Var_Design_Func)( FT_Face    face,
  67                              FT_UInt    num_coords,
  68                              FT_Fixed*  coords );
  69 
  70   typedef FT_Error
  71   (*FT_Set_Instance_Func)( FT_Face  face,
  72                            FT_UInt  instance_index );
  73 
  74   typedef FT_Error
  75   (*FT_Get_MM_Blend_Func)( FT_Face   face,
  76                            FT_UInt   num_coords,
  77                            FT_Long*  coords );
  78 
  79   typedef FT_Error
  80   (*FT_Get_Var_Blend_Func)( FT_Face      face,
  81                             FT_UInt     *num_coords,
  82                             FT_Fixed*   *coords,
  83                             FT_Fixed*   *normalizedcoords,
  84                             FT_MM_Var*  *mm_var );
  85 
  86   typedef void
  87   (*FT_Done_Blend_Func)( FT_Face );
  88 
  89   typedef FT_Error
  90   (*FT_Set_MM_WeightVector_Func)( FT_Face    face,
  91                                   FT_UInt    len,
  92                                   FT_Fixed*  weight_vector );
  93 
  94   typedef FT_Error
  95   (*FT_Get_MM_WeightVector_Func)( FT_Face    face,
  96                                   FT_UInt*   len,
  97                                   FT_Fixed*  weight_vector );
  98 
  99 
 100   FT_DEFINE_SERVICE( MultiMasters )
 101   {
 102     FT_Get_MM_Func               get_mm;
 103     FT_Set_MM_Design_Func        set_mm_design;
 104     FT_Set_MM_Blend_Func         set_mm_blend;
 105     FT_Get_MM_Blend_Func         get_mm_blend;
 106     FT_Get_MM_Var_Func           get_mm_var;
 107     FT_Set_Var_Design_Func       set_var_design;
 108     FT_Get_Var_Design_Func       get_var_design;
 109     FT_Set_Instance_Func         set_instance;
 110     FT_Set_MM_WeightVector_Func  set_mm_weightvector;
 111     FT_Get_MM_WeightVector_Func  get_mm_weightvector;
 112 
 113     /* for internal use; only needed for code sharing between modules */
 114     FT_Get_Var_Blend_Func  get_var_blend;
 115     FT_Done_Blend_Func     done_blend;
 116   };
 117 
 118 
 119 #define FT_DEFINE_SERVICE_MULTIMASTERSREC( class_,            \
 120                                            get_mm_,           \
 121                                            set_mm_design_,    \
 122                                            set_mm_blend_,     \
 123                                            get_mm_blend_,     \
 124                                            get_mm_var_,       \
 125                                            set_var_design_,   \
 126                                            get_var_design_,   \
 127                                            set_instance_,     \
 128                                            set_weightvector_, \
 129                                            get_weightvector_, \
 130                                            get_var_blend_,    \
 131                                            done_blend_ )      \
 132   static const FT_Service_MultiMastersRec  class_ =           \
 133   {                                                           \
 134     get_mm_,                                                  \
 135     set_mm_design_,                                           \
 136     set_mm_blend_,                                            \
 137     get_mm_blend_,                                            \
 138     get_mm_var_,                                              \
 139     set_var_design_,                                          \
 140     get_var_design_,                                          \
 141     set_instance_,                                            \
 142     set_weightvector_,                                        \
 143     get_weightvector_,                                        \
 144     get_var_blend_,                                           \
 145     done_blend_                                               \
 146   };
 147 
 148   /* */
 149 
 150 
 151 FT_END_HEADER
 152 
 153 #endif /* SVMM_H_ */
 154 
 155 
 156 /* END */