| 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-2018 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 Bezier 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 | /*    Similarly, the function returns success for an empty outline also  */ | 
|---|
| 119 | /*    (doing nothing, this is, not calling any emitter); if necessary,   */ | 
|---|
| 120 | /*    you should filter this out, too.                                   */ | 
|---|
| 121 | /*                                                                       */ | 
|---|
| 122 | FT_EXPORT( FT_Error ) | 
|---|
| 123 | FT_Outline_Decompose( FT_Outline*              outline, | 
|---|
| 124 | const FT_Outline_Funcs*  func_interface, | 
|---|
| 125 | void*                    user ); | 
|---|
| 126 |  | 
|---|
| 127 |  | 
|---|
| 128 | /*************************************************************************/ | 
|---|
| 129 | /*                                                                       */ | 
|---|
| 130 | /* <Function>                                                            */ | 
|---|
| 131 | /*    FT_Outline_New                                                     */ | 
|---|
| 132 | /*                                                                       */ | 
|---|
| 133 | /* <Description>                                                         */ | 
|---|
| 134 | /*    Create a new outline of a given size.                              */ | 
|---|
| 135 | /*                                                                       */ | 
|---|
| 136 | /* <Input>                                                               */ | 
|---|
| 137 | /*    library     :: A handle to the library object from where the       */ | 
|---|
| 138 | /*                   outline is allocated.  Note however that the new    */ | 
|---|
| 139 | /*                   outline will *not* necessarily be *freed*, when     */ | 
|---|
| 140 | /*                   destroying the library, by @FT_Done_FreeType.       */ | 
|---|
| 141 | /*                                                                       */ | 
|---|
| 142 | /*    numPoints   :: The maximum number of points within the outline.    */ | 
|---|
| 143 | /*                   Must be smaller than or equal to 0xFFFF (65535).    */ | 
|---|
| 144 | /*                                                                       */ | 
|---|
| 145 | /*    numContours :: The maximum number of contours within the outline.  */ | 
|---|
| 146 | /*                   This value must be in the range 0 to `numPoints'.   */ | 
|---|
| 147 | /*                                                                       */ | 
|---|
| 148 | /* <Output>                                                              */ | 
|---|
| 149 | /*    anoutline   :: A handle to the new outline.                        */ | 
|---|
| 150 | /*                                                                       */ | 
|---|
| 151 | /* <Return>                                                              */ | 
|---|
| 152 | /*    FreeType error code.  0~means success.                             */ | 
|---|
| 153 | /*                                                                       */ | 
|---|
| 154 | /* <Note>                                                                */ | 
|---|
| 155 | /*    The reason why this function takes a `library' parameter is simply */ | 
|---|
| 156 | /*    to use the library's memory allocator.                             */ | 
|---|
| 157 | /*                                                                       */ | 
|---|
| 158 | FT_EXPORT( FT_Error ) | 
|---|
| 159 | FT_Outline_New( FT_Library   library, | 
|---|
| 160 | FT_UInt      numPoints, | 
|---|
| 161 | FT_Int       numContours, | 
|---|
| 162 | FT_Outline  *anoutline ); | 
|---|
| 163 |  | 
|---|
| 164 |  | 
|---|
| 165 | FT_EXPORT( FT_Error ) | 
|---|
| 166 | FT_Outline_New_Internal( FT_Memory    memory, | 
|---|
| 167 | FT_UInt      numPoints, | 
|---|
| 168 | FT_Int       numContours, | 
|---|
| 169 | FT_Outline  *anoutline ); | 
|---|
| 170 |  | 
|---|
| 171 |  | 
|---|
| 172 | /*************************************************************************/ | 
|---|
| 173 | /*                                                                       */ | 
|---|
| 174 | /* <Function>                                                            */ | 
|---|
| 175 | /*    FT_Outline_Done                                                    */ | 
|---|
| 176 | /*                                                                       */ | 
|---|
| 177 | /* <Description>                                                         */ | 
|---|
| 178 | /*    Destroy an outline created with @FT_Outline_New.                   */ | 
|---|
| 179 | /*                                                                       */ | 
|---|
| 180 | /* <Input>                                                               */ | 
|---|
| 181 | /*    library :: A handle of the library object used to allocate the     */ | 
|---|
| 182 | /*               outline.                                                */ | 
|---|
| 183 | /*                                                                       */ | 
|---|
| 184 | /*    outline :: A pointer to the outline object to be discarded.        */ | 
|---|
| 185 | /*                                                                       */ | 
|---|
| 186 | /* <Return>                                                              */ | 
|---|
| 187 | /*    FreeType error code.  0~means success.                             */ | 
|---|
| 188 | /*                                                                       */ | 
|---|
| 189 | /* <Note>                                                                */ | 
|---|
| 190 | /*    If the outline's `owner' field is not set, only the outline        */ | 
|---|
| 191 | /*    descriptor will be released.                                       */ | 
|---|
| 192 | /*                                                                       */ | 
|---|
| 193 | FT_EXPORT( FT_Error ) | 
|---|
| 194 | FT_Outline_Done( FT_Library   library, | 
|---|
| 195 | FT_Outline*  outline ); | 
|---|
| 196 |  | 
|---|
| 197 |  | 
|---|
| 198 | FT_EXPORT( FT_Error ) | 
|---|
| 199 | FT_Outline_Done_Internal( FT_Memory    memory, | 
|---|
| 200 | FT_Outline*  outline ); | 
|---|
| 201 |  | 
|---|
| 202 |  | 
|---|
| 203 | /*************************************************************************/ | 
|---|
| 204 | /*                                                                       */ | 
|---|
| 205 | /* <Function>                                                            */ | 
|---|
| 206 | /*    FT_Outline_Check                                                   */ | 
|---|
| 207 | /*                                                                       */ | 
|---|
| 208 | /* <Description>                                                         */ | 
|---|
| 209 | /*    Check the contents of an outline descriptor.                       */ | 
|---|
| 210 | /*                                                                       */ | 
|---|
| 211 | /* <Input>                                                               */ | 
|---|
| 212 | /*    outline :: A handle to a source outline.                           */ | 
|---|
| 213 | /*                                                                       */ | 
|---|
| 214 | /* <Return>                                                              */ | 
|---|
| 215 | /*    FreeType error code.  0~means success.                             */ | 
|---|
| 216 | /*                                                                       */ | 
|---|
| 217 | /* <Note>                                                                */ | 
|---|
| 218 | /*    An empty outline, or an outline with a single point only is also   */ | 
|---|
| 219 | /*    valid.                                                             */ | 
|---|
| 220 | /*                                                                       */ | 
|---|
| 221 | FT_EXPORT( FT_Error ) | 
|---|
| 222 | FT_Outline_Check( FT_Outline*  outline ); | 
|---|
| 223 |  | 
|---|
| 224 |  | 
|---|
| 225 | /*************************************************************************/ | 
|---|
| 226 | /*                                                                       */ | 
|---|
| 227 | /* <Function>                                                            */ | 
|---|
| 228 | /*    FT_Outline_Get_CBox                                                */ | 
|---|
| 229 | /*                                                                       */ | 
|---|
| 230 | /* <Description>                                                         */ | 
|---|
| 231 | /*    Return an outline's `control box'.  The control box encloses all   */ | 
|---|
| 232 | /*    the outline's points, including Bezier control points.  Though it  */ | 
|---|
| 233 | /*    coincides with the exact bounding box for most glyphs, it can be   */ | 
|---|
| 234 | /*    slightly larger in some situations (like when rotating an outline  */ | 
|---|
| 235 | /*    that contains Bezier outside arcs).                                */ | 
|---|
| 236 | /*                                                                       */ | 
|---|
| 237 | /*    Computing the control box is very fast, while getting the bounding */ | 
|---|
| 238 | /*    box can take much more time as it needs to walk over all segments  */ | 
|---|
| 239 | /*    and arcs in the outline.  To get the latter, you can use the       */ | 
|---|
| 240 | /*    `ftbbox' component, which is dedicated to this single task.        */ | 
|---|
| 241 | /*                                                                       */ | 
|---|
| 242 | /* <Input>                                                               */ | 
|---|
| 243 | /*    outline :: A pointer to the source outline descriptor.             */ | 
|---|
| 244 | /*                                                                       */ | 
|---|
| 245 | /* <Output>                                                              */ | 
|---|
| 246 | /*    acbox   :: The outline's control box.                              */ | 
|---|
| 247 | /*                                                                       */ | 
|---|
| 248 | /* <Note>                                                                */ | 
|---|
| 249 | /*    See @FT_Glyph_Get_CBox for a discussion of tricky fonts.           */ | 
|---|
| 250 | /*                                                                       */ | 
|---|
| 251 | FT_EXPORT( void ) | 
|---|
| 252 | FT_Outline_Get_CBox( const FT_Outline*  outline, | 
|---|
| 253 | FT_BBox           *acbox ); | 
|---|
| 254 |  | 
|---|
| 255 |  | 
|---|
| 256 | /*************************************************************************/ | 
|---|
| 257 | /*                                                                       */ | 
|---|
| 258 | /* <Function>                                                            */ | 
|---|
| 259 | /*    FT_Outline_Translate                                               */ | 
|---|
| 260 | /*                                                                       */ | 
|---|
| 261 | /* <Description>                                                         */ | 
|---|
| 262 | /*    Apply a simple translation to the points of an outline.            */ | 
|---|
| 263 | /*                                                                       */ | 
|---|
| 264 | /* <InOut>                                                               */ | 
|---|
| 265 | /*    outline :: A pointer to the target outline descriptor.             */ | 
|---|
| 266 | /*                                                                       */ | 
|---|
| 267 | /* <Input>                                                               */ | 
|---|
| 268 | /*    xOffset :: The horizontal offset.                                  */ | 
|---|
| 269 | /*                                                                       */ | 
|---|
| 270 | /*    yOffset :: The vertical offset.                                    */ | 
|---|
| 271 | /*                                                                       */ | 
|---|
| 272 | FT_EXPORT( void ) | 
|---|
| 273 | FT_Outline_Translate( const FT_Outline*  outline, | 
|---|
| 274 | FT_Pos             xOffset, | 
|---|
| 275 | FT_Pos             yOffset ); | 
|---|
| 276 |  | 
|---|
| 277 |  | 
|---|
| 278 | /*************************************************************************/ | 
|---|
| 279 | /*                                                                       */ | 
|---|
| 280 | /* <Function>                                                            */ | 
|---|
| 281 | /*    FT_Outline_Copy                                                    */ | 
|---|
| 282 | /*                                                                       */ | 
|---|
| 283 | /* <Description>                                                         */ | 
|---|
| 284 | /*    Copy an outline into another one.  Both objects must have the      */ | 
|---|
| 285 | /*    same sizes (number of points & number of contours) when this       */ | 
|---|
| 286 | /*    function is called.                                                */ | 
|---|
| 287 | /*                                                                       */ | 
|---|
| 288 | /* <Input>                                                               */ | 
|---|
| 289 | /*    source :: A handle to the source outline.                          */ | 
|---|
| 290 | /*                                                                       */ | 
|---|
| 291 | /* <Output>                                                              */ | 
|---|
| 292 | /*    target :: A handle to the target outline.                          */ | 
|---|
| 293 | /*                                                                       */ | 
|---|
| 294 | /* <Return>                                                              */ | 
|---|
| 295 | /*    FreeType error code.  0~means success.                             */ | 
|---|
| 296 | /*                                                                       */ | 
|---|
| 297 | FT_EXPORT( FT_Error ) | 
|---|
| 298 | FT_Outline_Copy( const FT_Outline*  source, | 
|---|
| 299 | FT_Outline        *target ); | 
|---|
| 300 |  | 
|---|
| 301 |  | 
|---|
| 302 | /*************************************************************************/ | 
|---|
| 303 | /*                                                                       */ | 
|---|
| 304 | /* <Function>                                                            */ | 
|---|
| 305 | /*    FT_Outline_Transform                                               */ | 
|---|
| 306 | /*                                                                       */ | 
|---|
| 307 | /* <Description>                                                         */ | 
|---|
| 308 | /*    Apply a simple 2x2 matrix to all of an outline's points.  Useful   */ | 
|---|
| 309 | /*    for applying rotations, slanting, flipping, etc.                   */ | 
|---|
| 310 | /*                                                                       */ | 
|---|
| 311 | /* <InOut>                                                               */ | 
|---|
| 312 | /*    outline :: A pointer to the target outline descriptor.             */ | 
|---|
| 313 | /*                                                                       */ | 
|---|
| 314 | /* <Input>                                                               */ | 
|---|
| 315 | /*    matrix  :: A pointer to the transformation matrix.                 */ | 
|---|
| 316 | /*                                                                       */ | 
|---|
| 317 | /* <Note>                                                                */ | 
|---|
| 318 | /*    You can use @FT_Outline_Translate if you need to translate the     */ | 
|---|
| 319 | /*    outline's points.                                                  */ | 
|---|
| 320 | /*                                                                       */ | 
|---|
| 321 | FT_EXPORT( void ) | 
|---|
| 322 | FT_Outline_Transform( const FT_Outline*  outline, | 
|---|
| 323 | const FT_Matrix*   matrix ); | 
|---|
| 324 |  | 
|---|
| 325 |  | 
|---|
| 326 | /*************************************************************************/ | 
|---|
| 327 | /*                                                                       */ | 
|---|
| 328 | /* <Function>                                                            */ | 
|---|
| 329 | /*    FT_Outline_Embolden                                                */ | 
|---|
| 330 | /*                                                                       */ | 
|---|
| 331 | /* <Description>                                                         */ | 
|---|
| 332 | /*    Embolden an outline.  The new outline will be at most 4~times      */ | 
|---|
| 333 | /*    `strength' pixels wider and higher.  You may think of the left and */ | 
|---|
| 334 | /*    bottom borders as unchanged.                                       */ | 
|---|
| 335 | /*                                                                       */ | 
|---|
| 336 | /*    Negative `strength' values to reduce the outline thickness are     */ | 
|---|
| 337 | /*    possible also.                                                     */ | 
|---|
| 338 | /*                                                                       */ | 
|---|
| 339 | /* <InOut>                                                               */ | 
|---|
| 340 | /*    outline  :: A handle to the target outline.                        */ | 
|---|
| 341 | /*                                                                       */ | 
|---|
| 342 | /* <Input>                                                               */ | 
|---|
| 343 | /*    strength :: How strong the glyph is emboldened.  Expressed in      */ | 
|---|
| 344 | /*                26.6 pixel format.                                     */ | 
|---|
| 345 | /*                                                                       */ | 
|---|
| 346 | /* <Return>                                                              */ | 
|---|
| 347 | /*    FreeType error code.  0~means success.                             */ | 
|---|
| 348 | /*                                                                       */ | 
|---|
| 349 | /* <Note>                                                                */ | 
|---|
| 350 | /*    The used algorithm to increase or decrease the thickness of the    */ | 
|---|
| 351 | /*    glyph doesn't change the number of points; this means that certain */ | 
|---|
| 352 | /*    situations like acute angles or intersections are sometimes        */ | 
|---|
| 353 | /*    handled incorrectly.                                               */ | 
|---|
| 354 | /*                                                                       */ | 
|---|
| 355 | /*    If you need `better' metrics values you should call                */ | 
|---|
| 356 | /*    @FT_Outline_Get_CBox or @FT_Outline_Get_BBox.                      */ | 
|---|
| 357 | /*                                                                       */ | 
|---|
| 358 | /*    Example call:                                                      */ | 
|---|
| 359 | /*                                                                       */ | 
|---|
| 360 | /*    {                                                                  */ | 
|---|
| 361 | /*      FT_Load_Glyph( face, index, FT_LOAD_DEFAULT );                   */ | 
|---|
| 362 | /*      if ( face->glyph->format == FT_GLYPH_FORMAT_OUTLINE )            */ | 
|---|
| 363 | /*        FT_Outline_Embolden( &face->glyph->outline, strength );        */ | 
|---|
| 364 | /*    }                                                                  */ | 
|---|
| 365 | /*                                                                       */ | 
|---|
| 366 | /*    To get meaningful results, font scaling values must be set with    */ | 
|---|
| 367 | /*    functions like @FT_Set_Char_Size before calling FT_Render_Glyph.   */ | 
|---|
| 368 | /*                                                                       */ | 
|---|
| 369 | FT_EXPORT( FT_Error ) | 
|---|
| 370 | FT_Outline_Embolden( FT_Outline*  outline, | 
|---|
| 371 | FT_Pos       strength ); | 
|---|
| 372 |  | 
|---|
| 373 |  | 
|---|
| 374 | /*************************************************************************/ | 
|---|
| 375 | /*                                                                       */ | 
|---|
| 376 | /* <Function>                                                            */ | 
|---|
| 377 | /*    FT_Outline_EmboldenXY                                              */ | 
|---|
| 378 | /*                                                                       */ | 
|---|
| 379 | /* <Description>                                                         */ | 
|---|
| 380 | /*    Embolden an outline.  The new outline will be `xstrength' pixels   */ | 
|---|
| 381 | /*    wider and `ystrength' pixels higher.  Otherwise, it is similar to  */ | 
|---|
| 382 | /*    @FT_Outline_Embolden, which uses the same strength in both         */ | 
|---|
| 383 | /*    directions.                                                        */ | 
|---|
| 384 | /*                                                                       */ | 
|---|
| 385 | /* <Since>                                                               */ | 
|---|
| 386 | /*    2.4.10                                                             */ | 
|---|
| 387 | /*                                                                       */ | 
|---|
| 388 | FT_EXPORT( FT_Error ) | 
|---|
| 389 | FT_Outline_EmboldenXY( FT_Outline*  outline, | 
|---|
| 390 | FT_Pos       xstrength, | 
|---|
| 391 | FT_Pos       ystrength ); | 
|---|
| 392 |  | 
|---|
| 393 |  | 
|---|
| 394 | /*************************************************************************/ | 
|---|
| 395 | /*                                                                       */ | 
|---|
| 396 | /* <Function>                                                            */ | 
|---|
| 397 | /*    FT_Outline_Reverse                                                 */ | 
|---|
| 398 | /*                                                                       */ | 
|---|
| 399 | /* <Description>                                                         */ | 
|---|
| 400 | /*    Reverse the drawing direction of an outline.  This is used to      */ | 
|---|
| 401 | /*    ensure consistent fill conventions for mirrored glyphs.            */ | 
|---|
| 402 | /*                                                                       */ | 
|---|
| 403 | /* <InOut>                                                               */ | 
|---|
| 404 | /*    outline :: A pointer to the target outline descriptor.             */ | 
|---|
| 405 | /*                                                                       */ | 
|---|
| 406 | /* <Note>                                                                */ | 
|---|
| 407 | /*    This function toggles the bit flag @FT_OUTLINE_REVERSE_FILL in     */ | 
|---|
| 408 | /*    the outline's `flags' field.                                       */ | 
|---|
| 409 | /*                                                                       */ | 
|---|
| 410 | /*    It shouldn't be used by a normal client application, unless it     */ | 
|---|
| 411 | /*    knows what it is doing.                                            */ | 
|---|
| 412 | /*                                                                       */ | 
|---|
| 413 | FT_EXPORT( void ) | 
|---|
| 414 | FT_Outline_Reverse( FT_Outline*  outline ); | 
|---|
| 415 |  | 
|---|
| 416 |  | 
|---|
| 417 | /*************************************************************************/ | 
|---|
| 418 | /*                                                                       */ | 
|---|
| 419 | /* <Function>                                                            */ | 
|---|
| 420 | /*    FT_Outline_Get_Bitmap                                              */ | 
|---|
| 421 | /*                                                                       */ | 
|---|
| 422 | /* <Description>                                                         */ | 
|---|
| 423 | /*    Render an outline within a bitmap.  The outline's image is simply  */ | 
|---|
| 424 | /*    OR-ed to the target bitmap.                                        */ | 
|---|
| 425 | /*                                                                       */ | 
|---|
| 426 | /* <Input>                                                               */ | 
|---|
| 427 | /*    library :: A handle to a FreeType library object.                  */ | 
|---|
| 428 | /*                                                                       */ | 
|---|
| 429 | /*    outline :: A pointer to the source outline descriptor.             */ | 
|---|
| 430 | /*                                                                       */ | 
|---|
| 431 | /* <InOut>                                                               */ | 
|---|
| 432 | /*    abitmap :: A pointer to the target bitmap descriptor.              */ | 
|---|
| 433 | /*                                                                       */ | 
|---|
| 434 | /* <Return>                                                              */ | 
|---|
| 435 | /*    FreeType error code.  0~means success.                             */ | 
|---|
| 436 | /*                                                                       */ | 
|---|
| 437 | /* <Note>                                                                */ | 
|---|
| 438 | /*    This function does NOT CREATE the bitmap, it only renders an       */ | 
|---|
| 439 | /*    outline image within the one you pass to it!  Consequently, the    */ | 
|---|
| 440 | /*    various fields in `abitmap' should be set accordingly.             */ | 
|---|
| 441 | /*                                                                       */ | 
|---|
| 442 | /*    It will use the raster corresponding to the default glyph format.  */ | 
|---|
| 443 | /*                                                                       */ | 
|---|
| 444 | /*    The value of the `num_grays' field in `abitmap' is ignored.  If    */ | 
|---|
| 445 | /*    you select the gray-level rasterizer, and you want less than 256   */ | 
|---|
| 446 | /*    gray levels, you have to use @FT_Outline_Render directly.          */ | 
|---|
| 447 | /*                                                                       */ | 
|---|
| 448 | FT_EXPORT( FT_Error ) | 
|---|
| 449 | FT_Outline_Get_Bitmap( FT_Library        library, | 
|---|
| 450 | FT_Outline*       outline, | 
|---|
| 451 | const FT_Bitmap  *abitmap ); | 
|---|
| 452 |  | 
|---|
| 453 |  | 
|---|
| 454 | /*************************************************************************/ | 
|---|
| 455 | /*                                                                       */ | 
|---|
| 456 | /* <Function>                                                            */ | 
|---|
| 457 | /*    FT_Outline_Render                                                  */ | 
|---|
| 458 | /*                                                                       */ | 
|---|
| 459 | /* <Description>                                                         */ | 
|---|
| 460 | /*    Render an outline within a bitmap using the current scan-convert.  */ | 
|---|
| 461 | /*    This function uses an @FT_Raster_Params structure as an argument,  */ | 
|---|
| 462 | /*    allowing advanced features like direct composition, translucency,  */ | 
|---|
| 463 | /*    etc.                                                               */ | 
|---|
| 464 | /*                                                                       */ | 
|---|
| 465 | /* <Input>                                                               */ | 
|---|
| 466 | /*    library :: A handle to a FreeType library object.                  */ | 
|---|
| 467 | /*                                                                       */ | 
|---|
| 468 | /*    outline :: A pointer to the source outline descriptor.             */ | 
|---|
| 469 | /*                                                                       */ | 
|---|
| 470 | /* <InOut>                                                               */ | 
|---|
| 471 | /*    params  :: A pointer to an @FT_Raster_Params structure used to     */ | 
|---|
| 472 | /*               describe the rendering operation.                       */ | 
|---|
| 473 | /*                                                                       */ | 
|---|
| 474 | /* <Return>                                                              */ | 
|---|
| 475 | /*    FreeType error code.  0~means success.                             */ | 
|---|
| 476 | /*                                                                       */ | 
|---|
| 477 | /* <Note>                                                                */ | 
|---|
| 478 | /*    You should know what you are doing and how @FT_Raster_Params works */ | 
|---|
| 479 | /*    to use this function.                                              */ | 
|---|
| 480 | /*                                                                       */ | 
|---|
| 481 | /*    The field `params.source' will be set to `outline' before the scan */ | 
|---|
| 482 | /*    converter is called, which means that the value you give to it is  */ | 
|---|
| 483 | /*    actually ignored.                                                  */ | 
|---|
| 484 | /*                                                                       */ | 
|---|
| 485 | /*    The gray-level rasterizer always uses 256 gray levels.  If you     */ | 
|---|
| 486 | /*    want less gray levels, you have to provide your own span callback. */ | 
|---|
| 487 | /*    See the @FT_RASTER_FLAG_DIRECT value of the `flags' field in the   */ | 
|---|
| 488 | /*    @FT_Raster_Params structure for more details.                      */ | 
|---|
| 489 | /*                                                                       */ | 
|---|
| 490 | FT_EXPORT( FT_Error ) | 
|---|
| 491 | FT_Outline_Render( FT_Library         library, | 
|---|
| 492 | FT_Outline*        outline, | 
|---|
| 493 | FT_Raster_Params*  params ); | 
|---|
| 494 |  | 
|---|
| 495 |  | 
|---|
| 496 | /************************************************************************** | 
|---|
| 497 | * | 
|---|
| 498 | * @enum: | 
|---|
| 499 | *   FT_Orientation | 
|---|
| 500 | * | 
|---|
| 501 | * @description: | 
|---|
| 502 | *   A list of values used to describe an outline's contour orientation. | 
|---|
| 503 | * | 
|---|
| 504 | *   The TrueType and PostScript specifications use different conventions | 
|---|
| 505 | *   to determine whether outline contours should be filled or unfilled. | 
|---|
| 506 | * | 
|---|
| 507 | * @values: | 
|---|
| 508 | *   FT_ORIENTATION_TRUETYPE :: | 
|---|
| 509 | *     According to the TrueType specification, clockwise contours must | 
|---|
| 510 | *     be filled, and counter-clockwise ones must be unfilled. | 
|---|
| 511 | * | 
|---|
| 512 | *   FT_ORIENTATION_POSTSCRIPT :: | 
|---|
| 513 | *     According to the PostScript specification, counter-clockwise contours | 
|---|
| 514 | *     must be filled, and clockwise ones must be unfilled. | 
|---|
| 515 | * | 
|---|
| 516 | *   FT_ORIENTATION_FILL_RIGHT :: | 
|---|
| 517 | *     This is identical to @FT_ORIENTATION_TRUETYPE, but is used to | 
|---|
| 518 | *     remember that in TrueType, everything that is to the right of | 
|---|
| 519 | *     the drawing direction of a contour must be filled. | 
|---|
| 520 | * | 
|---|
| 521 | *   FT_ORIENTATION_FILL_LEFT :: | 
|---|
| 522 | *     This is identical to @FT_ORIENTATION_POSTSCRIPT, but is used to | 
|---|
| 523 | *     remember that in PostScript, everything that is to the left of | 
|---|
| 524 | *     the drawing direction of a contour must be filled. | 
|---|
| 525 | * | 
|---|
| 526 | *   FT_ORIENTATION_NONE :: | 
|---|
| 527 | *     The orientation cannot be determined.  That is, different parts of | 
|---|
| 528 | *     the glyph have different orientation. | 
|---|
| 529 | * | 
|---|
| 530 | */ | 
|---|
| 531 | typedef enum  FT_Orientation_ | 
|---|
| 532 | { | 
|---|
| 533 | FT_ORIENTATION_TRUETYPE   = 0, | 
|---|
| 534 | FT_ORIENTATION_POSTSCRIPT = 1, | 
|---|
| 535 | FT_ORIENTATION_FILL_RIGHT = FT_ORIENTATION_TRUETYPE, | 
|---|
| 536 | FT_ORIENTATION_FILL_LEFT  = FT_ORIENTATION_POSTSCRIPT, | 
|---|
| 537 | FT_ORIENTATION_NONE | 
|---|
| 538 |  | 
|---|
| 539 | } FT_Orientation; | 
|---|
| 540 |  | 
|---|
| 541 |  | 
|---|
| 542 | /************************************************************************** | 
|---|
| 543 | * | 
|---|
| 544 | * @function: | 
|---|
| 545 | *   FT_Outline_Get_Orientation | 
|---|
| 546 | * | 
|---|
| 547 | * @description: | 
|---|
| 548 | *   This function analyzes a glyph outline and tries to compute its | 
|---|
| 549 | *   fill orientation (see @FT_Orientation).  This is done by integrating | 
|---|
| 550 | *   the total area covered by the outline. The positive integral | 
|---|
| 551 | *   corresponds to the clockwise orientation and @FT_ORIENTATION_POSTSCRIPT | 
|---|
| 552 | *   is returned. The negative integral corresponds to the counter-clockwise | 
|---|
| 553 | *   orientation and @FT_ORIENTATION_TRUETYPE is returned. | 
|---|
| 554 | * | 
|---|
| 555 | *   Note that this will return @FT_ORIENTATION_TRUETYPE for empty | 
|---|
| 556 | *   outlines. | 
|---|
| 557 | * | 
|---|
| 558 | * @input: | 
|---|
| 559 | *   outline :: | 
|---|
| 560 | *     A handle to the source outline. | 
|---|
| 561 | * | 
|---|
| 562 | * @return: | 
|---|
| 563 | *   The orientation. | 
|---|
| 564 | * | 
|---|
| 565 | */ | 
|---|
| 566 | FT_EXPORT( FT_Orientation ) | 
|---|
| 567 | FT_Outline_Get_Orientation( FT_Outline*  outline ); | 
|---|
| 568 |  | 
|---|
| 569 | /* */ | 
|---|
| 570 |  | 
|---|
| 571 |  | 
|---|
| 572 | FT_END_HEADER | 
|---|
| 573 |  | 
|---|
| 574 | #endif /* FTOUTLN_H_ */ | 
|---|
| 575 |  | 
|---|
| 576 |  | 
|---|
| 577 | /* END */ | 
|---|
| 578 |  | 
|---|
| 579 |  | 
|---|
| 580 | /* Local Variables: */ | 
|---|
| 581 | /* coding: utf-8    */ | 
|---|
| 582 | /* End:             */ | 
|---|
| 583 |  | 
|---|