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 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
#ifndef __FTGlyph__
#define __FTGlyph__
#include "FTGL.h"
#include <ft2build.h>
#include FT_FREETYPE_H
#include FT_GLYPH_H
class FTGL_EXPORT FTBBox
{
public:
FTBBox()
: x1(0),
y1(0),
z1(0),
x2(0),
y2(0),
z2(0)
{}
FTBBox( FT_Glyph glyph)
{
FT_BBox bbox;
FT_Glyph_Get_CBox( glyph, ft_glyph_bbox_subpixels, &bbox );
x1 = bbox.xMin >> 6;
y1 = bbox.yMin >> 6;;
z1 = 0;
x2 = bbox.xMax >> 6;;
y2 = bbox.yMax >> 6;;
z2 = 0;
}
FTBBox( int a, int b, int c, int d, int e, int f)
: x1(a),
y1(b),
z1(c),
x2(d),
y2(e),
z2(f)
{}
~FTBBox()
{}
// Make these ftPoints
int x1, y1, z1, x2, y2, z2;
protected:
private:
};
/**
* FTGlyph is the base class for FTGL glyphs.
*
* It provides the interface between Freetype glyphs and their openGL
* renderable counterparts. This is an abstract class and derived classes
* must implement the <code>render</code> function.
*
* @see FTGlyphContainer
*
*/
class FTGL_EXPORT FTGlyph
{
public:
/**
* Constructor
*/
FTGlyph();
/**
* Destructor
*/
virtual ~FTGlyph();
/**
* Renders this glyph at the current pen position.
*
* @param pen The current pen position.
* @return The advance distance for this glyph.
*/
virtual float Render( const FT_Vector& pen) = 0;
/**
* Return the advance width for this glyph.
*
* @return advance width.
*/
float Advance() const { return advance;}
/**
* Return the bounding box for this glyph.
*
* @return bounding box.
*/
FTBBox BBox() const { return bBox;}
/**
* Queries for errors.
*
* @return The current error code.
*/
FT_Error Error() const { return err;}
protected:
/**
* The advance distance for this glyph
*/
float advance;
/**
* Vector from the pen position to the topleft corner of the glyph
*/
FT_Vector pos;
/**
* A freetype bounding box
*/
FTBBox bBox;
/**
* Current error code. Zero means no error.
*/
FT_Error err;
private:
};
#endif // __FTGlyph__