Set the bounding box and re-order some operations
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
diff --git a/src/FTOutlineGlyph.cpp b/src/FTOutlineGlyph.cpp
index b20ba3f..e4a3b92 100644
--- a/src/FTOutlineGlyph.cpp
+++ b/src/FTOutlineGlyph.cpp
@@ -21,33 +21,34 @@ FTOutlineGlyph::FTOutlineGlyph( FT_Glyph glyph)
vectoriser = new FTVectoriser( glyph);
vectoriser->Process();
+
+ numPoints = vectoriser->points();
numContours = vectoriser->contours();
- contourLength = new int[ numContours];
+ if ( ( numContours < 1) || ( numPoints < 3))
+ {
+ delete vectoriser;
+ return;
+ }
+
+ 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->MakeOutline( data);
+ vectoriser->GetOutline( data);
- advance = glyph->advance.x >> 16;
-
delete vectoriser;
- if ( ( numContours < 1) || ( numPoints < 3))
- return;
-
- glList = glGenLists(1);
int d = 0;
-
+ glList = glGenLists(1);
glNewList( glList, GL_COMPILE);
for( int c = 0; c < numContours; ++c)
{
glBegin( GL_LINE_LOOP);
- for( int p = 0; p < ( contourLength[c]); ++p)
+ for( int p = 0; p < contourLength[c]; ++p)
{
glVertex2dv( data + d);
d += 3;
@@ -56,6 +57,12 @@ FTOutlineGlyph::FTOutlineGlyph( FT_Glyph glyph)
}
glEndList();
+ delete [] data; // FIXME
+ delete [] contourLength; // FIXME
+
+ bBox = FTBBox( glyph);
+ advance = glyph->advance.x >> 16;
+
// discard glyph image (bitmap or not)
FT_Done_Glyph( glyph); // Why does this have to be HERE
}
@@ -63,8 +70,8 @@ FTOutlineGlyph::FTOutlineGlyph( FT_Glyph glyph)
FTOutlineGlyph::~FTOutlineGlyph()
{
- delete [] data;
- delete [] contourLength;
+// delete [] data;
+// delete [] contourLength;
}