ftface.cpp

来自「ftgl-2.1.2 夸平台的opengl显示字体」· C++ 代码 · 共 144 行

CPP
144
字号
#include "FTFace.h"#include "FTLibrary.h"#include FT_TRUETYPE_TABLES_HFTFace::FTFace( const char* fontFilePath):   numGlyphs(0),    fontEncodingList(0),    err(0){    const FT_Long DEFAULT_FACE_INDEX = 0;    ftFace = new FT_Face;    err = FT_New_Face( *FTLibrary::Instance().GetLibrary(), fontFilePath, DEFAULT_FACE_INDEX, ftFace);    if( err)    {        delete ftFace;        ftFace = 0;    }    else    {        numGlyphs = (*ftFace)->num_glyphs;        hasKerningTable = FT_HAS_KERNING((*ftFace));    }}FTFace::FTFace( const unsigned char *pBufferBytes, size_t bufferSizeInBytes):   numGlyphs(0),    err(0){    const FT_Long DEFAULT_FACE_INDEX = 0;    ftFace = new FT_Face;    err = FT_New_Memory_Face( *FTLibrary::Instance().GetLibrary(), (FT_Byte *)pBufferBytes, bufferSizeInBytes, DEFAULT_FACE_INDEX, ftFace);    if( err)    {        delete ftFace;        ftFace = 0;    }    else    {        numGlyphs = (*ftFace)->num_glyphs;    }}FTFace::~FTFace(){    if( ftFace)    {        FT_Done_Face( *ftFace);        delete ftFace;        ftFace = 0;    }}bool FTFace::Attach( const char* fontFilePath){    err = FT_Attach_File( *ftFace, fontFilePath);    return !err;}bool FTFace::Attach( const unsigned char *pBufferBytes, size_t bufferSizeInBytes){    FT_Open_Args open;    open.flags = FT_OPEN_MEMORY;    open.memory_base = (FT_Byte *)pBufferBytes;    open.memory_size = bufferSizeInBytes;    err = FT_Attach_Stream( *ftFace, &open);    return !err;}const FTSize& FTFace::Size( const unsigned int size, const unsigned int res){    charSize.CharSize( ftFace, size, res, res);    err = charSize.Error();    return charSize;}unsigned int FTFace::CharMapCount(){    return (*ftFace)->num_charmaps;}FT_Encoding* FTFace::CharMapList(){    if( 0 == fontEncodingList)    {        fontEncodingList = new FT_Encoding[CharMapCount()];        for( size_t encodingIndex = 0; encodingIndex < CharMapCount(); ++encodingIndex)        {            fontEncodingList[encodingIndex] = (*ftFace)->charmaps[encodingIndex]->encoding;        }    }        return fontEncodingList;}FTPoint FTFace::KernAdvance( unsigned int index1, unsigned int index2){    float x, y;    x = y = 0.0f;    if( hasKerningTable && index1 && index2)    {        FT_Vector kernAdvance;        kernAdvance.x = kernAdvance.y = 0;        err = FT_Get_Kerning( *ftFace, index1, index2, ft_kerning_unfitted, &kernAdvance);        if( !err)        {               x = static_cast<float>( kernAdvance.x) / 64.0f;            y = static_cast<float>( kernAdvance.y) / 64.0f;        }    }        return FTPoint( x, y, 0.0);}FT_GlyphSlot FTFace::Glyph( unsigned int index, FT_Int load_flags){    err = FT_Load_Glyph( *ftFace, index, load_flags);    if( err)    {        return NULL;    }    return (*ftFace)->glyph;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?