1 /***************************************************************************/ 2 /* */ 3 /* svmetric.h */ 4 /* */ 5 /* The FreeType services for metrics variations (specification). */ 6 /* */ 7 /* Copyright 2016-2017 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 SVMETRIC_H_ 20 #define SVMETRIC_H_ 21 22 #include FT_INTERNAL_SERVICE_H 23 24 25 FT_BEGIN_HEADER 26 27 28 /* 29 * A service to manage the `HVAR, `MVAR', and `VVAR' OpenType tables. 30 * 31 */ 32 33 #define FT_SERVICE_ID_METRICS_VARIATIONS "metrics-variations" 34 35 36 /* HVAR */ 37 38 typedef FT_Error 39 (*FT_HAdvance_Adjust_Func)( FT_Face face, 40 FT_UInt gindex, 41 FT_Int *avalue ); 42 43 typedef FT_Error 44 (*FT_LSB_Adjust_Func)( FT_Face face, 45 FT_UInt gindex, 46 FT_Int *avalue ); 47 48 typedef FT_Error 49 (*FT_RSB_Adjust_Func)( FT_Face face, 50 FT_UInt gindex, 51 FT_Int *avalue ); 52 53 /* VVAR */ 54 55 typedef FT_Error 56 (*FT_VAdvance_Adjust_Func)( FT_Face face, 57 FT_UInt gindex, 58 FT_Int *avalue ); 59 60 typedef FT_Error 61 (*FT_TSB_Adjust_Func)( FT_Face face, 62 FT_UInt gindex, 63 FT_Int *avalue ); 64 65 typedef FT_Error 66 (*FT_BSB_Adjust_Func)( FT_Face face, 67 FT_UInt gindex, 68 FT_Int *avalue ); 69 70 typedef FT_Error 71 (*FT_VOrg_Adjust_Func)( FT_Face face, 72 FT_UInt gindex, 73 FT_Int *avalue ); 74 75 /* MVAR */ 76 77 typedef void 78 (*FT_Metrics_Adjust_Func)( FT_Face face ); 79 80 FT_DEFINE_SERVICE(MetricsVariations)81 FT_DEFINE_SERVICE( MetricsVariations ) 82 { 83 FT_HAdvance_Adjust_Func hadvance_adjust; 84 FT_LSB_Adjust_Func lsb_adjust; 85 FT_RSB_Adjust_Func rsb_adjust; 86 87 FT_VAdvance_Adjust_Func vadvance_adjust; 88 FT_TSB_Adjust_Func tsb_adjust; 89 FT_BSB_Adjust_Func bsb_adjust; 90 FT_VOrg_Adjust_Func vorg_adjust; 91 92 FT_Metrics_Adjust_Func metrics_adjust; 93 }; 94 95 96 #ifndef FT_CONFIG_OPTION_PIC 97 98 #define FT_DEFINE_SERVICE_METRICSVARIATIONSREC( class_, \ 99 hadvance_adjust_, \ 100 lsb_adjust_, \ 101 rsb_adjust_, \ 102 vadvance_adjust_, \ 103 tsb_adjust_, \ 104 bsb_adjust_, \ 105 vorg_adjust_, \ 106 metrics_adjust_ ) \ 107 static const FT_Service_MetricsVariationsRec class_ = \ 108 { \ 109 hadvance_adjust_, \ 110 lsb_adjust_, \ 111 rsb_adjust_, \ 112 vadvance_adjust_, \ 113 tsb_adjust_, \ 114 bsb_adjust_, \ 115 vorg_adjust_, \ 116 metrics_adjust_ \ 117 }; 118 119 #else /* FT_CONFIG_OPTION_PIC */ 120 121 #define FT_DEFINE_SERVICE_METRICSVARIATIONSREC( class_, \ 122 hadvance_adjust_, \ 123 lsb_adjust_, \ 124 rsb_adjust_, \ 125 vadvance_adjust_, \ 126 tsb_adjust_, \ 127 bsb_adjust_, \ 128 vorg_adjust_, \ 129 metrics_adjust_ ) \ 130 void \ 131 FT_Init_Class_ ## class_( FT_Service_MetricsVariationsRec* clazz ) \ 132 { \ 133 clazz->hadvance_adjust = hadvance_adjust_; \ 134 clazz->lsb_adjust = lsb_adjust_; \ 135 clazz->rsb_adjust = rsb_adjust_; \ 136 clazz->vadvance_adjust = vadvance_adjust_; \ 137 clazz->tsb_adjust = tsb_adjust_; \ 138 clazz->bsb_adjust = bsb_adjust_; \ 139 clazz->vorg_adjust = vorg_adjust_; \ 140 clazz->metrics_adjust = metrics_adjust_; \ 141 } 142 143 #endif /* FT_CONFIG_OPTION_PIC */ 144 145 /* */ 146 147 148 FT_END_HEADER 149 150 #endif /* SVMETRIC_H_ */ 151 152 153 /* END */ 154