+#include <freetype/ftglyph.h>
+
+#ifndef FT_Outline_Decompose
+ FT_EXPORT( FT_Error ) FT_Outline_Decompose(
+ FT_Outline* outline,
+ const FT_Outline_Funcs* interface,
+ void* user );
+#endif
+
+typedef struct _OutlineInfo OutlineInfo;
+struct _OutlineInfo {
+ FILE *OUT;
+ FT_Vector glyph_origin;
+ int dpi;
+};
+
+static int paps_move_to( FT_Vector* to,
+ void *user_data)
+{
+ OutlineInfo *outline_info = (OutlineInfo*)user_data;
+ fprintf(outline_info->OUT, "%d %d moveto\n",
+ (int)to->x ,
+ (int)to->y );
+ return 0;
+}
+
+static int paps_line_to( FT_Vector* to,
+ void *user_data)
+{
+ OutlineInfo *outline_info = (OutlineInfo*)user_data;
+ fprintf(outline_info->OUT, "%d %d lineto\n",
+ (int)to->x ,
+ (int)to->y );
+ return 0;
+}
+
+static int paps_conic_to( FT_Vector* control,
+ FT_Vector* to,
+ void *user_data)
+{
+ OutlineInfo *outline_info = (OutlineInfo*)user_data;
+ fprintf(outline_info->OUT, "%d %d %d %d conicto\n",
+ (int)control->x ,
+ (int)control->y ,
+ (int)to->x ,
+ (int)to->y );
+ return 0;
+}
+
+static int paps_cubic_to( FT_Vector* control1,
+ FT_Vector* control2,
+ FT_Vector* to,
+ void *user_data)
+{
+ OutlineInfo *outline_info = (OutlineInfo*)user_data;
+ fprintf(outline_info->OUT,
+ "%d %d %d %d %d %d curveto\n",
+ (int)control1->x ,
+ (int)control1->y ,
+ (int)control2->x ,
+ (int)control2->y ,
+ (int)to->x ,
+ (int)to->y );
+ return 0;
+}
+
+static void draw_bezier_outline(FILE *OUT,
+ int dpi,
+ FT_Face face,
+ FT_UInt glyph_index,
+ wxCoord pos_x,
+ wxCoord pos_y
+ )
+{
+ FT_Int load_flags = FT_LOAD_DEFAULT;
+ FT_Glyph glyph;
+
+ /* Output outline */
+ FT_Outline_Funcs outlinefunc =
+ {
+ paps_move_to,
+ paps_line_to,
+ paps_conic_to,
+ paps_cubic_to
+ };
+ OutlineInfo outline_info;
+
+ outline_info.glyph_origin.x = (FT_Pos) pos_x;
+ outline_info.glyph_origin.y = (FT_Pos) pos_y;
+ outline_info.dpi = dpi;
+ outline_info.OUT = OUT;
+
+ fprintf(OUT, "gsave %d %d translate 0 0 0 setrgbcolor\n", pos_x, pos_y);
+ fprintf(OUT, "start_ol\n");
+
+ FT_Load_Glyph(face, glyph_index, load_flags);
+ FT_Get_Glyph (face->glyph, &glyph);
+ FT_Outline_Decompose (&(((FT_OutlineGlyph)glyph)->outline),
+ &outlinefunc, &outline_info);
+ fprintf(OUT, "end_ol grestore \n");
+
+ FT_Done_Glyph (glyph);
+}
+