Edit

kc3-lang/ftgl/src/FTOutlineGlyph.cpp

Branch :

  • Show log

    Commit

  • Author : henry
    Date : 2004-10-17 00:40:24
    Hash : 55888982
    Message : Changed advance to be an FTPoint rather than a float.

  • src/FTOutlineGlyph.cpp
  • #include    "FTOutlineGlyph.h"
    #include    "FTVectoriser.h"
    
    
    FTOutlineGlyph::FTOutlineGlyph( FT_GlyphSlot glyph, bool useDisplayList)
    :   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;
        }
    
        if(useDisplayList)
        {
            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 pointIndex = 0; pointIndex < contour->PointCount(); ++pointIndex)
                {
                    FTPoint point = contour->Point(pointIndex);
                    glVertex2f( point.X() / 64.0f, point.Y() / 64.0f);
                }
            glEnd();
        }
    
        if(useDisplayList)
        {
            glEndList();
        }
    }
    
    
    FTOutlineGlyph::~FTOutlineGlyph()
    {
        glDeleteLists( glList, 1);
    }
    
    
    const FTPoint& FTOutlineGlyph::Render( const FTPoint& pen)
    {
        glTranslatef( pen.X(), pen.Y(), 0.0f);
    
        if( glList)
        {
            glCallList( glList);
        }
        
        return advance;
    }