| OLD | NEW |
| (Empty) |
| 1 /***************************************************************************/ | |
| 2 /* */ | |
| 3 /* ftmm.h */ | |
| 4 /* */ | |
| 5 /* FreeType Multiple Master font interface (specification). */ | |
| 6 /* */ | |
| 7 /* Copyright 1996-2001, 2003, 2004, 2006, 2009, 2013 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 __FTMM_H__ | |
| 20 #define __FTMM_H__ | |
| 21 | |
| 22 | |
| 23 #include <ft2build.h> | |
| 24 #include FT_TYPE1_TABLES_H | |
| 25 | |
| 26 | |
| 27 FT_BEGIN_HEADER | |
| 28 | |
| 29 | |
| 30 /*************************************************************************/ | |
| 31 /* */ | |
| 32 /* <Section> */ | |
| 33 /* multiple_masters */ | |
| 34 /* */ | |
| 35 /* <Title> */ | |
| 36 /* Multiple Masters */ | |
| 37 /* */ | |
| 38 /* <Abstract> */ | |
| 39 /* How to manage Multiple Masters fonts. */ | |
| 40 /* */ | |
| 41 /* <Description> */ | |
| 42 /* The following types and functions are used to manage Multiple */ | |
| 43 /* Master fonts, i.e., the selection of specific design instances by */ | |
| 44 /* setting design axis coordinates. */ | |
| 45 /* */ | |
| 46 /* George Williams has extended this interface to make it work with */ | |
| 47 /* both Type~1 Multiple Masters fonts and GX distortable (var) */ | |
| 48 /* fonts. Some of these routines only work with MM fonts, others */ | |
| 49 /* will work with both types. They are similar enough that a */ | |
| 50 /* consistent interface makes sense. */ | |
| 51 /* */ | |
| 52 /*************************************************************************/ | |
| 53 | |
| 54 | |
| 55 /*************************************************************************/ | |
| 56 /* */ | |
| 57 /* <Struct> */ | |
| 58 /* FT_MM_Axis */ | |
| 59 /* */ | |
| 60 /* <Description> */ | |
| 61 /* A simple structure used to model a given axis in design space for */ | |
| 62 /* Multiple Masters fonts. */ | |
| 63 /* */ | |
| 64 /* This structure can't be used for GX var fonts. */ | |
| 65 /* */ | |
| 66 /* <Fields> */ | |
| 67 /* name :: The axis's name. */ | |
| 68 /* */ | |
| 69 /* minimum :: The axis's minimum design coordinate. */ | |
| 70 /* */ | |
| 71 /* maximum :: The axis's maximum design coordinate. */ | |
| 72 /* */ | |
| 73 typedef struct FT_MM_Axis_ | |
| 74 { | |
| 75 FT_String* name; | |
| 76 FT_Long minimum; | |
| 77 FT_Long maximum; | |
| 78 | |
| 79 } FT_MM_Axis; | |
| 80 | |
| 81 | |
| 82 /*************************************************************************/ | |
| 83 /* */ | |
| 84 /* <Struct> */ | |
| 85 /* FT_Multi_Master */ | |
| 86 /* */ | |
| 87 /* <Description> */ | |
| 88 /* A structure used to model the axes and space of a Multiple Masters */ | |
| 89 /* font. */ | |
| 90 /* */ | |
| 91 /* This structure can't be used for GX var fonts. */ | |
| 92 /* */ | |
| 93 /* <Fields> */ | |
| 94 /* num_axis :: Number of axes. Cannot exceed~4. */ | |
| 95 /* */ | |
| 96 /* num_designs :: Number of designs; should be normally 2^num_axis */ | |
| 97 /* even though the Type~1 specification strangely */ | |
| 98 /* allows for intermediate designs to be present. This */ | |
| 99 /* number cannot exceed~16. */ | |
| 100 /* */ | |
| 101 /* axis :: A table of axis descriptors. */ | |
| 102 /* */ | |
| 103 typedef struct FT_Multi_Master_ | |
| 104 { | |
| 105 FT_UInt num_axis; | |
| 106 FT_UInt num_designs; | |
| 107 FT_MM_Axis axis[T1_MAX_MM_AXIS]; | |
| 108 | |
| 109 } FT_Multi_Master; | |
| 110 | |
| 111 | |
| 112 /*************************************************************************/ | |
| 113 /* */ | |
| 114 /* <Struct> */ | |
| 115 /* FT_Var_Axis */ | |
| 116 /* */ | |
| 117 /* <Description> */ | |
| 118 /* A simple structure used to model a given axis in design space for */ | |
| 119 /* Multiple Masters and GX var fonts. */ | |
| 120 /* */ | |
| 121 /* <Fields> */ | |
| 122 /* name :: The axis's name. */ | |
| 123 /* Not always meaningful for GX. */ | |
| 124 /* */ | |
| 125 /* minimum :: The axis's minimum design coordinate. */ | |
| 126 /* */ | |
| 127 /* def :: The axis's default design coordinate. */ | |
| 128 /* FreeType computes meaningful default values for MM; it */ | |
| 129 /* is then an integer value, not in 16.16 format. */ | |
| 130 /* */ | |
| 131 /* maximum :: The axis's maximum design coordinate. */ | |
| 132 /* */ | |
| 133 /* tag :: The axis's tag (the GX equivalent to `name'). */ | |
| 134 /* FreeType provides default values for MM if possible. */ | |
| 135 /* */ | |
| 136 /* strid :: The entry in `name' table (another GX version of */ | |
| 137 /* `name'). */ | |
| 138 /* Not meaningful for MM. */ | |
| 139 /* */ | |
| 140 typedef struct FT_Var_Axis_ | |
| 141 { | |
| 142 FT_String* name; | |
| 143 | |
| 144 FT_Fixed minimum; | |
| 145 FT_Fixed def; | |
| 146 FT_Fixed maximum; | |
| 147 | |
| 148 FT_ULong tag; | |
| 149 FT_UInt strid; | |
| 150 | |
| 151 } FT_Var_Axis; | |
| 152 | |
| 153 | |
| 154 /*************************************************************************/ | |
| 155 /* */ | |
| 156 /* <Struct> */ | |
| 157 /* FT_Var_Named_Style */ | |
| 158 /* */ | |
| 159 /* <Description> */ | |
| 160 /* A simple structure used to model a named style in a GX var font. */ | |
| 161 /* */ | |
| 162 /* This structure can't be used for MM fonts. */ | |
| 163 /* */ | |
| 164 /* <Fields> */ | |
| 165 /* coords :: The design coordinates for this style. */ | |
| 166 /* This is an array with one entry for each axis. */ | |
| 167 /* */ | |
| 168 /* strid :: The entry in `name' table identifying this style. */ | |
| 169 /* */ | |
| 170 typedef struct FT_Var_Named_Style_ | |
| 171 { | |
| 172 FT_Fixed* coords; | |
| 173 FT_UInt strid; | |
| 174 | |
| 175 } FT_Var_Named_Style; | |
| 176 | |
| 177 | |
| 178 /*************************************************************************/ | |
| 179 /* */ | |
| 180 /* <Struct> */ | |
| 181 /* FT_MM_Var */ | |
| 182 /* */ | |
| 183 /* <Description> */ | |
| 184 /* A structure used to model the axes and space of a Multiple Masters */ | |
| 185 /* or GX var distortable font. */ | |
| 186 /* */ | |
| 187 /* Some fields are specific to one format and not to the other. */ | |
| 188 /* */ | |
| 189 /* <Fields> */ | |
| 190 /* num_axis :: The number of axes. The maximum value is~4 for */ | |
| 191 /* MM; no limit in GX. */ | |
| 192 /* */ | |
| 193 /* num_designs :: The number of designs; should be normally */ | |
| 194 /* 2^num_axis for MM fonts. Not meaningful for GX */ | |
| 195 /* (where every glyph could have a different */ | |
| 196 /* number of designs). */ | |
| 197 /* */ | |
| 198 /* num_namedstyles :: The number of named styles; only meaningful for */ | |
| 199 /* GX that allows certain design coordinates to */ | |
| 200 /* have a string ID (in the `name' table) */ | |
| 201 /* associated with them. The font can tell the */ | |
| 202 /* user that, for example, Weight=1.5 is `Bold'. */ | |
| 203 /* */ | |
| 204 /* axis :: A table of axis descriptors. */ | |
| 205 /* GX fonts contain slightly more data than MM. */ | |
| 206 /* */ | |
| 207 /* namedstyles :: A table of named styles. */ | |
| 208 /* Only meaningful with GX. */ | |
| 209 /* */ | |
| 210 typedef struct FT_MM_Var_ | |
| 211 { | |
| 212 FT_UInt num_axis; | |
| 213 FT_UInt num_designs; | |
| 214 FT_UInt num_namedstyles; | |
| 215 FT_Var_Axis* axis; | |
| 216 FT_Var_Named_Style* namedstyle; | |
| 217 | |
| 218 } FT_MM_Var; | |
| 219 | |
| 220 | |
| 221 /*************************************************************************/ | |
| 222 /* */ | |
| 223 /* <Function> */ | |
| 224 /* FT_Get_Multi_Master */ | |
| 225 /* */ | |
| 226 /* <Description> */ | |
| 227 /* Retrieve the Multiple Master descriptor of a given font. */ | |
| 228 /* */ | |
| 229 /* This function can't be used with GX fonts. */ | |
| 230 /* */ | |
| 231 /* <Input> */ | |
| 232 /* face :: A handle to the source face. */ | |
| 233 /* */ | |
| 234 /* <Output> */ | |
| 235 /* amaster :: The Multiple Masters descriptor. */ | |
| 236 /* */ | |
| 237 /* <Return> */ | |
| 238 /* FreeType error code. 0~means success. */ | |
| 239 /* */ | |
| 240 FT_EXPORT( FT_Error ) | |
| 241 FT_Get_Multi_Master( FT_Face face, | |
| 242 FT_Multi_Master *amaster ); | |
| 243 | |
| 244 | |
| 245 /*************************************************************************/ | |
| 246 /* */ | |
| 247 /* <Function> */ | |
| 248 /* FT_Get_MM_Var */ | |
| 249 /* */ | |
| 250 /* <Description> */ | |
| 251 /* Retrieve the Multiple Master/GX var descriptor of a given font. */ | |
| 252 /* */ | |
| 253 /* <Input> */ | |
| 254 /* face :: A handle to the source face. */ | |
| 255 /* */ | |
| 256 /* <Output> */ | |
| 257 /* amaster :: The Multiple Masters/GX var descriptor. */ | |
| 258 /* Allocates a data structure, which the user must free. */ | |
| 259 /* */ | |
| 260 /* <Return> */ | |
| 261 /* FreeType error code. 0~means success. */ | |
| 262 /* */ | |
| 263 FT_EXPORT( FT_Error ) | |
| 264 FT_Get_MM_Var( FT_Face face, | |
| 265 FT_MM_Var* *amaster ); | |
| 266 | |
| 267 | |
| 268 /*************************************************************************/ | |
| 269 /* */ | |
| 270 /* <Function> */ | |
| 271 /* FT_Set_MM_Design_Coordinates */ | |
| 272 /* */ | |
| 273 /* <Description> */ | |
| 274 /* For Multiple Masters fonts, choose an interpolated font design */ | |
| 275 /* through design coordinates. */ | |
| 276 /* */ | |
| 277 /* This function can't be used with GX fonts. */ | |
| 278 /* */ | |
| 279 /* <InOut> */ | |
| 280 /* face :: A handle to the source face. */ | |
| 281 /* */ | |
| 282 /* <Input> */ | |
| 283 /* num_coords :: The number of design coordinates (must be equal to */ | |
| 284 /* the number of axes in the font). */ | |
| 285 /* */ | |
| 286 /* coords :: An array of design coordinates. */ | |
| 287 /* */ | |
| 288 /* <Return> */ | |
| 289 /* FreeType error code. 0~means success. */ | |
| 290 /* */ | |
| 291 FT_EXPORT( FT_Error ) | |
| 292 FT_Set_MM_Design_Coordinates( FT_Face face, | |
| 293 FT_UInt num_coords, | |
| 294 FT_Long* coords ); | |
| 295 | |
| 296 | |
| 297 /*************************************************************************/ | |
| 298 /* */ | |
| 299 /* <Function> */ | |
| 300 /* FT_Set_Var_Design_Coordinates */ | |
| 301 /* */ | |
| 302 /* <Description> */ | |
| 303 /* For Multiple Master or GX Var fonts, choose an interpolated font */ | |
| 304 /* design through design coordinates. */ | |
| 305 /* */ | |
| 306 /* <InOut> */ | |
| 307 /* face :: A handle to the source face. */ | |
| 308 /* */ | |
| 309 /* <Input> */ | |
| 310 /* num_coords :: The number of design coordinates (must be equal to */ | |
| 311 /* the number of axes in the font). */ | |
| 312 /* */ | |
| 313 /* coords :: An array of design coordinates. */ | |
| 314 /* */ | |
| 315 /* <Return> */ | |
| 316 /* FreeType error code. 0~means success. */ | |
| 317 /* */ | |
| 318 FT_EXPORT( FT_Error ) | |
| 319 FT_Set_Var_Design_Coordinates( FT_Face face, | |
| 320 FT_UInt num_coords, | |
| 321 FT_Fixed* coords ); | |
| 322 | |
| 323 | |
| 324 /*************************************************************************/ | |
| 325 /* */ | |
| 326 /* <Function> */ | |
| 327 /* FT_Set_MM_Blend_Coordinates */ | |
| 328 /* */ | |
| 329 /* <Description> */ | |
| 330 /* For Multiple Masters and GX var fonts, choose an interpolated font */ | |
| 331 /* design through normalized blend coordinates. */ | |
| 332 /* */ | |
| 333 /* <InOut> */ | |
| 334 /* face :: A handle to the source face. */ | |
| 335 /* */ | |
| 336 /* <Input> */ | |
| 337 /* num_coords :: The number of design coordinates (must be equal to */ | |
| 338 /* the number of axes in the font). */ | |
| 339 /* */ | |
| 340 /* coords :: The design coordinates array (each element must be */ | |
| 341 /* between 0 and 1.0). */ | |
| 342 /* */ | |
| 343 /* <Return> */ | |
| 344 /* FreeType error code. 0~means success. */ | |
| 345 /* */ | |
| 346 FT_EXPORT( FT_Error ) | |
| 347 FT_Set_MM_Blend_Coordinates( FT_Face face, | |
| 348 FT_UInt num_coords, | |
| 349 FT_Fixed* coords ); | |
| 350 | |
| 351 | |
| 352 /*************************************************************************/ | |
| 353 /* */ | |
| 354 /* <Function> */ | |
| 355 /* FT_Set_Var_Blend_Coordinates */ | |
| 356 /* */ | |
| 357 /* <Description> */ | |
| 358 /* This is another name of @FT_Set_MM_Blend_Coordinates. */ | |
| 359 /* */ | |
| 360 FT_EXPORT( FT_Error ) | |
| 361 FT_Set_Var_Blend_Coordinates( FT_Face face, | |
| 362 FT_UInt num_coords, | |
| 363 FT_Fixed* coords ); | |
| 364 | |
| 365 /* */ | |
| 366 | |
| 367 | |
| 368 FT_END_HEADER | |
| 369 | |
| 370 #endif /* __FTMM_H__ */ | |
| 371 | |
| 372 | |
| 373 /* END */ | |
| OLD | NEW |