Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. /***************************************************************************/
  2. /*                                                                         */
  3. /*  ftstroke.h                                                             */
  4. /*                                                                         */
  5. /*    FreeType path stroker (specification).                               */
  6. /*                                                                         */
  7. /*  Copyright 2002-2006, 2008, 2009, 2011-2012 by                          */
  8. /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
  9. /*                                                                         */
  10. /*  This file is part of the FreeType project, and may only be used,       */
  11. /*  modified, and distributed under the terms of the FreeType project      */
  12. /*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
  13. /*  this file you indicate that you have read the license and              */
  14. /*  understand and accept it fully.                                        */
  15. /*                                                                         */
  16. /***************************************************************************/
  17.  
  18.  
  19. #ifndef __FT_STROKE_H__
  20. #define __FT_STROKE_H__
  21.  
  22. #include <ft2build.h>
  23. #include FT_OUTLINE_H
  24. #include FT_GLYPH_H
  25.  
  26.  
  27. FT_BEGIN_HEADER
  28.  
  29.  
  30.  /************************************************************************
  31.   *
  32.   * @section:
  33.   *    glyph_stroker
  34.   *
  35.   * @title:
  36.   *    Glyph Stroker
  37.   *
  38.   * @abstract:
  39.   *    Generating bordered and stroked glyphs.
  40.   *
  41.   * @description:
  42.   *    This component generates stroked outlines of a given vectorial
  43.   *    glyph.  It also allows you to retrieve the `outside' and/or the
  44.   *    `inside' borders of the stroke.
  45.   *
  46.   *    This can be useful to generate `bordered' glyph, i.e., glyphs
  47.   *    displayed with a coloured (and anti-aliased) border around their
  48.   *    shape.
  49.   */
  50.  
  51.  
  52.  /**************************************************************
  53.   *
  54.   * @type:
  55.   *   FT_Stroker
  56.   *
  57.   * @description:
  58.   *   Opaque handler to a path stroker object.
  59.   */
  60.   typedef struct FT_StrokerRec_*  FT_Stroker;
  61.  
  62.  
  63.   /**************************************************************
  64.    *
  65.    * @enum:
  66.    *   FT_Stroker_LineJoin
  67.    *
  68.    * @description:
  69.    *   These values determine how two joining lines are rendered
  70.    *   in a stroker.
  71.    *
  72.    * @values:
  73.    *   FT_STROKER_LINEJOIN_ROUND ::
  74.    *     Used to render rounded line joins.  Circular arcs are used
  75.    *     to join two lines smoothly.
  76.    *
  77.    *   FT_STROKER_LINEJOIN_BEVEL ::
  78.    *     Used to render beveled line joins.  The outer corner of
  79.    *     the joined lines is filled by enclosing the triangular
  80.    *     region of the corner with a straight line between the
  81.    *     outer corners of each stroke.
  82.    *
  83.    *   FT_STROKER_LINEJOIN_MITER_FIXED ::
  84.    *     Used to render mitered line joins, with fixed bevels if the
  85.    *     miter limit is exceeded.  The outer edges of the strokes
  86.    *     for the two segments are extended until they meet at an
  87.    *     angle.  If the segments meet at too sharp an angle (such
  88.    *     that the miter would extend from the intersection of the
  89.    *     segments a distance greater than the product of the miter
  90.    *     limit value and the border radius), then a bevel join (see
  91.    *     above) is used instead.  This prevents long spikes being
  92.    *     created.  FT_STROKER_LINEJOIN_MITER_FIXED generates a miter
  93.    *     line join as used in PostScript and PDF.
  94.    *
  95.    *   FT_STROKER_LINEJOIN_MITER_VARIABLE ::
  96.    *   FT_STROKER_LINEJOIN_MITER ::
  97.    *     Used to render mitered line joins, with variable bevels if
  98.    *     the miter limit is exceeded.  The intersection of the
  99.    *     strokes is clipped at a line perpendicular to the bisector
  100.    *     of the angle between the strokes, at the distance from the
  101.    *     intersection of the segments equal to the product of the
  102.    *     miter limit value and the border radius.  This prevents
  103.    *     long spikes being created.
  104.    *     FT_STROKER_LINEJOIN_MITER_VARIABLE generates a mitered line
  105.    *     join as used in XPS.  FT_STROKER_LINEJOIN_MITER is an alias
  106.    *     for FT_STROKER_LINEJOIN_MITER_VARIABLE, retained for
  107.    *     backwards compatibility.
  108.    */
  109.   typedef enum  FT_Stroker_LineJoin_
  110.   {
  111.     FT_STROKER_LINEJOIN_ROUND          = 0,
  112.     FT_STROKER_LINEJOIN_BEVEL          = 1,
  113.     FT_STROKER_LINEJOIN_MITER_VARIABLE = 2,
  114.     FT_STROKER_LINEJOIN_MITER          = FT_STROKER_LINEJOIN_MITER_VARIABLE,
  115.     FT_STROKER_LINEJOIN_MITER_FIXED    = 3
  116.  
  117.   } FT_Stroker_LineJoin;
  118.  
  119.  
  120.   /**************************************************************
  121.    *
  122.    * @enum:
  123.    *   FT_Stroker_LineCap
  124.    *
  125.    * @description:
  126.    *   These values determine how the end of opened sub-paths are
  127.    *   rendered in a stroke.
  128.    *
  129.    * @values:
  130.    *   FT_STROKER_LINECAP_BUTT ::
  131.    *     The end of lines is rendered as a full stop on the last
  132.    *     point itself.
  133.    *
  134.    *   FT_STROKER_LINECAP_ROUND ::
  135.    *     The end of lines is rendered as a half-circle around the
  136.    *     last point.
  137.    *
  138.    *   FT_STROKER_LINECAP_SQUARE ::
  139.    *     The end of lines is rendered as a square around the
  140.    *     last point.
  141.    */
  142.   typedef enum  FT_Stroker_LineCap_
  143.   {
  144.     FT_STROKER_LINECAP_BUTT = 0,
  145.     FT_STROKER_LINECAP_ROUND,
  146.     FT_STROKER_LINECAP_SQUARE
  147.  
  148.   } FT_Stroker_LineCap;
  149.  
  150.  
  151.   /**************************************************************
  152.    *
  153.    * @enum:
  154.    *   FT_StrokerBorder
  155.    *
  156.    * @description:
  157.    *   These values are used to select a given stroke border
  158.    *   in @FT_Stroker_GetBorderCounts and @FT_Stroker_ExportBorder.
  159.    *
  160.    * @values:
  161.    *   FT_STROKER_BORDER_LEFT ::
  162.    *     Select the left border, relative to the drawing direction.
  163.    *
  164.    *   FT_STROKER_BORDER_RIGHT ::
  165.    *     Select the right border, relative to the drawing direction.
  166.    *
  167.    * @note:
  168.    *   Applications are generally interested in the `inside' and `outside'
  169.    *   borders.  However, there is no direct mapping between these and the
  170.    *   `left' and `right' ones, since this really depends on the glyph's
  171.    *   drawing orientation, which varies between font formats.
  172.    *
  173.    *   You can however use @FT_Outline_GetInsideBorder and
  174.    *   @FT_Outline_GetOutsideBorder to get these.
  175.    */
  176.   typedef enum  FT_StrokerBorder_
  177.   {
  178.     FT_STROKER_BORDER_LEFT = 0,
  179.     FT_STROKER_BORDER_RIGHT
  180.  
  181.   } FT_StrokerBorder;
  182.  
  183.  
  184.   /**************************************************************
  185.    *
  186.    * @function:
  187.    *   FT_Outline_GetInsideBorder
  188.    *
  189.    * @description:
  190.    *   Retrieve the @FT_StrokerBorder value corresponding to the
  191.    *   `inside' borders of a given outline.
  192.    *
  193.    * @input:
  194.    *   outline ::
  195.    *     The source outline handle.
  196.    *
  197.    * @return:
  198.    *   The border index.  @FT_STROKER_BORDER_RIGHT for empty or invalid
  199.    *   outlines.
  200.    */
  201.   FT_EXPORT( FT_StrokerBorder )
  202.   FT_Outline_GetInsideBorder( FT_Outline*  outline );
  203.  
  204.  
  205.   /**************************************************************
  206.    *
  207.    * @function:
  208.    *   FT_Outline_GetOutsideBorder
  209.    *
  210.    * @description:
  211.    *   Retrieve the @FT_StrokerBorder value corresponding to the
  212.    *   `outside' borders of a given outline.
  213.    *
  214.    * @input:
  215.    *   outline ::
  216.    *     The source outline handle.
  217.    *
  218.    * @return:
  219.    *   The border index.  @FT_STROKER_BORDER_LEFT for empty or invalid
  220.    *   outlines.
  221.    */
  222.   FT_EXPORT( FT_StrokerBorder )
  223.   FT_Outline_GetOutsideBorder( FT_Outline*  outline );
  224.  
  225.  
  226.   /**************************************************************
  227.    *
  228.    * @function:
  229.    *   FT_Stroker_New
  230.    *
  231.    * @description:
  232.    *   Create a new stroker object.
  233.    *
  234.    * @input:
  235.    *   library ::
  236.    *     FreeType library handle.
  237.    *
  238.    * @output:
  239.    *   astroker ::
  240.    *     A new stroker object handle.  NULL in case of error.
  241.    *
  242.    * @return:
  243.    *    FreeType error code.  0~means success.
  244.    */
  245.   FT_EXPORT( FT_Error )
  246.   FT_Stroker_New( FT_Library   library,
  247.                   FT_Stroker  *astroker );
  248.  
  249.  
  250.   /**************************************************************
  251.    *
  252.    * @function:
  253.    *   FT_Stroker_Set
  254.    *
  255.    * @description:
  256.    *   Reset a stroker object's attributes.
  257.    *
  258.    * @input:
  259.    *   stroker ::
  260.    *     The target stroker handle.
  261.    *
  262.    *   radius ::
  263.    *     The border radius.
  264.    *
  265.    *   line_cap ::
  266.    *     The line cap style.
  267.    *
  268.    *   line_join ::
  269.    *     The line join style.
  270.    *
  271.    *   miter_limit ::
  272.    *     The miter limit for the FT_STROKER_LINEJOIN_MITER_FIXED and
  273.    *     FT_STROKER_LINEJOIN_MITER_VARIABLE line join styles,
  274.    *     expressed as 16.16 fixed-point value.
  275.    *
  276.    * @note:
  277.    *   The radius is expressed in the same units as the outline
  278.    *   coordinates.
  279.    */
  280.   FT_EXPORT( void )
  281.   FT_Stroker_Set( FT_Stroker           stroker,
  282.                   FT_Fixed             radius,
  283.                   FT_Stroker_LineCap   line_cap,
  284.                   FT_Stroker_LineJoin  line_join,
  285.                   FT_Fixed             miter_limit );
  286.  
  287.  
  288.   /**************************************************************
  289.    *
  290.    * @function:
  291.    *   FT_Stroker_Rewind
  292.    *
  293.    * @description:
  294.    *   Reset a stroker object without changing its attributes.
  295.    *   You should call this function before beginning a new
  296.    *   series of calls to @FT_Stroker_BeginSubPath or
  297.    *   @FT_Stroker_EndSubPath.
  298.    *
  299.    * @input:
  300.    *   stroker ::
  301.    *     The target stroker handle.
  302.    */
  303.   FT_EXPORT( void )
  304.   FT_Stroker_Rewind( FT_Stroker  stroker );
  305.  
  306.  
  307.   /**************************************************************
  308.    *
  309.    * @function:
  310.    *   FT_Stroker_ParseOutline
  311.    *
  312.    * @description:
  313.    *   A convenience function used to parse a whole outline with
  314.    *   the stroker.  The resulting outline(s) can be retrieved
  315.    *   later by functions like @FT_Stroker_GetCounts and @FT_Stroker_Export.
  316.    *
  317.    * @input:
  318.    *   stroker ::
  319.    *     The target stroker handle.
  320.    *
  321.    *   outline ::
  322.    *     The source outline.
  323.    *
  324.    *   opened ::
  325.    *     A boolean.  If~1, the outline is treated as an open path instead
  326.    *     of a closed one.
  327.    *
  328.    * @return:
  329.    *   FreeType error code.  0~means success.
  330.    *
  331.    * @note:
  332.    *   If `opened' is~0 (the default), the outline is treated as a closed
  333.    *   path, and the stroker generates two distinct `border' outlines.
  334.    *
  335.    *   If `opened' is~1, the outline is processed as an open path, and the
  336.    *   stroker generates a single `stroke' outline.
  337.    *
  338.    *   This function calls @FT_Stroker_Rewind automatically.
  339.    */
  340.   FT_EXPORT( FT_Error )
  341.   FT_Stroker_ParseOutline( FT_Stroker   stroker,
  342.                            FT_Outline*  outline,
  343.                            FT_Bool      opened );
  344.  
  345.  
  346.   /**************************************************************
  347.    *
  348.    * @function:
  349.    *   FT_Stroker_BeginSubPath
  350.    *
  351.    * @description:
  352.    *   Start a new sub-path in the stroker.
  353.    *
  354.    * @input:
  355.    *   stroker ::
  356.    *     The target stroker handle.
  357.    *
  358.    *   to ::
  359.    *     A pointer to the start vector.
  360.    *
  361.    *   open ::
  362.    *     A boolean.  If~1, the sub-path is treated as an open one.
  363.    *
  364.    * @return:
  365.    *   FreeType error code.  0~means success.
  366.    *
  367.    * @note:
  368.    *   This function is useful when you need to stroke a path that is
  369.    *   not stored as an @FT_Outline object.
  370.    */
  371.   FT_EXPORT( FT_Error )
  372.   FT_Stroker_BeginSubPath( FT_Stroker  stroker,
  373.                            FT_Vector*  to,
  374.                            FT_Bool     open );
  375.  
  376.  
  377.   /**************************************************************
  378.    *
  379.    * @function:
  380.    *   FT_Stroker_EndSubPath
  381.    *
  382.    * @description:
  383.    *   Close the current sub-path in the stroker.
  384.    *
  385.    * @input:
  386.    *   stroker ::
  387.    *     The target stroker handle.
  388.    *
  389.    * @return:
  390.    *   FreeType error code.  0~means success.
  391.    *
  392.    * @note:
  393.    *   You should call this function after @FT_Stroker_BeginSubPath.
  394.    *   If the subpath was not `opened', this function `draws' a
  395.    *   single line segment to the start position when needed.
  396.    */
  397.   FT_EXPORT( FT_Error )
  398.   FT_Stroker_EndSubPath( FT_Stroker  stroker );
  399.  
  400.  
  401.   /**************************************************************
  402.    *
  403.    * @function:
  404.    *   FT_Stroker_LineTo
  405.    *
  406.    * @description:
  407.    *   `Draw' a single line segment in the stroker's current sub-path,
  408.    *   from the last position.
  409.    *
  410.    * @input:
  411.    *   stroker ::
  412.    *     The target stroker handle.
  413.    *
  414.    *   to ::
  415.    *     A pointer to the destination point.
  416.    *
  417.    * @return:
  418.    *   FreeType error code.  0~means success.
  419.    *
  420.    * @note:
  421.    *   You should call this function between @FT_Stroker_BeginSubPath and
  422.    *   @FT_Stroker_EndSubPath.
  423.    */
  424.   FT_EXPORT( FT_Error )
  425.   FT_Stroker_LineTo( FT_Stroker  stroker,
  426.                      FT_Vector*  to );
  427.  
  428.  
  429.   /**************************************************************
  430.    *
  431.    * @function:
  432.    *   FT_Stroker_ConicTo
  433.    *
  434.    * @description:
  435.    *   `Draw' a single quadratic Bézier in the stroker's current sub-path,
  436.    *   from the last position.
  437.    *
  438.    * @input:
  439.    *   stroker ::
  440.    *     The target stroker handle.
  441.    *
  442.    *   control ::
  443.    *     A pointer to a Bézier control point.
  444.    *
  445.    *   to ::
  446.    *     A pointer to the destination point.
  447.    *
  448.    * @return:
  449.    *   FreeType error code.  0~means success.
  450.    *
  451.    * @note:
  452.    *   You should call this function between @FT_Stroker_BeginSubPath and
  453.    *   @FT_Stroker_EndSubPath.
  454.    */
  455.   FT_EXPORT( FT_Error )
  456.   FT_Stroker_ConicTo( FT_Stroker  stroker,
  457.                       FT_Vector*  control,
  458.                       FT_Vector*  to );
  459.  
  460.  
  461.   /**************************************************************
  462.    *
  463.    * @function:
  464.    *   FT_Stroker_CubicTo
  465.    *
  466.    * @description:
  467.    *   `Draw' a single cubic Bézier in the stroker's current sub-path,
  468.    *   from the last position.
  469.    *
  470.    * @input:
  471.    *   stroker ::
  472.    *     The target stroker handle.
  473.    *
  474.    *   control1 ::
  475.    *     A pointer to the first Bézier control point.
  476.    *
  477.    *   control2 ::
  478.    *     A pointer to second Bézier control point.
  479.    *
  480.    *   to ::
  481.    *     A pointer to the destination point.
  482.    *
  483.    * @return:
  484.    *   FreeType error code.  0~means success.
  485.    *
  486.    * @note:
  487.    *   You should call this function between @FT_Stroker_BeginSubPath and
  488.    *   @FT_Stroker_EndSubPath.
  489.    */
  490.   FT_EXPORT( FT_Error )
  491.   FT_Stroker_CubicTo( FT_Stroker  stroker,
  492.                       FT_Vector*  control1,
  493.                       FT_Vector*  control2,
  494.                       FT_Vector*  to );
  495.  
  496.  
  497.   /**************************************************************
  498.    *
  499.    * @function:
  500.    *   FT_Stroker_GetBorderCounts
  501.    *
  502.    * @description:
  503.    *   Call this function once you have finished parsing your paths
  504.    *   with the stroker.  It returns the number of points and
  505.    *   contours necessary to export one of the `border' or `stroke'
  506.    *   outlines generated by the stroker.
  507.    *
  508.    * @input:
  509.    *   stroker ::
  510.    *     The target stroker handle.
  511.    *
  512.    *   border ::
  513.    *     The border index.
  514.    *
  515.    * @output:
  516.    *   anum_points ::
  517.    *     The number of points.
  518.    *
  519.    *   anum_contours ::
  520.    *     The number of contours.
  521.    *
  522.    * @return:
  523.    *   FreeType error code.  0~means success.
  524.    *
  525.    * @note:
  526.    *   When an outline, or a sub-path, is `closed', the stroker generates
  527.    *   two independent `border' outlines, named `left' and `right'.
  528.    *
  529.    *   When the outline, or a sub-path, is `opened', the stroker merges
  530.    *   the `border' outlines with caps.  The `left' border receives all
  531.    *   points, while the `right' border becomes empty.
  532.    *
  533.    *   Use the function @FT_Stroker_GetCounts instead if you want to
  534.    *   retrieve the counts associated to both borders.
  535.    */
  536.   FT_EXPORT( FT_Error )
  537.   FT_Stroker_GetBorderCounts( FT_Stroker        stroker,
  538.                               FT_StrokerBorder  border,
  539.                               FT_UInt          *anum_points,
  540.                               FT_UInt          *anum_contours );
  541.  
  542.  
  543.   /**************************************************************
  544.    *
  545.    * @function:
  546.    *   FT_Stroker_ExportBorder
  547.    *
  548.    * @description:
  549.    *   Call this function after @FT_Stroker_GetBorderCounts to
  550.    *   export the corresponding border to your own @FT_Outline
  551.    *   structure.
  552.    *
  553.    *   Note that this function appends the border points and
  554.    *   contours to your outline, but does not try to resize its
  555.    *   arrays.
  556.    *
  557.    * @input:
  558.    *   stroker ::
  559.    *     The target stroker handle.
  560.    *
  561.    *   border ::
  562.    *     The border index.
  563.    *
  564.    *   outline ::
  565.    *     The target outline handle.
  566.    *
  567.    * @note:
  568.    *   Always call this function after @FT_Stroker_GetBorderCounts to
  569.    *   get sure that there is enough room in your @FT_Outline object to
  570.    *   receive all new data.
  571.    *
  572.    *   When an outline, or a sub-path, is `closed', the stroker generates
  573.    *   two independent `border' outlines, named `left' and `right'
  574.    *
  575.    *   When the outline, or a sub-path, is `opened', the stroker merges
  576.    *   the `border' outlines with caps. The `left' border receives all
  577.    *   points, while the `right' border becomes empty.
  578.    *
  579.    *   Use the function @FT_Stroker_Export instead if you want to
  580.    *   retrieve all borders at once.
  581.    */
  582.   FT_EXPORT( void )
  583.   FT_Stroker_ExportBorder( FT_Stroker        stroker,
  584.                            FT_StrokerBorder  border,
  585.                            FT_Outline*       outline );
  586.  
  587.  
  588.   /**************************************************************
  589.    *
  590.    * @function:
  591.    *   FT_Stroker_GetCounts
  592.    *
  593.    * @description:
  594.    *   Call this function once you have finished parsing your paths
  595.    *   with the stroker.  It returns the number of points and
  596.    *   contours necessary to export all points/borders from the stroked
  597.    *   outline/path.
  598.    *
  599.    * @input:
  600.    *   stroker ::
  601.    *     The target stroker handle.
  602.    *
  603.    * @output:
  604.    *   anum_points ::
  605.    *     The number of points.
  606.    *
  607.    *   anum_contours ::
  608.    *     The number of contours.
  609.    *
  610.    * @return:
  611.    *   FreeType error code.  0~means success.
  612.    */
  613.   FT_EXPORT( FT_Error )
  614.   FT_Stroker_GetCounts( FT_Stroker  stroker,
  615.                         FT_UInt    *anum_points,
  616.                         FT_UInt    *anum_contours );
  617.  
  618.  
  619.   /**************************************************************
  620.    *
  621.    * @function:
  622.    *   FT_Stroker_Export
  623.    *
  624.    * @description:
  625.    *   Call this function after @FT_Stroker_GetBorderCounts to
  626.    *   export all borders to your own @FT_Outline structure.
  627.    *
  628.    *   Note that this function appends the border points and
  629.    *   contours to your outline, but does not try to resize its
  630.    *   arrays.
  631.    *
  632.    * @input:
  633.    *   stroker ::
  634.    *     The target stroker handle.
  635.    *
  636.    *   outline ::
  637.    *     The target outline handle.
  638.    */
  639.   FT_EXPORT( void )
  640.   FT_Stroker_Export( FT_Stroker   stroker,
  641.                      FT_Outline*  outline );
  642.  
  643.  
  644.   /**************************************************************
  645.    *
  646.    * @function:
  647.    *   FT_Stroker_Done
  648.    *
  649.    * @description:
  650.    *   Destroy a stroker object.
  651.    *
  652.    * @input:
  653.    *   stroker ::
  654.    *     A stroker handle.  Can be NULL.
  655.    */
  656.   FT_EXPORT( void )
  657.   FT_Stroker_Done( FT_Stroker  stroker );
  658.  
  659.  
  660.   /**************************************************************
  661.    *
  662.    * @function:
  663.    *   FT_Glyph_Stroke
  664.    *
  665.    * @description:
  666.    *   Stroke a given outline glyph object with a given stroker.
  667.    *
  668.    * @inout:
  669.    *   pglyph ::
  670.    *     Source glyph handle on input, new glyph handle on output.
  671.    *
  672.    * @input:
  673.    *   stroker ::
  674.    *     A stroker handle.
  675.    *
  676.    *   destroy ::
  677.    *     A Boolean.  If~1, the source glyph object is destroyed
  678.    *     on success.
  679.    *
  680.    * @return:
  681.    *    FreeType error code.  0~means success.
  682.    *
  683.    * @note:
  684.    *   The source glyph is untouched in case of error.
  685.    *
  686.    *   Adding stroke may yield a significantly wider and taller glyph
  687.    *   depending on how large of a radius was used to stroke the glyph.  You
  688.    *   may need to manually adjust horizontal and vertical advance amounts
  689.    *   to account for this added size.
  690.    */
  691.   FT_EXPORT( FT_Error )
  692.   FT_Glyph_Stroke( FT_Glyph    *pglyph,
  693.                    FT_Stroker   stroker,
  694.                    FT_Bool      destroy );
  695.  
  696.  
  697.   /**************************************************************
  698.    *
  699.    * @function:
  700.    *   FT_Glyph_StrokeBorder
  701.    *
  702.    * @description:
  703.    *   Stroke a given outline glyph object with a given stroker, but
  704.    *   only return either its inside or outside border.
  705.    *
  706.    * @inout:
  707.    *   pglyph ::
  708.    *     Source glyph handle on input, new glyph handle on output.
  709.    *
  710.    * @input:
  711.    *   stroker ::
  712.    *     A stroker handle.
  713.    *
  714.    *   inside ::
  715.    *     A Boolean.  If~1, return the inside border, otherwise
  716.    *     the outside border.
  717.    *
  718.    *   destroy ::
  719.    *     A Boolean.  If~1, the source glyph object is destroyed
  720.    *     on success.
  721.    *
  722.    * @return:
  723.    *    FreeType error code.  0~means success.
  724.    *
  725.    * @note:
  726.    *   The source glyph is untouched in case of error.
  727.    *
  728.    *   Adding stroke may yield a significantly wider and taller glyph
  729.    *   depending on how large of a radius was used to stroke the glyph.  You
  730.    *   may need to manually adjust horizontal and vertical advance amounts
  731.    *   to account for this added size.
  732.    */
  733.   FT_EXPORT( FT_Error )
  734.   FT_Glyph_StrokeBorder( FT_Glyph    *pglyph,
  735.                          FT_Stroker   stroker,
  736.                          FT_Bool      inside,
  737.                          FT_Bool      destroy );
  738.  
  739.  /* */
  740.  
  741. FT_END_HEADER
  742.  
  743. #endif /* __FT_STROKE_H__ */
  744.  
  745.  
  746. /* END */
  747.  
  748.  
  749. /* Local Variables: */
  750. /* coding: utf-8    */
  751. /* End:             */
  752.