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