nuclear@0: /***************************************************************************/ nuclear@0: /* */ nuclear@0: /* ftstroke.h */ nuclear@0: /* */ nuclear@0: /* FreeType path stroker (specification). */ nuclear@0: /* */ nuclear@0: /* Copyright 2002, 2003, 2004, 2005, 2006, 2008, 2009 by */ nuclear@0: /* David Turner, Robert Wilhelm, and Werner Lemberg. */ nuclear@0: /* */ nuclear@0: /* This file is part of the FreeType project, and may only be used, */ nuclear@0: /* modified, and distributed under the terms of the FreeType project */ nuclear@0: /* license, LICENSE.TXT. By continuing to use, modify, or distribute */ nuclear@0: /* this file you indicate that you have read the license and */ nuclear@0: /* understand and accept it fully. */ nuclear@0: /* */ nuclear@0: /***************************************************************************/ nuclear@0: nuclear@0: nuclear@0: #ifndef __FT_STROKE_H__ nuclear@0: #define __FT_STROKE_H__ nuclear@0: nuclear@0: #include nuclear@0: #include FT_OUTLINE_H nuclear@0: #include FT_GLYPH_H nuclear@0: nuclear@0: nuclear@0: FT_BEGIN_HEADER nuclear@0: nuclear@0: nuclear@0: /************************************************************************ nuclear@0: * nuclear@0: * @section: nuclear@0: * glyph_stroker nuclear@0: * nuclear@0: * @title: nuclear@0: * Glyph Stroker nuclear@0: * nuclear@0: * @abstract: nuclear@0: * Generating bordered and stroked glyphs. nuclear@0: * nuclear@0: * @description: nuclear@0: * This component generates stroked outlines of a given vectorial nuclear@0: * glyph. It also allows you to retrieve the `outside' and/or the nuclear@0: * `inside' borders of the stroke. nuclear@0: * nuclear@0: * This can be useful to generate `bordered' glyph, i.e., glyphs nuclear@0: * displayed with a coloured (and anti-aliased) border around their nuclear@0: * shape. nuclear@0: */ nuclear@0: nuclear@0: nuclear@0: /************************************************************** nuclear@0: * nuclear@0: * @type: nuclear@0: * FT_Stroker nuclear@0: * nuclear@0: * @description: nuclear@0: * Opaque handler to a path stroker object. nuclear@0: */ nuclear@0: typedef struct FT_StrokerRec_* FT_Stroker; nuclear@0: nuclear@0: nuclear@0: /************************************************************** nuclear@0: * nuclear@0: * @enum: nuclear@0: * FT_Stroker_LineJoin nuclear@0: * nuclear@0: * @description: nuclear@0: * These values determine how two joining lines are rendered nuclear@0: * in a stroker. nuclear@0: * nuclear@0: * @values: nuclear@0: * FT_STROKER_LINEJOIN_ROUND :: nuclear@0: * Used to render rounded line joins. Circular arcs are used nuclear@0: * to join two lines smoothly. nuclear@0: * nuclear@0: * FT_STROKER_LINEJOIN_BEVEL :: nuclear@0: * Used to render beveled line joins; i.e., the two joining lines nuclear@0: * are extended until they intersect. nuclear@0: * nuclear@0: * FT_STROKER_LINEJOIN_MITER :: nuclear@0: * Same as beveled rendering, except that an additional line nuclear@0: * break is added if the angle between the two joining lines nuclear@0: * is too closed (this is useful to avoid unpleasant spikes nuclear@0: * in beveled rendering). nuclear@0: */ nuclear@0: typedef enum FT_Stroker_LineJoin_ nuclear@0: { nuclear@0: FT_STROKER_LINEJOIN_ROUND = 0, nuclear@0: FT_STROKER_LINEJOIN_BEVEL, nuclear@0: FT_STROKER_LINEJOIN_MITER nuclear@0: nuclear@0: } FT_Stroker_LineJoin; nuclear@0: nuclear@0: nuclear@0: /************************************************************** nuclear@0: * nuclear@0: * @enum: nuclear@0: * FT_Stroker_LineCap nuclear@0: * nuclear@0: * @description: nuclear@0: * These values determine how the end of opened sub-paths are nuclear@0: * rendered in a stroke. nuclear@0: * nuclear@0: * @values: nuclear@0: * FT_STROKER_LINECAP_BUTT :: nuclear@0: * The end of lines is rendered as a full stop on the last nuclear@0: * point itself. nuclear@0: * nuclear@0: * FT_STROKER_LINECAP_ROUND :: nuclear@0: * The end of lines is rendered as a half-circle around the nuclear@0: * last point. nuclear@0: * nuclear@0: * FT_STROKER_LINECAP_SQUARE :: nuclear@0: * The end of lines is rendered as a square around the nuclear@0: * last point. nuclear@0: */ nuclear@0: typedef enum FT_Stroker_LineCap_ nuclear@0: { nuclear@0: FT_STROKER_LINECAP_BUTT = 0, nuclear@0: FT_STROKER_LINECAP_ROUND, nuclear@0: FT_STROKER_LINECAP_SQUARE nuclear@0: nuclear@0: } FT_Stroker_LineCap; nuclear@0: nuclear@0: nuclear@0: /************************************************************** nuclear@0: * nuclear@0: * @enum: nuclear@0: * FT_StrokerBorder nuclear@0: * nuclear@0: * @description: nuclear@0: * These values are used to select a given stroke border nuclear@0: * in @FT_Stroker_GetBorderCounts and @FT_Stroker_ExportBorder. nuclear@0: * nuclear@0: * @values: nuclear@0: * FT_STROKER_BORDER_LEFT :: nuclear@0: * Select the left border, relative to the drawing direction. nuclear@0: * nuclear@0: * FT_STROKER_BORDER_RIGHT :: nuclear@0: * Select the right border, relative to the drawing direction. nuclear@0: * nuclear@0: * @note: nuclear@0: * Applications are generally interested in the `inside' and `outside' nuclear@0: * borders. However, there is no direct mapping between these and the nuclear@0: * `left' and `right' ones, since this really depends on the glyph's nuclear@0: * drawing orientation, which varies between font formats. nuclear@0: * nuclear@0: * You can however use @FT_Outline_GetInsideBorder and nuclear@0: * @FT_Outline_GetOutsideBorder to get these. nuclear@0: */ nuclear@0: typedef enum FT_StrokerBorder_ nuclear@0: { nuclear@0: FT_STROKER_BORDER_LEFT = 0, nuclear@0: FT_STROKER_BORDER_RIGHT nuclear@0: nuclear@0: } FT_StrokerBorder; nuclear@0: nuclear@0: nuclear@0: /************************************************************** nuclear@0: * nuclear@0: * @function: nuclear@0: * FT_Outline_GetInsideBorder nuclear@0: * nuclear@0: * @description: nuclear@0: * Retrieve the @FT_StrokerBorder value corresponding to the nuclear@0: * `inside' borders of a given outline. nuclear@0: * nuclear@0: * @input: nuclear@0: * outline :: nuclear@0: * The source outline handle. nuclear@0: * nuclear@0: * @return: nuclear@0: * The border index. @FT_STROKER_BORDER_RIGHT for empty or invalid nuclear@0: * outlines. nuclear@0: */ nuclear@0: FT_EXPORT( FT_StrokerBorder ) nuclear@0: FT_Outline_GetInsideBorder( FT_Outline* outline ); nuclear@0: nuclear@0: nuclear@0: /************************************************************** nuclear@0: * nuclear@0: * @function: nuclear@0: * FT_Outline_GetOutsideBorder nuclear@0: * nuclear@0: * @description: nuclear@0: * Retrieve the @FT_StrokerBorder value corresponding to the nuclear@0: * `outside' borders of a given outline. nuclear@0: * nuclear@0: * @input: nuclear@0: * outline :: nuclear@0: * The source outline handle. nuclear@0: * nuclear@0: * @return: nuclear@0: * The border index. @FT_STROKER_BORDER_LEFT for empty or invalid nuclear@0: * outlines. nuclear@0: */ nuclear@0: FT_EXPORT( FT_StrokerBorder ) nuclear@0: FT_Outline_GetOutsideBorder( FT_Outline* outline ); nuclear@0: nuclear@0: nuclear@0: /************************************************************** nuclear@0: * nuclear@0: * @function: nuclear@0: * FT_Stroker_New nuclear@0: * nuclear@0: * @description: nuclear@0: * Create a new stroker object. nuclear@0: * nuclear@0: * @input: nuclear@0: * library :: nuclear@0: * FreeType library handle. nuclear@0: * nuclear@0: * @output: nuclear@0: * astroker :: nuclear@0: * A new stroker object handle. NULL in case of error. nuclear@0: * nuclear@0: * @return: nuclear@0: * FreeType error code. 0~means success. nuclear@0: */ nuclear@0: FT_EXPORT( FT_Error ) nuclear@0: FT_Stroker_New( FT_Library library, nuclear@0: FT_Stroker *astroker ); nuclear@0: nuclear@0: nuclear@0: /************************************************************** nuclear@0: * nuclear@0: * @function: nuclear@0: * FT_Stroker_Set nuclear@0: * nuclear@0: * @description: nuclear@0: * Reset a stroker object's attributes. nuclear@0: * nuclear@0: * @input: nuclear@0: * stroker :: nuclear@0: * The target stroker handle. nuclear@0: * nuclear@0: * radius :: nuclear@0: * The border radius. nuclear@0: * nuclear@0: * line_cap :: nuclear@0: * The line cap style. nuclear@0: * nuclear@0: * line_join :: nuclear@0: * The line join style. nuclear@0: * nuclear@0: * miter_limit :: nuclear@0: * The miter limit for the FT_STROKER_LINEJOIN_MITER style, nuclear@0: * expressed as 16.16 fixed point value. nuclear@0: * nuclear@0: * @note: nuclear@0: * The radius is expressed in the same units as the outline nuclear@0: * coordinates. nuclear@0: */ nuclear@0: FT_EXPORT( void ) nuclear@0: FT_Stroker_Set( FT_Stroker stroker, nuclear@0: FT_Fixed radius, nuclear@0: FT_Stroker_LineCap line_cap, nuclear@0: FT_Stroker_LineJoin line_join, nuclear@0: FT_Fixed miter_limit ); nuclear@0: nuclear@0: nuclear@0: /************************************************************** nuclear@0: * nuclear@0: * @function: nuclear@0: * FT_Stroker_Rewind nuclear@0: * nuclear@0: * @description: nuclear@0: * Reset a stroker object without changing its attributes. nuclear@0: * You should call this function before beginning a new nuclear@0: * series of calls to @FT_Stroker_BeginSubPath or nuclear@0: * @FT_Stroker_EndSubPath. nuclear@0: * nuclear@0: * @input: nuclear@0: * stroker :: nuclear@0: * The target stroker handle. nuclear@0: */ nuclear@0: FT_EXPORT( void ) nuclear@0: FT_Stroker_Rewind( FT_Stroker stroker ); nuclear@0: nuclear@0: nuclear@0: /************************************************************** nuclear@0: * nuclear@0: * @function: nuclear@0: * FT_Stroker_ParseOutline nuclear@0: * nuclear@0: * @description: nuclear@0: * A convenience function used to parse a whole outline with nuclear@0: * the stroker. The resulting outline(s) can be retrieved nuclear@0: * later by functions like @FT_Stroker_GetCounts and @FT_Stroker_Export. nuclear@0: * nuclear@0: * @input: nuclear@0: * stroker :: nuclear@0: * The target stroker handle. nuclear@0: * nuclear@0: * outline :: nuclear@0: * The source outline. nuclear@0: * nuclear@0: * opened :: nuclear@0: * A boolean. If~1, the outline is treated as an open path instead nuclear@0: * of a closed one. nuclear@0: * nuclear@0: * @return: nuclear@0: * FreeType error code. 0~means success. nuclear@0: * nuclear@0: * @note: nuclear@0: * If `opened' is~0 (the default), the outline is treated as a closed nuclear@0: * path, and the stroker generates two distinct `border' outlines. nuclear@0: * nuclear@0: * If `opened' is~1, the outline is processed as an open path, and the nuclear@0: * stroker generates a single `stroke' outline. nuclear@0: * nuclear@0: * This function calls @FT_Stroker_Rewind automatically. nuclear@0: */ nuclear@0: FT_EXPORT( FT_Error ) nuclear@0: FT_Stroker_ParseOutline( FT_Stroker stroker, nuclear@0: FT_Outline* outline, nuclear@0: FT_Bool opened ); nuclear@0: nuclear@0: nuclear@0: /************************************************************** nuclear@0: * nuclear@0: * @function: nuclear@0: * FT_Stroker_BeginSubPath nuclear@0: * nuclear@0: * @description: nuclear@0: * Start a new sub-path in the stroker. nuclear@0: * nuclear@0: * @input: nuclear@0: * stroker :: nuclear@0: * The target stroker handle. nuclear@0: * nuclear@0: * to :: nuclear@0: * A pointer to the start vector. nuclear@0: * nuclear@0: * open :: nuclear@0: * A boolean. If~1, the sub-path is treated as an open one. nuclear@0: * nuclear@0: * @return: nuclear@0: * FreeType error code. 0~means success. nuclear@0: * nuclear@0: * @note: nuclear@0: * This function is useful when you need to stroke a path that is nuclear@0: * not stored as an @FT_Outline object. nuclear@0: */ nuclear@0: FT_EXPORT( FT_Error ) nuclear@0: FT_Stroker_BeginSubPath( FT_Stroker stroker, nuclear@0: FT_Vector* to, nuclear@0: FT_Bool open ); nuclear@0: nuclear@0: nuclear@0: /************************************************************** nuclear@0: * nuclear@0: * @function: nuclear@0: * FT_Stroker_EndSubPath nuclear@0: * nuclear@0: * @description: nuclear@0: * Close the current sub-path in the stroker. nuclear@0: * nuclear@0: * @input: nuclear@0: * stroker :: nuclear@0: * The target stroker handle. nuclear@0: * nuclear@0: * @return: nuclear@0: * FreeType error code. 0~means success. nuclear@0: * nuclear@0: * @note: nuclear@0: * You should call this function after @FT_Stroker_BeginSubPath. nuclear@0: * If the subpath was not `opened', this function `draws' a nuclear@0: * single line segment to the start position when needed. nuclear@0: */ nuclear@0: FT_EXPORT( FT_Error ) nuclear@0: FT_Stroker_EndSubPath( FT_Stroker stroker ); nuclear@0: nuclear@0: nuclear@0: /************************************************************** nuclear@0: * nuclear@0: * @function: nuclear@0: * FT_Stroker_LineTo nuclear@0: * nuclear@0: * @description: nuclear@0: * `Draw' a single line segment in the stroker's current sub-path, nuclear@0: * from the last position. nuclear@0: * nuclear@0: * @input: nuclear@0: * stroker :: nuclear@0: * The target stroker handle. nuclear@0: * nuclear@0: * to :: nuclear@0: * A pointer to the destination point. nuclear@0: * nuclear@0: * @return: nuclear@0: * FreeType error code. 0~means success. nuclear@0: * nuclear@0: * @note: nuclear@0: * You should call this function between @FT_Stroker_BeginSubPath and nuclear@0: * @FT_Stroker_EndSubPath. nuclear@0: */ nuclear@0: FT_EXPORT( FT_Error ) nuclear@0: FT_Stroker_LineTo( FT_Stroker stroker, nuclear@0: FT_Vector* to ); nuclear@0: nuclear@0: nuclear@0: /************************************************************** nuclear@0: * nuclear@0: * @function: nuclear@0: * FT_Stroker_ConicTo nuclear@0: * nuclear@0: * @description: nuclear@0: * `Draw' a single quadratic Bézier in the stroker's current sub-path, nuclear@0: * from the last position. nuclear@0: * nuclear@0: * @input: nuclear@0: * stroker :: nuclear@0: * The target stroker handle. nuclear@0: * nuclear@0: * control :: nuclear@0: * A pointer to a Bézier control point. nuclear@0: * nuclear@0: * to :: nuclear@0: * A pointer to the destination point. nuclear@0: * nuclear@0: * @return: nuclear@0: * FreeType error code. 0~means success. nuclear@0: * nuclear@0: * @note: nuclear@0: * You should call this function between @FT_Stroker_BeginSubPath and nuclear@0: * @FT_Stroker_EndSubPath. nuclear@0: */ nuclear@0: FT_EXPORT( FT_Error ) nuclear@0: FT_Stroker_ConicTo( FT_Stroker stroker, nuclear@0: FT_Vector* control, nuclear@0: FT_Vector* to ); nuclear@0: nuclear@0: nuclear@0: /************************************************************** nuclear@0: * nuclear@0: * @function: nuclear@0: * FT_Stroker_CubicTo nuclear@0: * nuclear@0: * @description: nuclear@0: * `Draw' a single cubic Bézier in the stroker's current sub-path, nuclear@0: * from the last position. nuclear@0: * nuclear@0: * @input: nuclear@0: * stroker :: nuclear@0: * The target stroker handle. nuclear@0: * nuclear@0: * control1 :: nuclear@0: * A pointer to the first Bézier control point. nuclear@0: * nuclear@0: * control2 :: nuclear@0: * A pointer to second Bézier control point. nuclear@0: * nuclear@0: * to :: nuclear@0: * A pointer to the destination point. nuclear@0: * nuclear@0: * @return: nuclear@0: * FreeType error code. 0~means success. nuclear@0: * nuclear@0: * @note: nuclear@0: * You should call this function between @FT_Stroker_BeginSubPath and nuclear@0: * @FT_Stroker_EndSubPath. nuclear@0: */ nuclear@0: FT_EXPORT( FT_Error ) nuclear@0: FT_Stroker_CubicTo( FT_Stroker stroker, nuclear@0: FT_Vector* control1, nuclear@0: FT_Vector* control2, nuclear@0: FT_Vector* to ); nuclear@0: nuclear@0: nuclear@0: /************************************************************** nuclear@0: * nuclear@0: * @function: nuclear@0: * FT_Stroker_GetBorderCounts nuclear@0: * nuclear@0: * @description: nuclear@0: * Call this function once you have finished parsing your paths nuclear@0: * with the stroker. It returns the number of points and nuclear@0: * contours necessary to export one of the `border' or `stroke' nuclear@0: * outlines generated by the stroker. nuclear@0: * nuclear@0: * @input: nuclear@0: * stroker :: nuclear@0: * The target stroker handle. nuclear@0: * nuclear@0: * border :: nuclear@0: * The border index. nuclear@0: * nuclear@0: * @output: nuclear@0: * anum_points :: nuclear@0: * The number of points. nuclear@0: * nuclear@0: * anum_contours :: nuclear@0: * The number of contours. nuclear@0: * nuclear@0: * @return: nuclear@0: * FreeType error code. 0~means success. nuclear@0: * nuclear@0: * @note: nuclear@0: * When an outline, or a sub-path, is `closed', the stroker generates nuclear@0: * two independent `border' outlines, named `left' and `right'. nuclear@0: * nuclear@0: * When the outline, or a sub-path, is `opened', the stroker merges nuclear@0: * the `border' outlines with caps. The `left' border receives all nuclear@0: * points, while the `right' border becomes empty. nuclear@0: * nuclear@0: * Use the function @FT_Stroker_GetCounts instead if you want to nuclear@0: * retrieve the counts associated to both borders. nuclear@0: */ nuclear@0: FT_EXPORT( FT_Error ) nuclear@0: FT_Stroker_GetBorderCounts( FT_Stroker stroker, nuclear@0: FT_StrokerBorder border, nuclear@0: FT_UInt *anum_points, nuclear@0: FT_UInt *anum_contours ); nuclear@0: nuclear@0: nuclear@0: /************************************************************** nuclear@0: * nuclear@0: * @function: nuclear@0: * FT_Stroker_ExportBorder nuclear@0: * nuclear@0: * @description: nuclear@0: * Call this function after @FT_Stroker_GetBorderCounts to nuclear@0: * export the corresponding border to your own @FT_Outline nuclear@0: * structure. nuclear@0: * nuclear@0: * Note that this function appends the border points and nuclear@0: * contours to your outline, but does not try to resize its nuclear@0: * arrays. nuclear@0: * nuclear@0: * @input: nuclear@0: * stroker :: nuclear@0: * The target stroker handle. nuclear@0: * nuclear@0: * border :: nuclear@0: * The border index. nuclear@0: * nuclear@0: * outline :: nuclear@0: * The target outline handle. nuclear@0: * nuclear@0: * @note: nuclear@0: * Always call this function after @FT_Stroker_GetBorderCounts to nuclear@0: * get sure that there is enough room in your @FT_Outline object to nuclear@0: * receive all new data. nuclear@0: * nuclear@0: * When an outline, or a sub-path, is `closed', the stroker generates nuclear@0: * two independent `border' outlines, named `left' and `right' nuclear@0: * nuclear@0: * When the outline, or a sub-path, is `opened', the stroker merges nuclear@0: * the `border' outlines with caps. The `left' border receives all nuclear@0: * points, while the `right' border becomes empty. nuclear@0: * nuclear@0: * Use the function @FT_Stroker_Export instead if you want to nuclear@0: * retrieve all borders at once. nuclear@0: */ nuclear@0: FT_EXPORT( void ) nuclear@0: FT_Stroker_ExportBorder( FT_Stroker stroker, nuclear@0: FT_StrokerBorder border, nuclear@0: FT_Outline* outline ); nuclear@0: nuclear@0: nuclear@0: /************************************************************** nuclear@0: * nuclear@0: * @function: nuclear@0: * FT_Stroker_GetCounts nuclear@0: * nuclear@0: * @description: nuclear@0: * Call this function once you have finished parsing your paths nuclear@0: * with the stroker. It returns the number of points and nuclear@0: * contours necessary to export all points/borders from the stroked nuclear@0: * outline/path. nuclear@0: * nuclear@0: * @input: nuclear@0: * stroker :: nuclear@0: * The target stroker handle. nuclear@0: * nuclear@0: * @output: nuclear@0: * anum_points :: nuclear@0: * The number of points. nuclear@0: * nuclear@0: * anum_contours :: nuclear@0: * The number of contours. nuclear@0: * nuclear@0: * @return: nuclear@0: * FreeType error code. 0~means success. nuclear@0: */ nuclear@0: FT_EXPORT( FT_Error ) nuclear@0: FT_Stroker_GetCounts( FT_Stroker stroker, nuclear@0: FT_UInt *anum_points, nuclear@0: FT_UInt *anum_contours ); nuclear@0: nuclear@0: nuclear@0: /************************************************************** nuclear@0: * nuclear@0: * @function: nuclear@0: * FT_Stroker_Export nuclear@0: * nuclear@0: * @description: nuclear@0: * Call this function after @FT_Stroker_GetBorderCounts to nuclear@0: * export all borders to your own @FT_Outline structure. nuclear@0: * nuclear@0: * Note that this function appends the border points and nuclear@0: * contours to your outline, but does not try to resize its nuclear@0: * arrays. nuclear@0: * nuclear@0: * @input: nuclear@0: * stroker :: nuclear@0: * The target stroker handle. nuclear@0: * nuclear@0: * outline :: nuclear@0: * The target outline handle. nuclear@0: */ nuclear@0: FT_EXPORT( void ) nuclear@0: FT_Stroker_Export( FT_Stroker stroker, nuclear@0: FT_Outline* outline ); nuclear@0: nuclear@0: nuclear@0: /************************************************************** nuclear@0: * nuclear@0: * @function: nuclear@0: * FT_Stroker_Done nuclear@0: * nuclear@0: * @description: nuclear@0: * Destroy a stroker object. nuclear@0: * nuclear@0: * @input: nuclear@0: * stroker :: nuclear@0: * A stroker handle. Can be NULL. nuclear@0: */ nuclear@0: FT_EXPORT( void ) nuclear@0: FT_Stroker_Done( FT_Stroker stroker ); nuclear@0: nuclear@0: nuclear@0: /************************************************************** nuclear@0: * nuclear@0: * @function: nuclear@0: * FT_Glyph_Stroke nuclear@0: * nuclear@0: * @description: nuclear@0: * Stroke a given outline glyph object with a given stroker. nuclear@0: * nuclear@0: * @inout: nuclear@0: * pglyph :: nuclear@0: * Source glyph handle on input, new glyph handle on output. nuclear@0: * nuclear@0: * @input: nuclear@0: * stroker :: nuclear@0: * A stroker handle. nuclear@0: * nuclear@0: * destroy :: nuclear@0: * A Boolean. If~1, the source glyph object is destroyed nuclear@0: * on success. nuclear@0: * nuclear@0: * @return: nuclear@0: * FreeType error code. 0~means success. nuclear@0: * nuclear@0: * @note: nuclear@0: * The source glyph is untouched in case of error. nuclear@0: */ nuclear@0: FT_EXPORT( FT_Error ) nuclear@0: FT_Glyph_Stroke( FT_Glyph *pglyph, nuclear@0: FT_Stroker stroker, nuclear@0: FT_Bool destroy ); nuclear@0: nuclear@0: nuclear@0: /************************************************************** nuclear@0: * nuclear@0: * @function: nuclear@0: * FT_Glyph_StrokeBorder nuclear@0: * nuclear@0: * @description: nuclear@0: * Stroke a given outline glyph object with a given stroker, but nuclear@0: * only return either its inside or outside border. nuclear@0: * nuclear@0: * @inout: nuclear@0: * pglyph :: nuclear@0: * Source glyph handle on input, new glyph handle on output. nuclear@0: * nuclear@0: * @input: nuclear@0: * stroker :: nuclear@0: * A stroker handle. nuclear@0: * nuclear@0: * inside :: nuclear@0: * A Boolean. If~1, return the inside border, otherwise nuclear@0: * the outside border. nuclear@0: * nuclear@0: * destroy :: nuclear@0: * A Boolean. If~1, the source glyph object is destroyed nuclear@0: * on success. nuclear@0: * nuclear@0: * @return: nuclear@0: * FreeType error code. 0~means success. nuclear@0: * nuclear@0: * @note: nuclear@0: * The source glyph is untouched in case of error. nuclear@0: */ nuclear@0: FT_EXPORT( FT_Error ) nuclear@0: FT_Glyph_StrokeBorder( FT_Glyph *pglyph, nuclear@0: FT_Stroker stroker, nuclear@0: FT_Bool inside, nuclear@0: FT_Bool destroy ); nuclear@0: nuclear@0: /* */ nuclear@0: nuclear@0: FT_END_HEADER nuclear@0: nuclear@0: #endif /* __FT_STROKE_H__ */ nuclear@0: nuclear@0: nuclear@0: /* END */ nuclear@0: nuclear@0: nuclear@0: /* Local Variables: */ nuclear@0: /* coding: utf-8 */ nuclear@0: /* End: */