forked from Kitware/VTK
-
Notifications
You must be signed in to change notification settings - Fork 0
/
FTGlyphContainer.cpp
75 lines (59 loc) · 1.53 KB
/
FTGlyphContainer.cpp
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
#include "FTGlyphContainer.h"
#include "FTGlyph.h"
#include "FTFace.h"
#ifdef FTGL_DEBUG
#include "mmgr.h"
#endif
#ifdef FTGL_USE_NAMESPACE
namespace ftgl
{
#endif
FTGlyphContainer::FTGlyphContainer( FTFace* f, unsigned int g, bool p)
: preCache( p),
numGlyphs( g),
face( f),
err( 0)
{
// Fill the glyphlist with null glyphs
glyphs.resize( g, NULL);
}
FTGlyphContainer::~FTGlyphContainer()
{
GlyphVector::iterator iter;
for( iter = glyphs.begin(); iter != glyphs.end(); ++iter)
{
if( *iter)
{
delete *iter;
}
}
glyphs.clear();
}
float FTGlyphContainer::Advance( unsigned int index, unsigned int next)
{
unsigned int left = face->CharIndex( index);
unsigned int right = face->CharIndex( next);
float width = (float)face->KernAdvance( left, right).x;
width += glyphs[left]->Advance();
return width;
}
FT_Vector& FTGlyphContainer::render( unsigned int index,
unsigned int next,
FT_Vector pen,
const FTGLRenderContext *context)
{
kernAdvance.x = 0; kernAdvance.y = 0;
unsigned int left = face->CharIndex( index);
unsigned int right = face->CharIndex( next);
kernAdvance = face->KernAdvance( left, right);
if( !face->Error())
{
advance = glyphs[left]->Render(pen, context);
}
kernAdvance.x = (FT_Pos)(advance + kernAdvance.x);
// kernAdvance.y = advance.y + kernAdvance.y;
return kernAdvance;
}
#ifdef FTGL_USE_NAMESPACE
} // namespace ftgl
#endif