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, 2004, 2009, 2012 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   typedef FT_Error
     52   (*FT_Set_Var_Design_Func)( FT_Face    face,
     53                              FT_UInt    num_coords,
     54                              FT_Fixed*  coords );
     55 
     56   typedef FT_Error
     57   (*FT_Set_MM_Blend_Func)( FT_Face   face,
     58                            FT_UInt   num_coords,
     59                            FT_Long*  coords );
     60 
     61 
     62   FT_DEFINE_SERVICE( MultiMasters )
     63   {
     64     FT_Get_MM_Func          get_mm;
     65     FT_Set_MM_Design_Func   set_mm_design;
     66     FT_Set_MM_Blend_Func    set_mm_blend;
     67     FT_Get_MM_Var_Func      get_mm_var;
     68     FT_Set_Var_Design_Func  set_var_design;
     69   };
     70 
     71 
     72 #ifndef FT_CONFIG_OPTION_PIC
     73 
     74 #define FT_DEFINE_SERVICE_MULTIMASTERSREC( class_,                          \
     75                                            get_mm_,                         \
     76                                            set_mm_design_,                  \
     77                                            set_mm_blend_,                   \
     78                                            get_mm_var_,                     \
     79                                            set_var_design_ )                \
     80   static const FT_Service_MultiMastersRec  class_ =                         \
     81   {                                                                         \
     82     get_mm_, set_mm_design_, set_mm_blend_, get_mm_var_, set_var_design_    \
     83   };
     84 
     85 #else /* FT_CONFIG_OPTION_PIC */
     86 
     87 #define FT_DEFINE_SERVICE_MULTIMASTERSREC( class_,                          \
     88                                            get_mm_,                         \
     89                                            set_mm_design_,                  \
     90                                            set_mm_blend_,                   \
     91                                            get_mm_var_,                     \
     92                                            set_var_design_ )                \
     93   void                                                                      \
     94   FT_Init_Class_ ## class_( FT_Service_MultiMastersRec*  clazz )            \
     95   {                                                                         \
     96     clazz->get_mm         = get_mm_;                                        \
     97     clazz->set_mm_design  = set_mm_design_;                                 \
     98     clazz->set_mm_blend   = set_mm_blend_;                                  \
     99     clazz->get_mm_var     = get_mm_var_;                                    \
    100     clazz->set_var_design = set_var_design_;                                \
    101   }
    102 
    103 #endif /* FT_CONFIG_OPTION_PIC */
    104 
    105   /* */
    106 
    107 
    108 FT_END_HEADER
    109 
    110 #endif /* __SVMM_H__ */
    111 
    112 
    113 /* END */
    114