| Index: core/src/fxge/ge/fx_ge_font.cpp
|
| diff --git a/core/src/fxge/ge/fx_ge_font.cpp b/core/src/fxge/ge/fx_ge_font.cpp
|
| index 468033eb01dbb8fbc509831e6b820890ae5333fe..7517cf1bed7550f0866834eef7451240f5dce13e 100644
|
| --- a/core/src/fxge/ge/fx_ge_font.cpp
|
| +++ b/core/src/fxge/ge/fx_ge_font.cpp
|
| @@ -39,6 +39,10 @@ CFX_UnicodeEncodingEx* _FXFM_CreateFontEncoding(CFX_Font* pFont,
|
| return new CFX_UnicodeEncodingEx(pFont, nEncodingID);
|
| }
|
|
|
| +FXFT_Face FT_LoadFont(const uint8_t* pData, int size) {
|
| + return CFX_GEModule::Get()->GetFontMgr()->GetFixedFace(pData, size, 0);
|
| +}
|
| +
|
| } // namespace
|
|
|
| CFX_Font::CFX_Font() {
|
| @@ -181,23 +185,27 @@ FX_BOOL _LoadFile(FXFT_Library library,
|
| }
|
| return TRUE;
|
| }
|
| +
|
| FX_BOOL CFX_Font::LoadFile(IFX_FileRead* pFile,
|
| int nFaceIndex,
|
| int* pFaceCount) {
|
| m_bEmbedded = FALSE;
|
| - FXFT_Library library;
|
| - if (CFX_GEModule::Get()->GetFontMgr()->m_FTLibrary == NULL)
|
| - FXFT_Init_FreeType(&CFX_GEModule::Get()->GetFontMgr()->m_FTLibrary);
|
| - library = CFX_GEModule::Get()->GetFontMgr()->m_FTLibrary;
|
| - FXFT_Stream stream = NULL;
|
| +
|
| + CFX_FontMgr* pFontMgr = CFX_GEModule::Get()->GetFontMgr();
|
| + pFontMgr->InitFTLibrary();
|
| + FXFT_Library library = pFontMgr->GetFTLibrary();
|
| +
|
| + FXFT_Stream stream = nullptr;
|
| if (!_LoadFile(library, &m_Face, pFile, &stream, nFaceIndex))
|
| return FALSE;
|
| +
|
| if (pFaceCount)
|
| *pFaceCount = (int)m_Face->num_faces;
|
| m_pOwnedStream = stream;
|
| FXFT_Set_Pixel_Sizes(m_Face, 0, 64);
|
| return TRUE;
|
| }
|
| +
|
| int CFX_Font::GetGlyphWidth(FX_DWORD glyph_index) {
|
| if (!m_Face) {
|
| return 0;
|
| @@ -215,28 +223,12 @@ int CFX_Font::GetGlyphWidth(FX_DWORD glyph_index) {
|
| FXFT_Get_Glyph_HoriAdvance(m_Face));
|
| return width;
|
| }
|
| -static FXFT_Face FT_LoadFont(uint8_t* pData, int size) {
|
| - FXFT_Library library;
|
| - if (CFX_GEModule::Get()->GetFontMgr()->m_FTLibrary == NULL) {
|
| - FXFT_Init_FreeType(&CFX_GEModule::Get()->GetFontMgr()->m_FTLibrary);
|
| - }
|
| - library = CFX_GEModule::Get()->GetFontMgr()->m_FTLibrary;
|
| - FXFT_Face face = NULL;
|
| - int error = FXFT_New_Memory_Face(library, pData, size, 0, &face);
|
| - if (error) {
|
| - return NULL;
|
| - }
|
| - error = FXFT_Set_Pixel_Sizes(face, 64, 64);
|
| - if (error) {
|
| - return NULL;
|
| - }
|
| - return face;
|
| -}
|
| +
|
| FX_BOOL CFX_Font::LoadEmbedded(const uint8_t* data, FX_DWORD size) {
|
| m_pFontDataAllocation = FX_Alloc(uint8_t, size);
|
| FXSYS_memcpy(m_pFontDataAllocation, data, size);
|
| - m_Face = FT_LoadFont((uint8_t*)m_pFontDataAllocation, size);
|
| - m_pFontData = (uint8_t*)m_pFontDataAllocation;
|
| + m_Face = FT_LoadFont(m_pFontDataAllocation, size);
|
| + m_pFontData = m_pFontDataAllocation;
|
| m_bEmbedded = TRUE;
|
| m_dwSize = size;
|
| return m_Face != NULL;
|
|
|