Merge remote-tracking branch 'Benau/ftcleanup#2'

This commit is contained in:
Marianne Gagnon 2015-11-07 21:37:47 -05:00
commit 35316c447d
2 changed files with 44 additions and 36 deletions

View File

@ -31,7 +31,9 @@ namespace GUIEngine
FTEnvironment::FTEnvironment() FTEnvironment::FTEnvironment()
{ {
m_ft_err += FT_Init_FreeType(&(m_ft_lib)); Log::info("Freetype Environment", "Loading fonts...");
checkError(FT_Init_FreeType(&m_ft_lib), "loading freetype library");
loadFont(); loadFont();
} }
@ -41,14 +43,9 @@ FTEnvironment::FTEnvironment()
FTEnvironment::~FTEnvironment() FTEnvironment::~FTEnvironment()
{ {
for (int i = 0; i < F_COUNT; ++i) for (int i = 0; i < F_COUNT; ++i)
m_ft_err += FT_Done_Face(m_ft_face[i]); checkError(FT_Done_Face(m_ft_face[i]), "removing freetype face");
m_ft_err += FT_Done_FreeType(m_ft_lib); checkError(FT_Done_FreeType(m_ft_lib), "removing freetype library");
if (m_ft_err > 0)
Log::error("Freetype Environment", "Can't destroy all fonts.");
else
Log::info("Freetype Environment", "Successfully destroy all fonts.");
} }
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
@ -60,35 +57,45 @@ FT_Face FTEnvironment::getFace(const FontUse font)
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
void FTEnvironment::checkError(FT_Error err, const irr::core::stringc desc)
{
if (err)
{
Log::error("Freetype Environment", "Something wrong when %s!", desc);
}
}
// ----------------------------------------------------------------------------
void FTEnvironment::loadFont() void FTEnvironment::loadFont()
{ {
m_ft_err += FT_New_Face(m_ft_lib, (file_manager->getAssetChecked checkError(FT_New_Face(m_ft_lib, (file_manager->getAssetChecked
(FileManager::TTF, "Ubuntu-R.ttf", true)).c_str(), (FileManager::TTF, "Ubuntu-R.ttf", true)).c_str(),
0, &m_ft_face[F_DEFAULT]); 0, &m_ft_face[F_DEFAULT]), "loading F_DEFAULT");
m_ft_err += FT_New_Face(m_ft_lib, (file_manager->getAssetChecked checkError(FT_New_Face(m_ft_lib, (file_manager->getAssetChecked
(FileManager::TTF, "FreeSans.ttf",true)).c_str(), (FileManager::TTF, "FreeSans.ttf",true)).c_str(),
0, &m_ft_face[F_DEFAULT_FALLBACK]); 0, &m_ft_face[F_DEFAULT_FALLBACK]), "loading F_DEFAULT_FALLBACK");
m_ft_err += FT_New_Face(m_ft_lib, (file_manager->getAssetChecked checkError(FT_New_Face(m_ft_lib, (file_manager->getAssetChecked
(FileManager::TTF, "wqy-microhei.ttf",true)).c_str(), (FileManager::TTF, "wqy-microhei.ttf",true)).c_str(),
0, &m_ft_face[F_CJK]); 0, &m_ft_face[F_CJK]), "loading F_CJK");
m_ft_err += FT_New_Face(m_ft_lib, (file_manager->getAssetChecked checkError(FT_New_Face(m_ft_lib, (file_manager->getAssetChecked
(FileManager::TTF, "NotoNaskhArabicUI-Bold.ttf",true)).c_str(), (FileManager::TTF, "NotoNaskhArabicUI-Bold.ttf",true)).c_str(),
0, &m_ft_face[F_AR]); 0, &m_ft_face[F_AR]), "loading F_AR");
m_ft_err += FT_New_Face(m_ft_lib, (file_manager->getAssetChecked checkError(FT_New_Face(m_ft_lib, (file_manager->getAssetChecked
(FileManager::TTF, "Ubuntu-B.ttf", true)).c_str(), (FileManager::TTF, "Ubuntu-B.ttf", true)).c_str(),
0, &m_ft_face[F_BOLD]); 0, &m_ft_face[F_BOLD]), "loading F_BOLD");
m_ft_err += FT_New_Face(m_ft_lib, (file_manager->getAssetChecked checkError(FT_New_Face(m_ft_lib, (file_manager->getAssetChecked
(FileManager::TTF, "FreeSansBold.ttf", true)).c_str(), (FileManager::TTF, "FreeSansBold.ttf", true)).c_str(),
0, &m_ft_face[F_BOLD_FALLBACK]); 0, &m_ft_face[F_BOLD_FALLBACK]), "loading F_BOLD_FALLBACK");
m_ft_err += FT_New_Face(m_ft_lib, (file_manager->getAssetChecked checkError(FT_New_Face(m_ft_lib, (file_manager->getAssetChecked
(FileManager::TTF, "SigmarOne.otf",true)).c_str(), (FileManager::TTF, "SigmarOne.otf",true)).c_str(),
0, &m_ft_face[F_DIGIT]); 0, &m_ft_face[F_DIGIT]), "loading F_DIGIT");
//Set charmap //Set charmap
for (int h = 0; h < F_COUNT; ++h) for (int h = 0; h < F_COUNT; ++h)
@ -98,7 +105,7 @@ void FTEnvironment::loadFont()
FT_UShort pid = m_ft_face[h]->charmaps[i]->platform_id; FT_UShort pid = m_ft_face[h]->charmaps[i]->platform_id;
FT_UShort eid = m_ft_face[h]->charmaps[i]->encoding_id; FT_UShort eid = m_ft_face[h]->charmaps[i]->encoding_id;
if (((pid == 0) && (eid == 3)) || ((pid == 3) && (eid == 1))) if (((pid == 0) && (eid == 3)) || ((pid == 3) && (eid == 1)))
m_ft_err += FT_Set_Charmap(m_ft_face[h], m_ft_face[h]->charmaps[i]); checkError(FT_Set_Charmap(m_ft_face[h], m_ft_face[h]->charmaps[i]), "setting charmaps");
} }
} }
@ -124,21 +131,16 @@ void FTEnvironment::loadFont()
Log::info("Freetype Environment", "DPI for Title Font is %d.", title_dpi); Log::info("Freetype Environment", "DPI for Title Font is %d.", title_dpi);
Log::info("Freetype Environment", "DPI for Digit Font is %d.", digit_dpi); Log::info("Freetype Environment", "DPI for Digit Font is %d.", digit_dpi);
m_ft_err += FT_Set_Pixel_Sizes(m_ft_face[F_DEFAULT], 0, normal_dpi); checkError(FT_Set_Pixel_Sizes(m_ft_face[F_DEFAULT], 0, normal_dpi), "setting F_DEFAULT size");
m_ft_err += FT_Set_Pixel_Sizes(m_ft_face[F_DEFAULT_FALLBACK], 0, normal_dpi); checkError(FT_Set_Pixel_Sizes(m_ft_face[F_DEFAULT_FALLBACK], 0, normal_dpi), "setting F_DEFAULT_FALLBACK size");
m_ft_err += FT_Set_Pixel_Sizes(m_ft_face[F_CJK], 0, normal_dpi); checkError(FT_Set_Pixel_Sizes(m_ft_face[F_CJK], 0, normal_dpi), "setting F_CJK size");
m_ft_err += FT_Set_Pixel_Sizes(m_ft_face[F_AR], 0, normal_dpi); checkError(FT_Set_Pixel_Sizes(m_ft_face[F_AR], 0, normal_dpi), "setting F_AR size");
m_ft_err += FT_Set_Pixel_Sizes(m_ft_face[F_BOLD], 0, title_dpi); checkError(FT_Set_Pixel_Sizes(m_ft_face[F_BOLD], 0, title_dpi), "setting F_BOLD size");
m_ft_err += FT_Set_Pixel_Sizes(m_ft_face[F_BOLD_FALLBACK], 0, title_dpi); checkError(FT_Set_Pixel_Sizes(m_ft_face[F_BOLD_FALLBACK], 0, title_dpi), "setting F_BOLD_FALLBACK size");
m_ft_err += FT_Set_Pixel_Sizes(m_ft_face[F_DIGIT], 0, digit_dpi); checkError(FT_Set_Pixel_Sizes(m_ft_face[F_DIGIT], 0, digit_dpi), "setting F_DIGIT size");
if (m_ft_err > 0)
Log::error("Freetype Environment", "Can't load all fonts.");
else
Log::info("Freetype Environment", "Successfully loaded all fonts.");
} }
FT_Library FTEnvironment::m_ft_lib = NULL; FT_Library FTEnvironment::m_ft_lib = NULL;
FT_Error FTEnvironment::m_ft_err = 0;
} // guiengine } // guiengine

View File

@ -20,6 +20,7 @@
#include <ft2build.h> #include <ft2build.h>
#include FT_FREETYPE_H #include FT_FREETYPE_H
#include <irrlicht.h>
#include "utils/leak_check.hpp" #include "utils/leak_check.hpp"
@ -62,13 +63,18 @@ enum TTFLoadingType {T_NORMAL, T_DIGIT, T_BOLD};
FT_Face getFace(const FontUse font); FT_Face getFace(const FontUse font);
private: private:
/** Check for any error discovered in a freetype function that will return a FT_Error value.
* \param err The Freetype function.
* \param desc The description of what is the function doing.
*/
void checkError(FT_Error err, const irr::core::stringc desc);
/** Load font face into memory, but don't create glyph yet. /** Load font face into memory, but don't create glyph yet.
*/ */
void loadFont(); void loadFont();
FT_Face m_ft_face[F_COUNT]; FT_Face m_ft_face[F_COUNT];
static FT_Library m_ft_lib; static FT_Library m_ft_lib;
static FT_Error m_ft_err;
}; };
} // guiengine } // guiengine