Commit 6e2bd9b8f54e79f61f919041011f28e7605385d3

henry 2001-09-30T23:01:56

These used to be FTVectorGlyph. Changed the name.

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;
+}