diff --git a/src/guiengine/ft_environment.cpp b/src/guiengine/ft_environment.cpp index c3f3eb96b..0e8262410 100644 --- a/src/guiengine/ft_environment.cpp +++ b/src/guiengine/ft_environment.cpp @@ -31,7 +31,9 @@ namespace GUIEngine 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(); } @@ -41,14 +43,9 @@ FTEnvironment::FTEnvironment() FTEnvironment::~FTEnvironment() { 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); - - if (m_ft_err > 0) - Log::error("Freetype Environment", "Can't destroy all fonts."); - else - Log::info("Freetype Environment", "Successfully destroy all fonts."); + checkError(FT_Done_FreeType(m_ft_lib), "removing freetype library"); } // ---------------------------------------------------------------------------- @@ -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() { - 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(), - 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(), - 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(), - 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(), - 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(), - 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(), - 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(), - 0, &m_ft_face[F_DIGIT]); + 0, &m_ft_face[F_DIGIT]), "loading F_DIGIT"); //Set charmap 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 eid = m_ft_face[h]->charmaps[i]->encoding_id; 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 Digit Font is %d.", digit_dpi); - m_ft_err += FT_Set_Pixel_Sizes(m_ft_face[F_DEFAULT], 0, normal_dpi); - m_ft_err += FT_Set_Pixel_Sizes(m_ft_face[F_DEFAULT_FALLBACK], 0, normal_dpi); - m_ft_err += FT_Set_Pixel_Sizes(m_ft_face[F_CJK], 0, normal_dpi); - m_ft_err += FT_Set_Pixel_Sizes(m_ft_face[F_AR], 0, normal_dpi); - m_ft_err += FT_Set_Pixel_Sizes(m_ft_face[F_BOLD], 0, title_dpi); - m_ft_err += FT_Set_Pixel_Sizes(m_ft_face[F_BOLD_FALLBACK], 0, title_dpi); - m_ft_err += FT_Set_Pixel_Sizes(m_ft_face[F_DIGIT], 0, digit_dpi); + checkError(FT_Set_Pixel_Sizes(m_ft_face[F_DEFAULT], 0, normal_dpi), "setting F_DEFAULT size"); + checkError(FT_Set_Pixel_Sizes(m_ft_face[F_DEFAULT_FALLBACK], 0, normal_dpi), "setting F_DEFAULT_FALLBACK size"); + checkError(FT_Set_Pixel_Sizes(m_ft_face[F_CJK], 0, normal_dpi), "setting F_CJK size"); + checkError(FT_Set_Pixel_Sizes(m_ft_face[F_AR], 0, normal_dpi), "setting F_AR size"); + checkError(FT_Set_Pixel_Sizes(m_ft_face[F_BOLD], 0, title_dpi), "setting F_BOLD size"); + checkError(FT_Set_Pixel_Sizes(m_ft_face[F_BOLD_FALLBACK], 0, title_dpi), "setting F_BOLD_FALLBACK size"); + 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_Error FTEnvironment::m_ft_err = 0; } // guiengine diff --git a/src/guiengine/ft_environment.hpp b/src/guiengine/ft_environment.hpp index fbcd5364d..e397a85cf 100644 --- a/src/guiengine/ft_environment.hpp +++ b/src/guiengine/ft_environment.hpp @@ -20,6 +20,7 @@ #include #include FT_FREETYPE_H +#include #include "utils/leak_check.hpp" @@ -62,13 +63,18 @@ enum TTFLoadingType {T_NORMAL, T_DIGIT, T_BOLD}; FT_Face getFace(const FontUse font); 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. */ void loadFont(); FT_Face m_ft_face[F_COUNT]; static FT_Library m_ft_lib; - static FT_Error m_ft_err; }; } // guiengine