| OLD | NEW |
| (Empty) |
| 1 /***************************************************************************/ | |
| 2 /* */ | |
| 3 /* ftoutln.h */ | |
| 4 /* */ | |
| 5 /* Support for the FT_Outline type used to store glyph shapes of */ | |
| 6 /* most scalable font formats (specification). */ | |
| 7 /* */ | |
| 8 /* Copyright 1996-2003, 2005-2014 by */ | |
| 9 /* David Turner, Robert Wilhelm, and Werner Lemberg. */ | |
| 10 /* */ | |
| 11 /* This file is part of the FreeType project, and may only be used, */ | |
| 12 /* modified, and distributed under the terms of the FreeType project */ | |
| 13 /* license, LICENSE.TXT. By continuing to use, modify, or distribute */ | |
| 14 /* this file you indicate that you have read the license and */ | |
| 15 /* understand and accept it fully. */ | |
| 16 /* */ | |
| 17 /***************************************************************************/ | |
| 18 | |
| 19 | |
| 20 #ifndef __FTOUTLN_H__ | |
| 21 #define __FTOUTLN_H__ | |
| 22 | |
| 23 | |
| 24 #include <ft2build.h> | |
| 25 #include FT_FREETYPE_H | |
| 26 | |
| 27 #ifdef FREETYPE_H | |
| 28 #error "freetype.h of FreeType 1 has been loaded!" | |
| 29 #error "Please fix the directory search order for header files" | |
| 30 #error "so that freetype.h of FreeType 2 is found first." | |
| 31 #endif | |
| 32 | |
| 33 | |
| 34 FT_BEGIN_HEADER | |
| 35 | |
| 36 | |
| 37 /*************************************************************************/ | |
| 38 /* */ | |
| 39 /* <Section> */ | |
| 40 /* outline_processing */ | |
| 41 /* */ | |
| 42 /* <Title> */ | |
| 43 /* Outline Processing */ | |
| 44 /* */ | |
| 45 /* <Abstract> */ | |
| 46 /* Functions to create, transform, and render vectorial glyph images. */ | |
| 47 /* */ | |
| 48 /* <Description> */ | |
| 49 /* This section contains routines used to create and destroy scalable */ | |
| 50 /* glyph images known as `outlines'. These can also be measured, */ | |
| 51 /* transformed, and converted into bitmaps and pixmaps. */ | |
| 52 /* */ | |
| 53 /* <Order> */ | |
| 54 /* FT_Outline */ | |
| 55 /* FT_Outline_New */ | |
| 56 /* FT_Outline_Done */ | |
| 57 /* FT_Outline_Copy */ | |
| 58 /* FT_Outline_Translate */ | |
| 59 /* FT_Outline_Transform */ | |
| 60 /* FT_Outline_Embolden */ | |
| 61 /* FT_Outline_EmboldenXY */ | |
| 62 /* FT_Outline_Reverse */ | |
| 63 /* FT_Outline_Check */ | |
| 64 /* */ | |
| 65 /* FT_Outline_Get_CBox */ | |
| 66 /* FT_Outline_Get_BBox */ | |
| 67 /* */ | |
| 68 /* FT_Outline_Get_Bitmap */ | |
| 69 /* FT_Outline_Render */ | |
| 70 /* FT_Outline_Decompose */ | |
| 71 /* FT_Outline_Funcs */ | |
| 72 /* FT_Outline_MoveToFunc */ | |
| 73 /* FT_Outline_LineToFunc */ | |
| 74 /* FT_Outline_ConicToFunc */ | |
| 75 /* FT_Outline_CubicToFunc */ | |
| 76 /* */ | |
| 77 /* FT_Orientation */ | |
| 78 /* FT_Outline_Get_Orientation */ | |
| 79 /* */ | |
| 80 /* FT_OUTLINE_XXX */ | |
| 81 /* */ | |
| 82 /*************************************************************************/ | |
| 83 | |
| 84 | |
| 85 /*************************************************************************/ | |
| 86 /* */ | |
| 87 /* <Function> */ | |
| 88 /* FT_Outline_Decompose */ | |
| 89 /* */ | |
| 90 /* <Description> */ | |
| 91 /* Walk over an outline's structure to decompose it into individual */ | |
| 92 /* segments and Bézier arcs. This function also emits `move to' */ | |
| 93 /* operations to indicate the start of new contours in the outline. */ | |
| 94 /* */ | |
| 95 /* <Input> */ | |
| 96 /* outline :: A pointer to the source target. */ | |
| 97 /* */ | |
| 98 /* func_interface :: A table of `emitters', i.e., function pointers */ | |
| 99 /* called during decomposition to indicate path */ | |
| 100 /* operations. */ | |
| 101 /* */ | |
| 102 /* <InOut> */ | |
| 103 /* user :: A typeless pointer that is passed to each */ | |
| 104 /* emitter during the decomposition. It can be */ | |
| 105 /* used to store the state during the */ | |
| 106 /* decomposition. */ | |
| 107 /* */ | |
| 108 /* <Return> */ | |
| 109 /* FreeType error code. 0~means success. */ | |
| 110 /* */ | |
| 111 /* <Note> */ | |
| 112 /* A contour that contains a single point only is represented by a */ | |
| 113 /* `move to' operation followed by `line to' to the same point. In */ | |
| 114 /* most cases, it is best to filter this out before using the */ | |
| 115 /* outline for stroking purposes (otherwise it would result in a */ | |
| 116 /* visible dot when round caps are used). */ | |
| 117 /* */ | |
| 118 FT_EXPORT( FT_Error ) | |
| 119 FT_Outline_Decompose( FT_Outline* outline, | |
| 120 const FT_Outline_Funcs* func_interface, | |
| 121 void* user ); | |
| 122 | |
| 123 | |
| 124 /*************************************************************************/ | |
| 125 /* */ | |
| 126 /* <Function> */ | |
| 127 /* FT_Outline_New */ | |
| 128 /* */ | |
| 129 /* <Description> */ | |
| 130 /* Create a new outline of a given size. */ | |
| 131 /* */ | |
| 132 /* <Input> */ | |
| 133 /* library :: A handle to the library object from where the */ | |
| 134 /* outline is allocated. Note however that the new */ | |
| 135 /* outline will *not* necessarily be *freed*, when */ | |
| 136 /* destroying the library, by @FT_Done_FreeType. */ | |
| 137 /* */ | |
| 138 /* numPoints :: The maximum number of points within the outline. */ | |
| 139 /* Must be smaller than or equal to 0xFFFF (65535). */ | |
| 140 /* */ | |
| 141 /* numContours :: The maximum number of contours within the outline. */ | |
| 142 /* This value must be in the range 0 to `numPoints'. */ | |
| 143 /* */ | |
| 144 /* <Output> */ | |
| 145 /* anoutline :: A handle to the new outline. */ | |
| 146 /* */ | |
| 147 /* <Return> */ | |
| 148 /* FreeType error code. 0~means success. */ | |
| 149 /* */ | |
| 150 /* <Note> */ | |
| 151 /* The reason why this function takes a `library' parameter is simply */ | |
| 152 /* to use the library's memory allocator. */ | |
| 153 /* */ | |
| 154 FT_EXPORT( FT_Error ) | |
| 155 FT_Outline_New( FT_Library library, | |
| 156 FT_UInt numPoints, | |
| 157 FT_Int numContours, | |
| 158 FT_Outline *anoutline ); | |
| 159 | |
| 160 | |
| 161 FT_EXPORT( FT_Error ) | |
| 162 FT_Outline_New_Internal( FT_Memory memory, | |
| 163 FT_UInt numPoints, | |
| 164 FT_Int numContours, | |
| 165 FT_Outline *anoutline ); | |
| 166 | |
| 167 | |
| 168 /*************************************************************************/ | |
| 169 /* */ | |
| 170 /* <Function> */ | |
| 171 /* FT_Outline_Done */ | |
| 172 /* */ | |
| 173 /* <Description> */ | |
| 174 /* Destroy an outline created with @FT_Outline_New. */ | |
| 175 /* */ | |
| 176 /* <Input> */ | |
| 177 /* library :: A handle of the library object used to allocate the */ | |
| 178 /* outline. */ | |
| 179 /* */ | |
| 180 /* outline :: A pointer to the outline object to be discarded. */ | |
| 181 /* */ | |
| 182 /* <Return> */ | |
| 183 /* FreeType error code. 0~means success. */ | |
| 184 /* */ | |
| 185 /* <Note> */ | |
| 186 /* If the outline's `owner' field is not set, only the outline */ | |
| 187 /* descriptor will be released. */ | |
| 188 /* */ | |
| 189 /* The reason why this function takes an `library' parameter is */ | |
| 190 /* simply to use ft_mem_free(). */ | |
| 191 /* */ | |
| 192 FT_EXPORT( FT_Error ) | |
| 193 FT_Outline_Done( FT_Library library, | |
| 194 FT_Outline* outline ); | |
| 195 | |
| 196 | |
| 197 FT_EXPORT( FT_Error ) | |
| 198 FT_Outline_Done_Internal( FT_Memory memory, | |
| 199 FT_Outline* outline ); | |
| 200 | |
| 201 | |
| 202 /*************************************************************************/ | |
| 203 /* */ | |
| 204 /* <Function> */ | |
| 205 /* FT_Outline_Check */ | |
| 206 /* */ | |
| 207 /* <Description> */ | |
| 208 /* Check the contents of an outline descriptor. */ | |
| 209 /* */ | |
| 210 /* <Input> */ | |
| 211 /* outline :: A handle to a source outline. */ | |
| 212 /* */ | |
| 213 /* <Return> */ | |
| 214 /* FreeType error code. 0~means success. */ | |
| 215 /* */ | |
| 216 FT_EXPORT( FT_Error ) | |
| 217 FT_Outline_Check( FT_Outline* outline ); | |
| 218 | |
| 219 | |
| 220 /*************************************************************************/ | |
| 221 /* */ | |
| 222 /* <Function> */ | |
| 223 /* FT_Outline_Get_CBox */ | |
| 224 /* */ | |
| 225 /* <Description> */ | |
| 226 /* Return an outline's `control box'. The control box encloses all */ | |
| 227 /* the outline's points, including Bézier control points. Though it */ | |
| 228 /* coincides with the exact bounding box for most glyphs, it can be */ | |
| 229 /* slightly larger in some situations (like when rotating an outline */ | |
| 230 /* that contains Bézier outside arcs). */ | |
| 231 /* */ | |
| 232 /* Computing the control box is very fast, while getting the bounding */ | |
| 233 /* box can take much more time as it needs to walk over all segments */ | |
| 234 /* and arcs in the outline. To get the latter, you can use the */ | |
| 235 /* `ftbbox' component, which is dedicated to this single task. */ | |
| 236 /* */ | |
| 237 /* <Input> */ | |
| 238 /* outline :: A pointer to the source outline descriptor. */ | |
| 239 /* */ | |
| 240 /* <Output> */ | |
| 241 /* acbox :: The outline's control box. */ | |
| 242 /* */ | |
| 243 /* <Note> */ | |
| 244 /* See @FT_Glyph_Get_CBox for a discussion of tricky fonts. */ | |
| 245 /* */ | |
| 246 FT_EXPORT( void ) | |
| 247 FT_Outline_Get_CBox( const FT_Outline* outline, | |
| 248 FT_BBox *acbox ); | |
| 249 | |
| 250 | |
| 251 /*************************************************************************/ | |
| 252 /* */ | |
| 253 /* <Function> */ | |
| 254 /* FT_Outline_Translate */ | |
| 255 /* */ | |
| 256 /* <Description> */ | |
| 257 /* Apply a simple translation to the points of an outline. */ | |
| 258 /* */ | |
| 259 /* <InOut> */ | |
| 260 /* outline :: A pointer to the target outline descriptor. */ | |
| 261 /* */ | |
| 262 /* <Input> */ | |
| 263 /* xOffset :: The horizontal offset. */ | |
| 264 /* */ | |
| 265 /* yOffset :: The vertical offset. */ | |
| 266 /* */ | |
| 267 FT_EXPORT( void ) | |
| 268 FT_Outline_Translate( const FT_Outline* outline, | |
| 269 FT_Pos xOffset, | |
| 270 FT_Pos yOffset ); | |
| 271 | |
| 272 | |
| 273 /*************************************************************************/ | |
| 274 /* */ | |
| 275 /* <Function> */ | |
| 276 /* FT_Outline_Copy */ | |
| 277 /* */ | |
| 278 /* <Description> */ | |
| 279 /* Copy an outline into another one. Both objects must have the */ | |
| 280 /* same sizes (number of points & number of contours) when this */ | |
| 281 /* function is called. */ | |
| 282 /* */ | |
| 283 /* <Input> */ | |
| 284 /* source :: A handle to the source outline. */ | |
| 285 /* */ | |
| 286 /* <Output> */ | |
| 287 /* target :: A handle to the target outline. */ | |
| 288 /* */ | |
| 289 /* <Return> */ | |
| 290 /* FreeType error code. 0~means success. */ | |
| 291 /* */ | |
| 292 FT_EXPORT( FT_Error ) | |
| 293 FT_Outline_Copy( const FT_Outline* source, | |
| 294 FT_Outline *target ); | |
| 295 | |
| 296 | |
| 297 /*************************************************************************/ | |
| 298 /* */ | |
| 299 /* <Function> */ | |
| 300 /* FT_Outline_Transform */ | |
| 301 /* */ | |
| 302 /* <Description> */ | |
| 303 /* Apply a simple 2x2 matrix to all of an outline's points. Useful */ | |
| 304 /* for applying rotations, slanting, flipping, etc. */ | |
| 305 /* */ | |
| 306 /* <InOut> */ | |
| 307 /* outline :: A pointer to the target outline descriptor. */ | |
| 308 /* */ | |
| 309 /* <Input> */ | |
| 310 /* matrix :: A pointer to the transformation matrix. */ | |
| 311 /* */ | |
| 312 /* <Note> */ | |
| 313 /* You can use @FT_Outline_Translate if you need to translate the */ | |
| 314 /* outline's points. */ | |
| 315 /* */ | |
| 316 FT_EXPORT( void ) | |
| 317 FT_Outline_Transform( const FT_Outline* outline, | |
| 318 const FT_Matrix* matrix ); | |
| 319 | |
| 320 | |
| 321 /*************************************************************************/ | |
| 322 /* */ | |
| 323 /* <Function> */ | |
| 324 /* FT_Outline_Embolden */ | |
| 325 /* */ | |
| 326 /* <Description> */ | |
| 327 /* Embolden an outline. The new outline will be at most 4~times */ | |
| 328 /* `strength' pixels wider and higher. You may think of the left and */ | |
| 329 /* bottom borders as unchanged. */ | |
| 330 /* */ | |
| 331 /* Negative `strength' values to reduce the outline thickness are */ | |
| 332 /* possible also. */ | |
| 333 /* */ | |
| 334 /* <InOut> */ | |
| 335 /* outline :: A handle to the target outline. */ | |
| 336 /* */ | |
| 337 /* <Input> */ | |
| 338 /* strength :: How strong the glyph is emboldened. Expressed in */ | |
| 339 /* 26.6 pixel format. */ | |
| 340 /* */ | |
| 341 /* <Return> */ | |
| 342 /* FreeType error code. 0~means success. */ | |
| 343 /* */ | |
| 344 /* <Note> */ | |
| 345 /* The used algorithm to increase or decrease the thickness of the */ | |
| 346 /* glyph doesn't change the number of points; this means that certain */ | |
| 347 /* situations like acute angles or intersections are sometimes */ | |
| 348 /* handled incorrectly. */ | |
| 349 /* */ | |
| 350 /* If you need `better' metrics values you should call */ | |
| 351 /* @FT_Outline_Get_CBox or @FT_Outline_Get_BBox. */ | |
| 352 /* */ | |
| 353 /* Example call: */ | |
| 354 /* */ | |
| 355 /* { */ | |
| 356 /* FT_Load_Glyph( face, index, FT_LOAD_DEFAULT ); */ | |
| 357 /* if ( face->slot->format == FT_GLYPH_FORMAT_OUTLINE ) */ | |
| 358 /* FT_Outline_Embolden( &face->slot->outline, strength ); */ | |
| 359 /* } */ | |
| 360 /* */ | |
| 361 /* To get meaningful results, font scaling values must be set with */ | |
| 362 /* functions like @FT_Set_Char_Size before calling FT_Render_Glyph. */ | |
| 363 /* */ | |
| 364 FT_EXPORT( FT_Error ) | |
| 365 FT_Outline_Embolden( FT_Outline* outline, | |
| 366 FT_Pos strength ); | |
| 367 | |
| 368 | |
| 369 /*************************************************************************/ | |
| 370 /* */ | |
| 371 /* <Function> */ | |
| 372 /* FT_Outline_EmboldenXY */ | |
| 373 /* */ | |
| 374 /* <Description> */ | |
| 375 /* Embolden an outline. The new outline will be `xstrength' pixels */ | |
| 376 /* wider and `ystrength' pixels higher. Otherwise, it is similar to */ | |
| 377 /* @FT_Outline_Embolden, which uses the same strength in both */ | |
| 378 /* directions. */ | |
| 379 /* */ | |
| 380 FT_EXPORT( FT_Error ) | |
| 381 FT_Outline_EmboldenXY( FT_Outline* outline, | |
| 382 FT_Pos xstrength, | |
| 383 FT_Pos ystrength ); | |
| 384 | |
| 385 | |
| 386 /*************************************************************************/ | |
| 387 /* */ | |
| 388 /* <Function> */ | |
| 389 /* FT_Outline_Reverse */ | |
| 390 /* */ | |
| 391 /* <Description> */ | |
| 392 /* Reverse the drawing direction of an outline. This is used to */ | |
| 393 /* ensure consistent fill conventions for mirrored glyphs. */ | |
| 394 /* */ | |
| 395 /* <InOut> */ | |
| 396 /* outline :: A pointer to the target outline descriptor. */ | |
| 397 /* */ | |
| 398 /* <Note> */ | |
| 399 /* This function toggles the bit flag @FT_OUTLINE_REVERSE_FILL in */ | |
| 400 /* the outline's `flags' field. */ | |
| 401 /* */ | |
| 402 /* It shouldn't be used by a normal client application, unless it */ | |
| 403 /* knows what it is doing. */ | |
| 404 /* */ | |
| 405 FT_EXPORT( void ) | |
| 406 FT_Outline_Reverse( FT_Outline* outline ); | |
| 407 | |
| 408 | |
| 409 /*************************************************************************/ | |
| 410 /* */ | |
| 411 /* <Function> */ | |
| 412 /* FT_Outline_Get_Bitmap */ | |
| 413 /* */ | |
| 414 /* <Description> */ | |
| 415 /* Render an outline within a bitmap. The outline's image is simply */ | |
| 416 /* OR-ed to the target bitmap. */ | |
| 417 /* */ | |
| 418 /* <Input> */ | |
| 419 /* library :: A handle to a FreeType library object. */ | |
| 420 /* */ | |
| 421 /* outline :: A pointer to the source outline descriptor. */ | |
| 422 /* */ | |
| 423 /* <InOut> */ | |
| 424 /* abitmap :: A pointer to the target bitmap descriptor. */ | |
| 425 /* */ | |
| 426 /* <Return> */ | |
| 427 /* FreeType error code. 0~means success. */ | |
| 428 /* */ | |
| 429 /* <Note> */ | |
| 430 /* This function does NOT CREATE the bitmap, it only renders an */ | |
| 431 /* outline image within the one you pass to it! Consequently, the */ | |
| 432 /* various fields in `abitmap' should be set accordingly. */ | |
| 433 /* */ | |
| 434 /* It will use the raster corresponding to the default glyph format. */ | |
| 435 /* */ | |
| 436 /* The value of the `num_grays' field in `abitmap' is ignored. If */ | |
| 437 /* you select the gray-level rasterizer, and you want less than 256 */ | |
| 438 /* gray levels, you have to use @FT_Outline_Render directly. */ | |
| 439 /* */ | |
| 440 FT_EXPORT( FT_Error ) | |
| 441 FT_Outline_Get_Bitmap( FT_Library library, | |
| 442 FT_Outline* outline, | |
| 443 const FT_Bitmap *abitmap ); | |
| 444 | |
| 445 | |
| 446 /*************************************************************************/ | |
| 447 /* */ | |
| 448 /* <Function> */ | |
| 449 /* FT_Outline_Render */ | |
| 450 /* */ | |
| 451 /* <Description> */ | |
| 452 /* Render an outline within a bitmap using the current scan-convert. */ | |
| 453 /* This function uses an @FT_Raster_Params structure as an argument, */ | |
| 454 /* allowing advanced features like direct composition, translucency, */ | |
| 455 /* etc. */ | |
| 456 /* */ | |
| 457 /* <Input> */ | |
| 458 /* library :: A handle to a FreeType library object. */ | |
| 459 /* */ | |
| 460 /* outline :: A pointer to the source outline descriptor. */ | |
| 461 /* */ | |
| 462 /* <InOut> */ | |
| 463 /* params :: A pointer to an @FT_Raster_Params structure used to */ | |
| 464 /* describe the rendering operation. */ | |
| 465 /* */ | |
| 466 /* <Return> */ | |
| 467 /* FreeType error code. 0~means success. */ | |
| 468 /* */ | |
| 469 /* <Note> */ | |
| 470 /* You should know what you are doing and how @FT_Raster_Params works */ | |
| 471 /* to use this function. */ | |
| 472 /* */ | |
| 473 /* The field `params.source' will be set to `outline' before the scan */ | |
| 474 /* converter is called, which means that the value you give to it is */ | |
| 475 /* actually ignored. */ | |
| 476 /* */ | |
| 477 /* The gray-level rasterizer always uses 256 gray levels. If you */ | |
| 478 /* want less gray levels, you have to provide your own span callback. */ | |
| 479 /* See the @FT_RASTER_FLAG_DIRECT value of the `flags' field in the */ | |
| 480 /* @FT_Raster_Params structure for more details. */ | |
| 481 /* */ | |
| 482 FT_EXPORT( FT_Error ) | |
| 483 FT_Outline_Render( FT_Library library, | |
| 484 FT_Outline* outline, | |
| 485 FT_Raster_Params* params ); | |
| 486 | |
| 487 | |
| 488 /************************************************************************** | |
| 489 * | |
| 490 * @enum: | |
| 491 * FT_Orientation | |
| 492 * | |
| 493 * @description: | |
| 494 * A list of values used to describe an outline's contour orientation. | |
| 495 * | |
| 496 * The TrueType and PostScript specifications use different conventions | |
| 497 * to determine whether outline contours should be filled or unfilled. | |
| 498 * | |
| 499 * @values: | |
| 500 * FT_ORIENTATION_TRUETYPE :: | |
| 501 * According to the TrueType specification, clockwise contours must | |
| 502 * be filled, and counter-clockwise ones must be unfilled. | |
| 503 * | |
| 504 * FT_ORIENTATION_POSTSCRIPT :: | |
| 505 * According to the PostScript specification, counter-clockwise contours | |
| 506 * must be filled, and clockwise ones must be unfilled. | |
| 507 * | |
| 508 * FT_ORIENTATION_FILL_RIGHT :: | |
| 509 * This is identical to @FT_ORIENTATION_TRUETYPE, but is used to | |
| 510 * remember that in TrueType, everything that is to the right of | |
| 511 * the drawing direction of a contour must be filled. | |
| 512 * | |
| 513 * FT_ORIENTATION_FILL_LEFT :: | |
| 514 * This is identical to @FT_ORIENTATION_POSTSCRIPT, but is used to | |
| 515 * remember that in PostScript, everything that is to the left of | |
| 516 * the drawing direction of a contour must be filled. | |
| 517 * | |
| 518 * FT_ORIENTATION_NONE :: | |
| 519 * The orientation cannot be determined. That is, different parts of | |
| 520 * the glyph have different orientation. | |
| 521 * | |
| 522 */ | |
| 523 typedef enum FT_Orientation_ | |
| 524 { | |
| 525 FT_ORIENTATION_TRUETYPE = 0, | |
| 526 FT_ORIENTATION_POSTSCRIPT = 1, | |
| 527 FT_ORIENTATION_FILL_RIGHT = FT_ORIENTATION_TRUETYPE, | |
| 528 FT_ORIENTATION_FILL_LEFT = FT_ORIENTATION_POSTSCRIPT, | |
| 529 FT_ORIENTATION_NONE | |
| 530 | |
| 531 } FT_Orientation; | |
| 532 | |
| 533 | |
| 534 /************************************************************************** | |
| 535 * | |
| 536 * @function: | |
| 537 * FT_Outline_Get_Orientation | |
| 538 * | |
| 539 * @description: | |
| 540 * This function analyzes a glyph outline and tries to compute its | |
| 541 * fill orientation (see @FT_Orientation). This is done by integrating | |
| 542 * the total area covered by the outline. The positive integral | |
| 543 * corresponds to the clockwise orientation and @FT_ORIENTATION_POSTSCRIPT | |
| 544 * is returned. The negative integral corresponds to the counter-clockwise | |
| 545 * orientation and @FT_ORIENTATION_TRUETYPE is returned. | |
| 546 * | |
| 547 * Note that this will return @FT_ORIENTATION_TRUETYPE for empty | |
| 548 * outlines. | |
| 549 * | |
| 550 * @input: | |
| 551 * outline :: | |
| 552 * A handle to the source outline. | |
| 553 * | |
| 554 * @return: | |
| 555 * The orientation. | |
| 556 * | |
| 557 */ | |
| 558 FT_EXPORT( FT_Orientation ) | |
| 559 FT_Outline_Get_Orientation( FT_Outline* outline ); | |
| 560 | |
| 561 /* */ | |
| 562 | |
| 563 | |
| 564 FT_END_HEADER | |
| 565 | |
| 566 #endif /* __FTOUTLN_H__ */ | |
| 567 | |
| 568 | |
| 569 /* END */ | |
| 570 | |
| 571 | |
| 572 /* Local Variables: */ | |
| 573 /* coding: utf-8 */ | |
| 574 /* End: */ | |
| OLD | NEW |