mirror of
https://github.com/AquariaOSE/Aquaria.git
synced 2025-08-14 02:20:19 +00:00
initial commit. This is icculus version 5542b94cae02a6333845854bbbd1abe0a259f1a4
This commit is contained in:
commit
3096eaf5e2
2519 changed files with 816064 additions and 0 deletions
92
ExternalLibs/FTGL/src/FTGlyphContainer.cpp
Normal file
92
ExternalLibs/FTGL/src/FTGlyphContainer.cpp
Normal file
|
@ -0,0 +1,92 @@
|
|||
#include "FTGlyphContainer.h"
|
||||
#include "FTGlyph.h"
|
||||
#include "FTFace.h"
|
||||
#include "FTCharmap.h"
|
||||
|
||||
|
||||
FTGlyphContainer::FTGlyphContainer( FTFace* f)
|
||||
: face(f),
|
||||
err(0)
|
||||
{
|
||||
glyphs.push_back( NULL);
|
||||
charMap = new FTCharmap( face);
|
||||
}
|
||||
|
||||
|
||||
FTGlyphContainer::~FTGlyphContainer()
|
||||
{
|
||||
GlyphVector::iterator glyphIterator;
|
||||
for( glyphIterator = glyphs.begin(); glyphIterator != glyphs.end(); ++glyphIterator)
|
||||
{
|
||||
delete *glyphIterator;
|
||||
}
|
||||
|
||||
glyphs.clear();
|
||||
delete charMap;
|
||||
}
|
||||
|
||||
|
||||
bool FTGlyphContainer::CharMap( FT_Encoding encoding)
|
||||
{
|
||||
bool result = charMap->CharMap( encoding);
|
||||
err = charMap->Error();
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
unsigned int FTGlyphContainer::FontIndex( const unsigned int characterCode) const
|
||||
{
|
||||
return charMap->FontIndex( characterCode);
|
||||
}
|
||||
|
||||
|
||||
void FTGlyphContainer::Add( FTGlyph* tempGlyph, const unsigned int characterCode)
|
||||
{
|
||||
charMap->InsertIndex( characterCode, glyphs.size());
|
||||
glyphs.push_back( tempGlyph);
|
||||
}
|
||||
|
||||
|
||||
const FTGlyph* const FTGlyphContainer::Glyph( const unsigned int characterCode) const
|
||||
{
|
||||
signed int index = charMap->GlyphListIndex( characterCode);
|
||||
return glyphs[index];
|
||||
}
|
||||
|
||||
|
||||
FTBBox FTGlyphContainer::BBox( const unsigned int characterCode) const
|
||||
{
|
||||
return glyphs[charMap->GlyphListIndex( characterCode)]->BBox();
|
||||
}
|
||||
|
||||
|
||||
float FTGlyphContainer::Advance( const unsigned int characterCode, const unsigned int nextCharacterCode)
|
||||
{
|
||||
unsigned int left = charMap->FontIndex( characterCode);
|
||||
unsigned int right = charMap->FontIndex( nextCharacterCode);
|
||||
|
||||
float width = face->KernAdvance( left, right).X();
|
||||
width += glyphs[charMap->GlyphListIndex( characterCode)]->Advance().X();
|
||||
|
||||
return width;
|
||||
}
|
||||
|
||||
|
||||
FTPoint FTGlyphContainer::Render( const unsigned int characterCode, const unsigned int nextCharacterCode, FTPoint penPosition)
|
||||
{
|
||||
FTPoint kernAdvance, advance;
|
||||
|
||||
unsigned int left = charMap->FontIndex( characterCode);
|
||||
unsigned int right = charMap->FontIndex( nextCharacterCode);
|
||||
|
||||
kernAdvance = face->KernAdvance( left, right);
|
||||
|
||||
if( !face->Error())
|
||||
{
|
||||
advance = glyphs[charMap->GlyphListIndex( characterCode)]->Render( penPosition);
|
||||
}
|
||||
|
||||
kernAdvance += advance;
|
||||
return kernAdvance;
|
||||
}
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue