GRAPHICS: Added support for stem darkening in TTF

This commit is contained in:
Paweł Kołodziejski 2020-09-23 23:34:33 +02:00 committed by Eugene Sandulenko
parent db4295c1a8
commit d05d4df9e0
2 changed files with 23 additions and 9 deletions

View File

@ -71,6 +71,10 @@
#define FAKE_BOLD 0
#endif
#if FREETYPE_MAJOR > 2 || ( FREETYPE_MAJOR == 2 && FREETYPE_MINOR >= 9)
#include FT_TRUETYPE_DRIVER_H
#endif
namespace Graphics {
namespace {
@ -138,9 +142,9 @@ public:
virtual ~TTFFont();
bool load(Common::SeekableReadStream &stream, int size, TTFSizeMode sizeMode,
uint dpi, TTFRenderMode renderMode, const uint32 *mapping);
uint dpi, TTFRenderMode renderMode, const uint32 *mapping, bool stemDarkening);
bool load(uint8 *ttfFile, uint32 sizeFile, int32 faceIndex, bool fakeBold, bool fakeItalic,
int size, TTFSizeMode sizeMode, uint dpi, TTFRenderMode renderMode, const uint32 *mapping);
int size, TTFSizeMode sizeMode, uint dpi, TTFRenderMode renderMode, const uint32 *mapping, bool stemDarkening);
virtual int getFontHeight() const;
@ -211,7 +215,7 @@ TTFFont::~TTFFont() {
}
bool TTFFont::load(Common::SeekableReadStream &stream, int size, TTFSizeMode sizeMode,
uint dpi, TTFRenderMode renderMode, const uint32 *mapping) {
uint dpi, TTFRenderMode renderMode, const uint32 *mapping, bool stemDarkening) {
if (!g_ttf.isInitialized())
return false;
@ -227,7 +231,7 @@ bool TTFFont::load(Common::SeekableReadStream &stream, int size, TTFSizeMode siz
return false;
}
if (!load(ttfFile, sizeFile, 0, false, false, size, sizeMode, dpi, renderMode, mapping)) {
if (!load(ttfFile, sizeFile, 0, false, false, size, sizeMode, dpi, renderMode, mapping, stemDarkening)) {
delete[] ttfFile;
return false;
}
@ -237,7 +241,7 @@ bool TTFFont::load(Common::SeekableReadStream &stream, int size, TTFSizeMode siz
}
bool TTFFont::load(uint8 *ttfFile, uint32 sizeFile, int32 faceIndex, bool bold, bool italic,
int size, TTFSizeMode sizeMode, uint dpi, TTFRenderMode renderMode, const uint32 *mapping) {
int size, TTFSizeMode sizeMode, uint dpi, TTFRenderMode renderMode, const uint32 *mapping, bool stemDarkening) {
_initialized = false;
if (!g_ttf.isInitialized())
@ -266,6 +270,16 @@ bool TTFFont::load(uint8 *ttfFile, uint32 sizeFile, int32 faceIndex, bool bold,
return false;
}
if (stemDarkening) {
#if FREETYPE_MAJOR > 2 || ( FREETYPE_MAJOR == 2 && FREETYPE_MINOR >= 9)
FT_Parameter param;
param.tag = FT_PARAM_TAG_STEM_DARKENING;
param.data = &stemDarkening;
FT_Face_Properties(_face, 1, &param);
#else
warning("Stem darkening is not available with this version of FreeType");
#endif
}
// Check whether we have kerning support
_hasKerning = (FT_HAS_KERNING(_face) != 0);
@ -808,10 +822,10 @@ void TTFFont::assureCached(uint32 chr) const {
}
}
Font *loadTTFFont(Common::SeekableReadStream &stream, int size, TTFSizeMode sizeMode, uint dpi, TTFRenderMode renderMode, const uint32 *mapping) {
Font *loadTTFFont(Common::SeekableReadStream &stream, int size, TTFSizeMode sizeMode, uint dpi, TTFRenderMode renderMode, const uint32 *mapping, bool stemDarkening) {
TTFFont *font = new TTFFont();
if (!font->load(stream, size, sizeMode, dpi, renderMode, mapping)) {
if (!font->load(stream, size, sizeMode, dpi, renderMode, mapping, stemDarkening)) {
delete font;
return 0;
}
@ -1000,7 +1014,7 @@ Font *findTTFace(const Common::Array<Common::String> &files, const Common::U32St
}
if (!font->load(bestTTFFile, bestSize, bestFaceId, bold, italic, size, sizeMode,
dpi, renderMode, mapping)) {
dpi, renderMode, mapping, false)) {
delete font;
delete [] bestTTFFile;
return nullptr;

View File

@ -95,7 +95,7 @@ enum TTFSizeMode {
* supported.
* @return 0 in case loading fails, otherwise a pointer to the Font object.
*/
Font *loadTTFFont(Common::SeekableReadStream &stream, int size, TTFSizeMode sizeMode = kTTFSizeModeCharacter, uint dpi = 0, TTFRenderMode renderMode = kTTFRenderModeLight, const uint32 *mapping = 0);
Font *loadTTFFont(Common::SeekableReadStream &stream, int size, TTFSizeMode sizeMode = kTTFSizeModeCharacter, uint dpi = 0, TTFRenderMode renderMode = kTTFRenderModeLight, const uint32 *mapping = 0, bool stemDarkening = false);
/**
* Loads a TTF font file from the common fonts archive.