1
0
Fork 0

FontEngine/FreeType: move libWrapper to its own compile unit.

This commit is contained in:
Henrik Hautakoski 2020-01-06 00:38:06 +01:00
parent f72178ffd0
commit 093149e72c
No known key found for this signature in database
GPG key ID: 96765B12FEAC4745
4 changed files with 73 additions and 49 deletions

View file

@ -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",

View file

@ -6,58 +6,12 @@
#include FT_STROKER_H
#include <Spectre/System/Log.h>
#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,

View file

@ -0,0 +1,37 @@
#include <Spectre/System/Log.h>
#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

View file

@ -0,0 +1,32 @@
#ifndef SPECTRE_GRAPHICS_FONT_ENGINE_FREETYPELIB_H
#define SPECTRE_GRAPHICS_FONT_ENGINE_FREETYPELIB_H
#include <ft2build.h>
#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 */