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 FT_DEFINE_SERVICE(MultiMasters)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