Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'extern/bFTGL/src/FTOutlineGlyph.cpp')
-rw-r--r--extern/bFTGL/src/FTOutlineGlyph.cpp57
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;
+}
+