These used to be FTVectorGlyph. Changed the name.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
diff --git a/include/FTOutlineGlyph.h b/include/FTOutlineGlyph.h
new file mode 100644
index 0000000..eb2dd37
--- /dev/null
+++ b/include/FTOutlineGlyph.h
@@ -0,0 +1,36 @@
+#ifndef __FTOutlineGlyph__
+#define __FTOutlineGlyph__
+
+#include <ft2build.h>
+#include FT_FREETYPE_H
+#include FT_GLYPH_H
+
+#include "FTGlyph.h"
+
+class FTVectoriser;
+
+class FTOutlineGlyph : public FTGlyph
+{
+ public:
+ // methods
+ FTOutlineGlyph( FT_Glyph glyph);
+ virtual ~FTOutlineGlyph();
+ virtual float Render( const FT_Vector& pen);
+
+ // attributes
+
+ private:
+ // methods
+
+ // attributes
+ FTVectoriser* vectoriser;
+ int numPoints;
+ int numContours;
+ int* contourLength;
+ double* data;
+ int glList;
+
+};
+
+
+#endif // __FTOutlineGlyph__
diff --git a/src/FTOutlineGlyph.cpp b/src/FTOutlineGlyph.cpp
new file mode 100644
index 0000000..8e53871
--- /dev/null
+++ b/src/FTOutlineGlyph.cpp
@@ -0,0 +1,83 @@
+#include "GL/gl.h"
+
+#include "FTOutlineGlyph.h"
+#include "FTVectoriser.h"
+#include "FTGL.h"
+
+
+
+FTOutlineGlyph::FTOutlineGlyph( FT_Glyph glyph)
+: FTGlyph(),
+ vectoriser(0),
+ numPoints(0),
+ numContours(0),
+ contourLength(0),
+ data(0),
+ glList(0)
+{
+ if( ft_glyph_format_outline != glyph->format)
+ {
+ return;
+ }
+
+ vectoriser = new FTVectoriser( glyph);
+
+ vectoriser->Ingest();
+ numContours = vectoriser->contours();
+ contourLength = new int[ numContours];
+
+ for( int cn = 0; cn < numContours; ++cn)
+ {
+ contourLength[cn] = vectoriser->contourSize( cn);
+ }
+
+ numPoints = vectoriser->points();
+ data = new double[ numPoints * 3];
+ vectoriser->Output( data);
+
+ advance = glyph->advance.x >> 16;
+
+ delete vectoriser;
+
+ if ( ( numContours < 1) || ( numPoints < 3))
+ return;
+
+ glList = glGenLists(1);
+ int d = 0;
+
+ glNewList( glList, GL_COMPILE);
+ for( int c = 0; c < numContours; ++c)
+ {
+ glBegin( GL_LINE_LOOP);
+ for( int p = 0; p < ( contourLength[c]); ++p)
+ {
+ glVertex2dv( data + d);
+ d += 3;
+ }
+ glEnd();
+ }
+ glEndList();
+
+ // discard glyph image (bitmap or not)
+ FT_Done_Glyph( glyph); // Why does this have to be HERE
+}
+
+
+FTOutlineGlyph::~FTOutlineGlyph()
+{
+ delete [] data;
+ delete [] contourLength;
+}
+
+
+float FTOutlineGlyph::Render( const FT_Vector& pen)
+{
+ if( glList)
+ {
+ glTranslatef( pen.x, pen.y, 0);
+ glCallList( glList);
+ glTranslatef( -pen.x, -pen.y, 0);
+ }
+
+ return advance;
+}