diff --git a/bam.lua b/bam.lua index 3fd8c7f..60adb07 100644 --- a/bam.lua +++ b/bam.lua @@ -156,6 +156,7 @@ local graphics_module = Module("source/Graphics", { -- Text "Font/Engine/FreeTypeEngine.cpp", "Font/Engine/FreeTypeError.cpp", + "Font/Engine/FreeTypeLib.cpp", "Font/FontDescription.cpp", "Font.cpp", "Text.cpp", diff --git a/source/Graphics/Font/Engine/FreeTypeEngine.cpp b/source/Graphics/Font/Engine/FreeTypeEngine.cpp index 83f66af..e82e73b 100644 --- a/source/Graphics/Font/Engine/FreeTypeEngine.cpp +++ b/source/Graphics/Font/Engine/FreeTypeEngine.cpp @@ -6,58 +6,12 @@ #include FT_STROKER_H #include +#include "FreeTypeLib.h" #include "FreeTypeError.h" #include "FreeTypeEngine.h" namespace sp { -class LibWrapper -{ -public : - static LibWrapper& getInstance() - { - static LibWrapper _inst; - return _inst; - }; - - // Do not implement. - LibWrapper(const LibWrapper&); - void operator=(const LibWrapper&); - - FT_Library handle; - - FT_Stroker stroker; - -private : - - LibWrapper(); - ~LibWrapper(); -}; - -LibWrapper::LibWrapper() -{ - FT_Error error = FT_Init_FreeType(&handle); - if (error) { - Log::error("Could not initialize FreeType"); - return; - } - - Log::info("FreeType font driver was initialized."); - error = FT_Stroker_New(handle, &stroker); -} - -LibWrapper::~LibWrapper() -{ - FT_Error error; - - FT_Stroker_Done(stroker); - - error = FT_Done_FreeType(handle); - if (error) { - Log::error("Could not close FreeType"); - } -} - FreeTypeEngine::FreeTypeEngine(FontDescription desc) : m_face (NULL), m_desc (desc) @@ -86,7 +40,7 @@ bool FreeTypeEngine::loadFromFile(const std::string& filename) FT_Face face; FT_Error error; - error = FT_New_Face(LibWrapper::getInstance().handle, filename.c_str(), 0, &face); + error = FT_New_Face(FreeTypeLib::getInstance().handle, filename.c_str(), 0, &face); if (error) { Log::warn("FreeType: could not load file (%s): %s", filename.c_str(), FT_GetErrorString(error)); @@ -130,7 +84,7 @@ Glyph FreeTypeEngine::loadGlyph(unsigned int codepoint, Image& img, unsigned int FT_Glyph_Metrics& metrics = m_face->glyph->metrics; if (outlineSize) { - FT_Stroker stroker = LibWrapper::getInstance().stroker; + FT_Stroker stroker = FreeTypeLib::getInstance().stroker; FT_Stroker_Set(stroker, outlineSize * 64, FT_STROKER_LINECAP_ROUND, diff --git a/source/Graphics/Font/Engine/FreeTypeLib.cpp b/source/Graphics/Font/Engine/FreeTypeLib.cpp new file mode 100644 index 0000000..9e113ac --- /dev/null +++ b/source/Graphics/Font/Engine/FreeTypeLib.cpp @@ -0,0 +1,37 @@ + +#include +#include "FreeTypeLib.h" + +namespace sp { + +FreeTypeLib& FreeTypeLib::getInstance() +{ + static FreeTypeLib _inst; + return _inst; +}; + +FreeTypeLib::FreeTypeLib() +{ + FT_Error error = FT_Init_FreeType(&handle); + if (error) { + Log::error("Could not initialize FreeType"); + return; + } + + Log::info("FreeType font driver was initialized."); + error = FT_Stroker_New(handle, &stroker); +} + +FreeTypeLib::~FreeTypeLib() +{ + FT_Error error; + + FT_Stroker_Done(stroker); + + error = FT_Done_FreeType(handle); + if (error) { + Log::error("Could not close FreeType"); + } +} + +} // namespace sp diff --git a/source/Graphics/Font/Engine/FreeTypeLib.h b/source/Graphics/Font/Engine/FreeTypeLib.h new file mode 100644 index 0000000..7459a61 --- /dev/null +++ b/source/Graphics/Font/Engine/FreeTypeLib.h @@ -0,0 +1,32 @@ + +#ifndef SPECTRE_GRAPHICS_FONT_ENGINE_FREETYPELIB_H +#define SPECTRE_GRAPHICS_FONT_ENGINE_FREETYPELIB_H + +#include +#include FT_FREETYPE_H +#include FT_STROKER_H + +namespace sp { + +class FreeTypeLib +{ +public : + static FreeTypeLib& getInstance(); + + // Do not implement. + FreeTypeLib(const FreeTypeLib&); + void operator=(const FreeTypeLib&); + + FT_Library handle; + + FT_Stroker stroker; + +private : + + FreeTypeLib(); + ~FreeTypeLib(); +}; + +} // namespace sp + +#endif /* SPECTRE_GRAPHICS_FONT_ENGINE_FREETYPELIB_H */