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 #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