ftoutln.h

Go to the documentation of this file.
00001 /***************************************************************************/
00002 /*                                                                         */
00003 /*  ftoutln.h                                                              */
00004 /*                                                                         */
00005 /*    Support for the FT_Outline type used to store glyph shapes of        */
00006 /*    most scalable font formats (specification).                          */
00007 /*                                                                         */
00008 /*  Copyright 1996-2001, 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010 by */
00009 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
00010 /*                                                                         */
00011 /*  This file is part of the FreeType project, and may only be used,       */
00012 /*  modified, and distributed under the terms of the FreeType project      */
00013 /*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
00014 /*  this file you indicate that you have read the license and              */
00015 /*  understand and accept it fully.                                        */
00016 /*                                                                         */
00017 /***************************************************************************/
00018 
00019 
00020 #ifndef __FTOUTLN_H__
00021 #define __FTOUTLN_H__
00022 
00023 
00024 #include <ft2build.h>
00025 #include FT_FREETYPE_H
00026 
00027 #ifdef FREETYPE_H
00028 #error "freetype.h of FreeType 1 has been loaded!"
00029 #error "Please fix the directory search order for header files"
00030 #error "so that freetype.h of FreeType 2 is found first."
00031 #endif
00032 
00033 
00034 FT_BEGIN_HEADER
00035 
00036 
00037   /*************************************************************************/
00038   /*                                                                       */
00039   /* <Section>                                                             */
00040   /*    outline_processing                                                 */
00041   /*                                                                       */
00042   /* <Title>                                                               */
00043   /*    Outline Processing                                                 */
00044   /*                                                                       */
00045   /* <Abstract>                                                            */
00046   /*    Functions to create, transform, and render vectorial glyph images. */
00047   /*                                                                       */
00048   /* <Description>                                                         */
00049   /*    This section contains routines used to create and destroy scalable */
00050   /*    glyph images known as `outlines'.  These can also be measured,     */
00051   /*    transformed, and converted into bitmaps and pixmaps.               */
00052   /*                                                                       */
00053   /* <Order>                                                               */
00054   /*    FT_Outline                                                         */
00055   /*    FT_OUTLINE_FLAGS                                                   */
00056   /*    FT_Outline_New                                                     */
00057   /*    FT_Outline_Done                                                    */
00058   /*    FT_Outline_Copy                                                    */
00059   /*    FT_Outline_Translate                                               */
00060   /*    FT_Outline_Transform                                               */
00061   /*    FT_Outline_Embolden                                                */
00062   /*    FT_Outline_Reverse                                                 */
00063   /*    FT_Outline_Check                                                   */
00064   /*                                                                       */
00065   /*    FT_Outline_Get_CBox                                                */
00066   /*    FT_Outline_Get_BBox                                                */
00067   /*                                                                       */
00068   /*    FT_Outline_Get_Bitmap                                              */
00069   /*    FT_Outline_Render                                                  */
00070   /*                                                                       */
00071   /*    FT_Outline_Decompose                                               */
00072   /*    FT_Outline_Funcs                                                   */
00073   /*    FT_Outline_MoveTo_Func                                             */
00074   /*    FT_Outline_LineTo_Func                                             */
00075   /*    FT_Outline_ConicTo_Func                                            */
00076   /*    FT_Outline_CubicTo_Func                                            */
00077   /*                                                                       */
00078   /*************************************************************************/
00079 
00080 
00081   /*************************************************************************/
00082   /*                                                                       */
00083   /* <Function>                                                            */
00084   /*    FT_Outline_Decompose                                               */
00085   /*                                                                       */
00086   /* <Description>                                                         */
00087   /*    Walk over an outline's structure to decompose it into individual   */
00088   /*    segments and Bézier arcs.  This function also emits `move to'      */
00089   /*    operations to indicate the start of new contours in the outline.   */
00090   /*                                                                       */
00091   /* <Input>                                                               */
00092   /*    outline        :: A pointer to the source target.                  */
00093   /*                                                                       */
00094   /*    func_interface :: A table of `emitters', i.e., function pointers   */
00095   /*                      called during decomposition to indicate path     */
00096   /*                      operations.                                      */
00097   /*                                                                       */
00098   /* <InOut>                                                               */
00099   /*    user           :: A typeless pointer which is passed to each       */
00100   /*                      emitter during the decomposition.  It can be     */
00101   /*                      used to store the state during the               */
00102   /*                      decomposition.                                   */
00103   /*                                                                       */
00104   /* <Return>                                                              */
00105   /*    FreeType error code.  0~means success.                             */
00106   /*                                                                       */
00107   FT_EXPORT( FT_Error )
00108   FT_Outline_Decompose( FT_Outline*              outline,
00109                         const FT_Outline_Funcs*  func_interface,
00110                         void*                    user );
00111 
00112 
00113   /*************************************************************************/
00114   /*                                                                       */
00115   /* <Function>                                                            */
00116   /*    FT_Outline_New                                                     */
00117   /*                                                                       */
00118   /* <Description>                                                         */
00119   /*    Create a new outline of a given size.                              */
00120   /*                                                                       */
00121   /* <Input>                                                               */
00122   /*    library     :: A handle to the library object from where the       */
00123   /*                   outline is allocated.  Note however that the new    */
00124   /*                   outline will *not* necessarily be *freed*, when     */
00125   /*                   destroying the library, by @FT_Done_FreeType.       */
00126   /*                                                                       */
00127   /*    numPoints   :: The maximal number of points within the outline.    */
00128   /*                                                                       */
00129   /*    numContours :: The maximal number of contours within the outline.  */
00130   /*                                                                       */
00131   /* <Output>                                                              */
00132   /*    anoutline   :: A handle to the new outline.                        */
00133   /*                                                                       */
00134   /* <Return>                                                              */
00135   /*    FreeType error code.  0~means success.                             */
00136   /*                                                                       */
00137   /* <Note>                                                                */
00138   /*    The reason why this function takes a `library' parameter is simply */
00139   /*    to use the library's memory allocator.                             */
00140   /*                                                                       */
00141   FT_EXPORT( FT_Error )
00142   FT_Outline_New( FT_Library   library,
00143                   FT_UInt      numPoints,
00144                   FT_Int       numContours,
00145                   FT_Outline  *anoutline );
00146 
00147 
00148   FT_EXPORT( FT_Error )
00149   FT_Outline_New_Internal( FT_Memory    memory,
00150                            FT_UInt      numPoints,
00151                            FT_Int       numContours,
00152                            FT_Outline  *anoutline );
00153 
00154 
00155   /*************************************************************************/
00156   /*                                                                       */
00157   /* <Function>                                                            */
00158   /*    FT_Outline_Done                                                    */
00159   /*                                                                       */
00160   /* <Description>                                                         */
00161   /*    Destroy an outline created with @FT_Outline_New.                   */
00162   /*                                                                       */
00163   /* <Input>                                                               */
00164   /*    library :: A handle of the library object used to allocate the     */
00165   /*               outline.                                                */
00166   /*                                                                       */
00167   /*    outline :: A pointer to the outline object to be discarded.        */
00168   /*                                                                       */
00169   /* <Return>                                                              */
00170   /*    FreeType error code.  0~means success.                             */
00171   /*                                                                       */
00172   /* <Note>                                                                */
00173   /*    If the outline's `owner' field is not set, only the outline        */
00174   /*    descriptor will be released.                                       */
00175   /*                                                                       */
00176   /*    The reason why this function takes an `library' parameter is       */
00177   /*    simply to use ft_mem_free().                                       */
00178   /*                                                                       */
00179   FT_EXPORT( FT_Error )
00180   FT_Outline_Done( FT_Library   library,
00181                    FT_Outline*  outline );
00182 
00183 
00184   FT_EXPORT( FT_Error )
00185   FT_Outline_Done_Internal( FT_Memory    memory,
00186                             FT_Outline*  outline );
00187 
00188 
00189   /*************************************************************************/
00190   /*                                                                       */
00191   /* <Function>                                                            */
00192   /*    FT_Outline_Check                                                   */
00193   /*                                                                       */
00194   /* <Description>                                                         */
00195   /*    Check the contents of an outline descriptor.                       */
00196   /*                                                                       */
00197   /* <Input>                                                               */
00198   /*    outline :: A handle to a source outline.                           */
00199   /*                                                                       */
00200   /* <Return>                                                              */
00201   /*    FreeType error code.  0~means success.                             */
00202   /*                                                                       */
00203   FT_EXPORT( FT_Error )
00204   FT_Outline_Check( FT_Outline*  outline );
00205 
00206 
00207   /*************************************************************************/
00208   /*                                                                       */
00209   /* <Function>                                                            */
00210   /*    FT_Outline_Get_CBox                                                */
00211   /*                                                                       */
00212   /* <Description>                                                         */
00213   /*    Return an outline's `control box'.  The control box encloses all   */
00214   /*    the outline's points, including Bézier control points.  Though it  */
00215   /*    coincides with the exact bounding box for most glyphs, it can be   */
00216   /*    slightly larger in some situations (like when rotating an outline  */
00217   /*    which contains Bézier outside arcs).                               */
00218   /*                                                                       */
00219   /*    Computing the control box is very fast, while getting the bounding */
00220   /*    box can take much more time as it needs to walk over all segments  */
00221   /*    and arcs in the outline.  To get the latter, you can use the       */
00222   /*    `ftbbox' component which is dedicated to this single task.         */
00223   /*                                                                       */
00224   /* <Input>                                                               */
00225   /*    outline :: A pointer to the source outline descriptor.             */
00226   /*                                                                       */
00227   /* <Output>                                                              */
00228   /*    acbox   :: The outline's control box.                              */
00229   /*                                                                       */
00230   FT_EXPORT( void )
00231   FT_Outline_Get_CBox( const FT_Outline*  outline,
00232                        FT_BBox           *acbox );
00233 
00234 
00235   /*************************************************************************/
00236   /*                                                                       */
00237   /* <Function>                                                            */
00238   /*    FT_Outline_Translate                                               */
00239   /*                                                                       */
00240   /* <Description>                                                         */
00241   /*    Apply a simple translation to the points of an outline.            */
00242   /*                                                                       */
00243   /* <InOut>                                                               */
00244   /*    outline :: A pointer to the target outline descriptor.             */
00245   /*                                                                       */
00246   /* <Input>                                                               */
00247   /*    xOffset :: The horizontal offset.                                  */
00248   /*                                                                       */
00249   /*    yOffset :: The vertical offset.                                    */
00250   /*                                                                       */
00251   FT_EXPORT( void )
00252   FT_Outline_Translate( const FT_Outline*  outline,
00253                         FT_Pos             xOffset,
00254                         FT_Pos             yOffset );
00255 
00256 
00257   /*************************************************************************/
00258   /*                                                                       */
00259   /* <Function>                                                            */
00260   /*    FT_Outline_Copy                                                    */
00261   /*                                                                       */
00262   /* <Description>                                                         */
00263   /*    Copy an outline into another one.  Both objects must have the      */
00264   /*    same sizes (number of points & number of contours) when this       */
00265   /*    function is called.                                                */
00266   /*                                                                       */
00267   /* <Input>                                                               */
00268   /*    source :: A handle to the source outline.                          */
00269   /*                                                                       */
00270   /* <Output>                                                              */
00271   /*    target :: A handle to the target outline.                          */
00272   /*                                                                       */
00273   /* <Return>                                                              */
00274   /*    FreeType error code.  0~means success.                             */
00275   /*                                                                       */
00276   FT_EXPORT( FT_Error )
00277   FT_Outline_Copy( const FT_Outline*  source,
00278                    FT_Outline        *target );
00279 
00280 
00281   /*************************************************************************/
00282   /*                                                                       */
00283   /* <Function>                                                            */
00284   /*    FT_Outline_Transform                                               */
00285   /*                                                                       */
00286   /* <Description>                                                         */
00287   /*    Apply a simple 2x2 matrix to all of an outline's points.  Useful   */
00288   /*    for applying rotations, slanting, flipping, etc.                   */
00289   /*                                                                       */
00290   /* <InOut>                                                               */
00291   /*    outline :: A pointer to the target outline descriptor.             */
00292   /*                                                                       */
00293   /* <Input>                                                               */
00294   /*    matrix  :: A pointer to the transformation matrix.                 */
00295   /*                                                                       */
00296   /* <Note>                                                                */
00297   /*    You can use @FT_Outline_Translate if you need to translate the     */
00298   /*    outline's points.                                                  */
00299   /*                                                                       */
00300   FT_EXPORT( void )
00301   FT_Outline_Transform( const FT_Outline*  outline,
00302                         const FT_Matrix*   matrix );
00303 
00304 
00305   /*************************************************************************/
00306   /*                                                                       */
00307   /* <Function>                                                            */
00308   /*    FT_Outline_Embolden                                                */
00309   /*                                                                       */
00310   /* <Description>                                                         */
00311   /*    Embolden an outline.  The new outline will be at most 4~times      */
00312   /*    `strength' pixels wider and higher.  You may think of the left and */
00313   /*    bottom borders as unchanged.                                       */
00314   /*                                                                       */
00315   /*    Negative `strength' values to reduce the outline thickness are     */
00316   /*    possible also.                                                     */
00317   /*                                                                       */
00318   /* <InOut>                                                               */
00319   /*    outline  :: A handle to the target outline.                        */
00320   /*                                                                       */
00321   /* <Input>                                                               */
00322   /*    strength :: How strong the glyph is emboldened.  Expressed in      */
00323   /*                26.6 pixel format.                                     */
00324   /*                                                                       */
00325   /* <Return>                                                              */
00326   /*    FreeType error code.  0~means success.                             */
00327   /*                                                                       */
00328   /* <Note>                                                                */
00329   /*    The used algorithm to increase or decrease the thickness of the    */
00330   /*    glyph doesn't change the number of points; this means that certain */
00331   /*    situations like acute angles or intersections are sometimes        */
00332   /*    handled incorrectly.                                               */
00333   /*                                                                       */
00334   /*    If you need `better' metrics values you should call                */
00335   /*    @FT_Outline_Get_CBox ot @FT_Outline_Get_BBox.                      */
00336   /*                                                                       */
00337   /*    Example call:                                                      */
00338   /*                                                                       */
00339   /*    {                                                                  */
00340   /*      FT_Load_Glyph( face, index, FT_LOAD_DEFAULT );                   */
00341   /*      if ( face->slot->format == FT_GLYPH_FORMAT_OUTLINE )             */
00342   /*        FT_Outline_Embolden( &face->slot->outline, strength );         */
00343   /*    }                                                                  */
00344   /*                                                                       */
00345   FT_EXPORT( FT_Error )
00346   FT_Outline_Embolden( FT_Outline*  outline,
00347                        FT_Pos       strength );
00348 
00349 
00350   /*************************************************************************/
00351   /*                                                                       */
00352   /* <Function>                                                            */
00353   /*    FT_Outline_Reverse                                                 */
00354   /*                                                                       */
00355   /* <Description>                                                         */
00356   /*    Reverse the drawing direction of an outline.  This is used to      */
00357   /*    ensure consistent fill conventions for mirrored glyphs.            */
00358   /*                                                                       */
00359   /* <InOut>                                                               */
00360   /*    outline :: A pointer to the target outline descriptor.             */
00361   /*                                                                       */
00362   /* <Note>                                                                */
00363   /*    This function toggles the bit flag @FT_OUTLINE_REVERSE_FILL in     */
00364   /*    the outline's `flags' field.                                       */
00365   /*                                                                       */
00366   /*    It shouldn't be used by a normal client application, unless it     */
00367   /*    knows what it is doing.                                            */
00368   /*                                                                       */
00369   FT_EXPORT( void )
00370   FT_Outline_Reverse( FT_Outline*  outline );
00371 
00372 
00373   /*************************************************************************/
00374   /*                                                                       */
00375   /* <Function>                                                            */
00376   /*    FT_Outline_Get_Bitmap                                              */
00377   /*                                                                       */
00378   /* <Description>                                                         */
00379   /*    Render an outline within a bitmap.  The outline's image is simply  */
00380   /*    OR-ed to the target bitmap.                                        */
00381   /*                                                                       */
00382   /* <Input>                                                               */
00383   /*    library :: A handle to a FreeType library object.                  */
00384   /*                                                                       */
00385   /*    outline :: A pointer to the source outline descriptor.             */
00386   /*                                                                       */
00387   /* <InOut>                                                               */
00388   /*    abitmap :: A pointer to the target bitmap descriptor.              */
00389   /*                                                                       */
00390   /* <Return>                                                              */
00391   /*    FreeType error code.  0~means success.                             */
00392   /*                                                                       */
00393   /* <Note>                                                                */
00394   /*    This function does NOT CREATE the bitmap, it only renders an       */
00395   /*    outline image within the one you pass to it!  Consequently, the    */
00396   /*    various fields in `abitmap' should be set accordingly.             */
00397   /*                                                                       */
00398   /*    It will use the raster corresponding to the default glyph format.  */
00399   /*                                                                       */
00400   /*    The value of the `num_grays' field in `abitmap' is ignored.  If    */
00401   /*    you select the gray-level rasterizer, and you want less than 256   */
00402   /*    gray levels, you have to use @FT_Outline_Render directly.          */
00403   /*                                                                       */
00404   FT_EXPORT( FT_Error )
00405   FT_Outline_Get_Bitmap( FT_Library        library,
00406                          FT_Outline*       outline,
00407                          const FT_Bitmap  *abitmap );
00408 
00409 
00410   /*************************************************************************/
00411   /*                                                                       */
00412   /* <Function>                                                            */
00413   /*    FT_Outline_Render                                                  */
00414   /*                                                                       */
00415   /* <Description>                                                         */
00416   /*    Render an outline within a bitmap using the current scan-convert.  */
00417   /*    This function uses an @FT_Raster_Params structure as an argument,  */
00418   /*    allowing advanced features like direct composition, translucency,  */
00419   /*    etc.                                                               */
00420   /*                                                                       */
00421   /* <Input>                                                               */
00422   /*    library :: A handle to a FreeType library object.                  */
00423   /*                                                                       */
00424   /*    outline :: A pointer to the source outline descriptor.             */
00425   /*                                                                       */
00426   /* <InOut>                                                               */
00427   /*    params  :: A pointer to an @FT_Raster_Params structure used to     */
00428   /*               describe the rendering operation.                       */
00429   /*                                                                       */
00430   /* <Return>                                                              */
00431   /*    FreeType error code.  0~means success.                             */
00432   /*                                                                       */
00433   /* <Note>                                                                */
00434   /*    You should know what you are doing and how @FT_Raster_Params works */
00435   /*    to use this function.                                              */
00436   /*                                                                       */
00437   /*    The field `params.source' will be set to `outline' before the scan */
00438   /*    converter is called, which means that the value you give to it is  */
00439   /*    actually ignored.                                                  */
00440   /*                                                                       */
00441   /*    The gray-level rasterizer always uses 256 gray levels.  If you     */
00442   /*    want less gray levels, you have to provide your own span callback. */
00443   /*    See the @FT_RASTER_FLAG_DIRECT value of the `flags' field in the   */
00444   /*    @FT_Raster_Params structure for more details.                      */
00445   /*                                                                       */
00446   FT_EXPORT( FT_Error )
00447   FT_Outline_Render( FT_Library         library,
00448                      FT_Outline*        outline,
00449                      FT_Raster_Params*  params );
00450 
00451 
00452  /**************************************************************************
00453   *
00454   * @enum:
00455   *   FT_Orientation
00456   *
00457   * @description:
00458   *   A list of values used to describe an outline's contour orientation.
00459   *
00460   *   The TrueType and PostScript specifications use different conventions
00461   *   to determine whether outline contours should be filled or unfilled.
00462   *
00463   * @values:
00464   *   FT_ORIENTATION_TRUETYPE ::
00465   *     According to the TrueType specification, clockwise contours must
00466   *     be filled, and counter-clockwise ones must be unfilled.
00467   *
00468   *   FT_ORIENTATION_POSTSCRIPT ::
00469   *     According to the PostScript specification, counter-clockwise contours
00470   *     must be filled, and clockwise ones must be unfilled.
00471   *
00472   *   FT_ORIENTATION_FILL_RIGHT ::
00473   *     This is identical to @FT_ORIENTATION_TRUETYPE, but is used to
00474   *     remember that in TrueType, everything that is to the right of
00475   *     the drawing direction of a contour must be filled.
00476   *
00477   *   FT_ORIENTATION_FILL_LEFT ::
00478   *     This is identical to @FT_ORIENTATION_POSTSCRIPT, but is used to
00479   *     remember that in PostScript, everything that is to the left of
00480   *     the drawing direction of a contour must be filled.
00481   *
00482   *   FT_ORIENTATION_NONE ::
00483   *     The orientation cannot be determined.  That is, different parts of
00484   *     the glyph have different orientation.
00485   *
00486   */
00487   typedef enum  FT_Orientation_
00488   {
00489     FT_ORIENTATION_TRUETYPE   = 0,
00490     FT_ORIENTATION_POSTSCRIPT = 1,
00491     FT_ORIENTATION_FILL_RIGHT = FT_ORIENTATION_TRUETYPE,
00492     FT_ORIENTATION_FILL_LEFT  = FT_ORIENTATION_POSTSCRIPT,
00493     FT_ORIENTATION_NONE
00494 
00495   } FT_Orientation;
00496 
00497 
00498  /**************************************************************************
00499   *
00500   * @function:
00501   *   FT_Outline_Get_Orientation
00502   *
00503   * @description:
00504   *   This function analyzes a glyph outline and tries to compute its
00505   *   fill orientation (see @FT_Orientation).  This is done by computing
00506   *   the direction of each global horizontal and/or vertical extrema
00507   *   within the outline.
00508   *
00509   *   Note that this will return @FT_ORIENTATION_TRUETYPE for empty
00510   *   outlines.
00511   *
00512   * @input:
00513   *   outline ::
00514   *     A handle to the source outline.
00515   *
00516   * @return:
00517   *   The orientation.
00518   *
00519   */
00520   FT_EXPORT( FT_Orientation )
00521   FT_Outline_Get_Orientation( FT_Outline*  outline );
00522 
00523 
00524   /* */
00525 
00526 
00527 FT_END_HEADER
00528 
00529 #endif /* __FTOUTLN_H__ */
00530 
00531 
00532 /* END */
00533 
00534 
00535 /* Local Variables: */
00536 /* coding: utf-8    */
00537 /* End:             */

Generated on Tue Jul 5 14:13:37 2011 for ROOT_528-00b_version by  doxygen 1.5.1