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 #define FT_DEFINE_SERVICE_MULTIMASTERSREC( class_,          \
    108                                            get_mm_,         \
    109                                            set_mm_design_,  \
    110                                            set_mm_blend_,   \
    111                                            get_mm_blend_,   \
    112                                            get_mm_var_,     \
    113                                            set_var_design_, \
    114                                            get_var_design_, \
    115                                            set_instance_,   \
    116                                            get_var_blend_,  \
    117                                            done_blend_ )    \
    118   static const FT_Service_MultiMastersRec  class_ =         \
    119   {                                                         \
    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     get_var_blend_,                                         \
    129     done_blend_                                             \
    130   };
    131 
    132   /* */
    133 
    134 
    135 FT_END_HEADER
    136 
    137 #endif /* SVMM_H_ */
    138 
    139 
    140 /* END */
    141