Merge remote-tracking branch 'Benau/ftcleanup#2'
This commit is contained in:
commit
35316c447d
@ -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
|
||||||
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user