www.pudn.com > freetype.rar > ftstroker.h


#ifndef __FT_STROKER_H__ 
#define __FT_STROKER_H__ 
 
#include "ft2build.h" 
#include "freetype/ftoutln.h" 
 
FT_BEGIN_HEADER 
 
/*@************************************************************* 
 * 
 * @type: FT_Stroker 
 * 
 * @description: 
 *    opaque handler to a path stroker object 
 */ 
  typedef struct FT_StrokerRec_*    FT_Stroker; 
 
 
/*@************************************************************* 
 * 
 * @enum: FT_Stroker_LineJoin 
 * 
 * @description: 
 *    these values determine how two joining lines are rendered 
 *    in a stroker. 
 * 
 * @values: 
 *    FT_STROKER_LINEJOIN_ROUND :: 
 *      used to render rounded line joins. circular arcs are used 
 *      to join two lines smoothly 
 * 
 *    FT_STROKER_LINEJOIN_BEVEL :: 
 *      used to render beveled line joins; i.e. the two joining lines 
 *      are extended until they intersect 
 * 
 *    FT_STROKER_LINEJOIN_MITER :: 
 *      same as beveled rendering, except that an additional line 
 *      break is added if the angle between the two joining lines 
 *      is too closed (this is useful to avoid unpleasant spikes 
 *      in beveled rendering). 
 */ 
  typedef enum 
  { 
    FT_STROKER_LINEJOIN_ROUND = 0, 
    FT_STROKER_LINEJOIN_BEVEL, 
    FT_STROKER_LINEJOIN_MITER 
 
  } FT_Stroker_LineJoin; 
 
 
/*@************************************************************* 
 * 
 * @enum: FT_Stroker_LineCap 
 * 
 * @description: 
 *    these values determine how the end of opened sub-paths are 
 *    rendered in a stroke 
 * 
 * @values: 
 *    FT_STROKER_LINECAP_BUTT :: 
 *      the end of lines is rendered as a full stop on the last 
 *      point itself 
 * 
 *    FT_STROKER_LINECAP_ROUND :: 
 *      the end of lines is rendered as a half-circle around the 
 *      last point 
 * 
 *    FT_STROKER_LINECAP_SQUARE :: 
 *      the end of lines is rendered as a square around the 
 *      last point 
 */ 
  typedef enum 
  { 
    FT_STROKER_LINECAP_BUTT = 0, 
    FT_STROKER_LINECAP_ROUND, 
    FT_STROKER_LINECAP_SQUARE 
 
  } FT_Stroker_LineCap; 
 
 /* */ 
 
  FT_EXPORT( FT_Error ) 
  FT_Stroker_New( FT_Memory    memory, 
                  FT_Stroker  *astroker ); 
 
  FT_EXPORT( void ) 
  FT_Stroker_Set( FT_Stroker           stroker, 
                  FT_Fixed             radius, 
                  FT_Stroker_LineCap   line_cap, 
                  FT_Stroker_LineJoin  line_join, 
                  FT_Fixed             miter_limit ); 
 
 
  FT_EXPORT( FT_Error ) 
  FT_Stroker_ParseOutline( FT_Stroker   stroker, 
                           FT_Outline*  outline, 
                           FT_Bool      opened ); 
 
  FT_EXPORT( FT_Error ) 
  FT_Stroker_BeginSubPath( FT_Stroker  stroker, 
                           FT_Vector*  to, 
                           FT_Bool     open ); 
 
  FT_EXPORT( FT_Error ) 
  FT_Stroker_EndSubPath( FT_Stroker  stroker ); 
 
 
  FT_EXPORT( FT_Error ) 
  FT_Stroker_LineTo( FT_Stroker  stroker, 
                     FT_Vector*  to ); 
 
  FT_EXPORT( FT_Error ) 
  FT_Stroker_ConicTo( FT_Stroker  stroker, 
                      FT_Vector*  control, 
                      FT_Vector*  to ); 
 
  FT_EXPORT( FT_Error ) 
  FT_Stroker_CubicTo( FT_Stroker  stroker, 
                      FT_Vector*  control1, 
                      FT_Vector*  control2, 
                      FT_Vector*  to ); 
 
 
  FT_EXPORT( FT_Error ) 
  FT_Stroker_GetCounts( FT_Stroker  stroker, 
                        FT_UInt    *anum_points, 
                        FT_UInt    *anum_contours ); 
 
  FT_EXPORT( void ) 
  FT_Stroker_Export( FT_Stroker   stroker, 
                     FT_Outline*  outline ); 
 
  FT_EXPORT( void ) 
  FT_Stroker_Done( FT_Stroker  stroker ); 
 
 
FT_END_HEADER 
 
#endif /* __FT_STROKER_H__ */