1 /**************************************************************************** 2 * 3 * svmm.h 4 * 5 * The FreeType Multiple Masters and GX var services (specification). 6 * 7 * Copyright (C) 2003-2019 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 typedef FT_Error 90 (*FT_Set_MM_WeightVector_Func)( FT_Face face, 91 FT_UInt len, 92 FT_Fixed* weight_vector ); 93 94 typedef FT_Error 95 (*FT_Get_MM_WeightVector_Func)( FT_Face face, 96 FT_UInt* len, 97 FT_Fixed* weight_vector ); 98 99 FT_DEFINE_SERVICE(MultiMasters)100 FT_DEFINE_SERVICE( MultiMasters ) 101 { 102 FT_Get_MM_Func get_mm; 103 FT_Set_MM_Design_Func set_mm_design; 104 FT_Set_MM_Blend_Func set_mm_blend; 105 FT_Get_MM_Blend_Func get_mm_blend; 106 FT_Get_MM_Var_Func get_mm_var; 107 FT_Set_Var_Design_Func set_var_design; 108 FT_Get_Var_Design_Func get_var_design; 109 FT_Set_Instance_Func set_instance; 110 FT_Set_MM_WeightVector_Func set_mm_weightvector; 111 FT_Get_MM_WeightVector_Func get_mm_weightvector; 112 113 /* for internal use; only needed for code sharing between modules */ 114 FT_Get_Var_Blend_Func get_var_blend; 115 FT_Done_Blend_Func done_blend; 116 }; 117 118 119 #define FT_DEFINE_SERVICE_MULTIMASTERSREC( class_, \ 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 set_weightvector_, \ 129 get_weightvector_, \ 130 get_var_blend_, \ 131 done_blend_ ) \ 132 static const FT_Service_MultiMastersRec class_ = \ 133 { \ 134 get_mm_, \ 135 set_mm_design_, \ 136 set_mm_blend_, \ 137 get_mm_blend_, \ 138 get_mm_var_, \ 139 set_var_design_, \ 140 get_var_design_, \ 141 set_instance_, \ 142 set_weightvector_, \ 143 get_weightvector_, \ 144 get_var_blend_, \ 145 done_blend_ \ 146 }; 147 148 /* */ 149 150 151 FT_END_HEADER 152 153 #endif /* SVMM_H_ */ 154 155 156 /* END */ 157