• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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