diff options
Diffstat (limited to 'extern/bFTGL/src/FTOutlineGlyph.cpp')
-rw-r--r-- | extern/bFTGL/src/FTOutlineGlyph.cpp | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/extern/bFTGL/src/FTOutlineGlyph.cpp b/extern/bFTGL/src/FTOutlineGlyph.cpp new file mode 100644 index 00000000000..340c7804140 --- /dev/null +++ b/extern/bFTGL/src/FTOutlineGlyph.cpp @@ -0,0 +1,57 @@ +#include "FTOutlineGlyph.h" +#include "FTVectoriser.h" + + +FTOutlineGlyph::FTOutlineGlyph( FT_GlyphSlot glyph) +: FTGlyph( glyph), + glList(0) +{ + if( ft_glyph_format_outline != glyph->format) + { + err = 0x14; // Invalid_Outline + return; + } + + FTVectoriser vectoriser( glyph); + + size_t numContours = vectoriser.ContourCount(); + if ( ( numContours < 1) || ( vectoriser.PointCount() < 3)) + { + return; + } + + glList = glGenLists(1); + glNewList( glList, GL_COMPILE); + for( unsigned int c = 0; c < numContours; ++c) + { + const FTContour* contour = vectoriser.Contour(c); + + glBegin( GL_LINE_LOOP); + for( unsigned int p = 0; p < contour->PointCount(); ++p) + { + glVertex2f( contour->Point(p).x / 64.0f, contour->Point(p).y / 64.0f); + } + glEnd(); + } + glEndList(); +} + + +FTOutlineGlyph::~FTOutlineGlyph() +{ + glDeleteLists( glList, 1); +} + + +float FTOutlineGlyph::Render( const FTPoint& pen) +{ + if( glList) + { + glTranslatef( pen.x, pen.y, 0); + glCallList( glList); + glTranslatef( -pen.x, -pen.y, 0); + } + + return advance; +} + |