Home | History | Annotate | Download | only in services
      1 /***************************************************************************/
      2 /*                                                                         */
      3 /*  svmm.h                                                                 */
      4 /*                                                                         */
      5 /*    The FreeType Multiple Masters and GX var services (specification).   */
      6 /*                                                                         */
      7 /*  Copyright 2003-2018 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 
     90   FT_DEFINE_SERVICE( MultiMasters )
     91   {
     92     FT_Get_MM_Func          get_mm;
     93     FT_Set_MM_Design_Func   set_mm_design;
     94     FT_Set_MM_Blend_Func    set_mm_blend;
     95     FT_Get_MM_Blend_Func    get_mm_blend;
     96     FT_Get_MM_Var_Func      get_mm_var;
     97     FT_Set_Var_Design_Func  set_var_design;
     98     FT_Get_Var_Design_Func  get_var_design;
     99     FT_Set_Instance_Func    set_instance;
    100 
    101     /* for internal use; only needed for code sharing between modules */
    102     FT_Get_Var_Blend_Func   get_var_blend;
    103     FT_Done_Blend_Func      done_blend;
    104   };
    105 
    106 
    107 #ifndef FT_CONFIG_OPTION_PIC
    108 
    109 #define FT_DEFINE_SERVICE_MULTIMASTERSREC( class_,          \
    110                                            get_mm_,         \
    111                                            set_mm_design_,  \
    112                                            set_mm_blend_,   \
    113                                            get_mm_blend_,   \
    114                                            get_mm_var_,     \
    115                                            set_var_design_, \
    116                                            get_var_design_, \
    117                                            set_instance_,   \
    118                                            get_var_blend_,  \
    119                                            done_blend_ )    \
    120   static const FT_Service_MultiMastersRec  class_ =         \
    121   {                                                         \
    122     get_mm_,                                                \
    123     set_mm_design_,                                         \
    124     set_mm_blend_,                                          \
    125     get_mm_blend_,                                          \
    126     get_mm_var_,                                            \
    127     set_var_design_,                                        \
    128     get_var_design_,                                        \
    129     set_instance_,                                          \
    130     get_var_blend_,                                         \
    131     done_blend_                                             \
    132   };
    133 
    134 #else /* FT_CONFIG_OPTION_PIC */
    135 
    136 #define FT_DEFINE_SERVICE_MULTIMASTERSREC( class_,               \
    137                                            get_mm_,              \
    138                                            set_mm_design_,       \
    139                                            set_mm_blend_,        \
    140                                            get_mm_blend_,        \
    141                                            get_mm_var_,          \
    142                                            set_var_design_,      \
    143                                            get_var_design_,      \
    144                                            set_instance_,        \
    145                                            get_var_blend_,       \
    146                                            done_blend_ )         \
    147   void                                                           \
    148   FT_Init_Class_ ## class_( FT_Service_MultiMastersRec*  clazz ) \
    149   {                                                              \
    150     clazz->get_mm         = get_mm_;                             \
    151     clazz->set_mm_design  = set_mm_design_;                      \
    152     clazz->set_mm_blend   = set_mm_blend_;                       \
    153     clazz->get_mm_blend   = get_mm_blend_;                       \
    154     clazz->get_mm_var     = get_mm_var_;                         \
    155     clazz->set_var_design = set_var_design_;                     \
    156     clazz->get_var_design = get_var_design_;                     \
    157     clazz->set_instance   = set_instance_;                       \
    158     clazz->get_var_blend  = get_var_blend_;                      \
    159     clazz->done_blend     = done_blend_;                         \
    160   }
    161 
    162 #endif /* FT_CONFIG_OPTION_PIC */
    163 
    164   /* */
    165 
    166 
    167 FT_END_HEADER
    168 
    169 #endif /* SVMM_H_ */
    170 
    171 
    172 /* END */
    173