#ifndef __FT_STROKER_H__ #define __FT_STROKER_H__ #include #include FT_OUTLINE_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__ */