update for HEAD-2003050101
[reactos.git] / lib / freetype / include / freetype / ftstroker.h
diff --git a/lib/freetype/include/freetype/ftstroker.h b/lib/freetype/include/freetype/ftstroker.h
new file mode 100644 (file)
index 0000000..a714056
--- /dev/null
@@ -0,0 +1,139 @@
+#ifndef __FT_STROKER_H__
+#define __FT_STROKER_H__
+
+#include <ft2build.h>
+#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__ */