From 21b2fd740dbdc2885f427244d9d7847511dd7ef2 Mon Sep 17 00:00:00 2001 From: Ivailo Monev Date: Tue, 17 Dec 2019 02:34:10 +0000 Subject: [PATCH] require Freetype version 2.1.10+ Signed-off-by: Ivailo Monev --- CMakeLists.txt | 3 ++- src/gui/text/qfontengine_ft.cpp | 43 +++++++++------------------------ 2 files changed, 14 insertions(+), 32 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 323fb7040..fc2b915de 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -283,7 +283,8 @@ set_package_properties(X11 PROPERTIES TYPE REQUIRED ) -find_package(Freetype) +# v2.1.10+ required for FT_GlyphSlot_Embolden() +find_package(Freetype 2.1.10) set_package_properties(Freetype PROPERTIES PURPOSE "Required for fonts configuration support" DESCRIPTION "Freely available software library to render fonts" diff --git a/src/gui/text/qfontengine_ft.cpp b/src/gui/text/qfontengine_ft.cpp index e5bf45d08..e6a182376 100644 --- a/src/gui/text/qfontengine_ft.cpp +++ b/src/gui/text/qfontengine_ft.cpp @@ -79,26 +79,6 @@ QT_BEGIN_NAMESPACE -/* - * Freetype 2.1.7 and earlier used width/height - * for matching sizes in the BDF and PCF loaders. - * This has been fixed for 2.1.8. - */ -#if (FREETYPE_MAJOR*10000+FREETYPE_MINOR*100+FREETYPE_PATCH) >= 20105 -#define X_SIZE(face,i) ((face)->available_sizes[i].x_ppem) -#define Y_SIZE(face,i) ((face)->available_sizes[i].y_ppem) -#else -#define X_SIZE(face,i) ((face)->available_sizes[i].width << 6) -#define Y_SIZE(face,i) ((face)->available_sizes[i].height << 6) -#endif - -/* FreeType 2.1.10 starts to provide FT_GlyphSlot_Embolden */ -#if (FREETYPE_MAJOR*10000+FREETYPE_MINOR*100+FREETYPE_PATCH) >= 20110 -#define Q_FT_GLYPHSLOT_EMBOLDEN(slot) FT_GlyphSlot_Embolden(slot) -#else -#define Q_FT_GLYPHSLOT_EMBOLDEN(slot) -#endif - #define FLOOR(x) ((x) & -64) #define CEIL(x) (((x)+63) & -64) #define TRUNC(x) ((x) >> 6) @@ -273,7 +253,8 @@ QFreetypeFace *QFreetypeFace::getFace(const QFontEngine::FaceId &face_id, } if (!FT_IS_SCALABLE(newFreetype->face) && newFreetype->face->num_fixed_sizes == 1) - FT_Set_Char_Size (face, X_SIZE(newFreetype->face, 0), Y_SIZE(newFreetype->face, 0), 0, 0); + FT_Set_Char_Size (face, newFreetype->face->available_sizes[0].x_ppem, + newFreetype->face->available_sizes[0].y_ppem, 0, 0); # if 0 FcChar8 *name; FcPatternGetString(pattern, FC_FAMILY, 0, &name); @@ -337,18 +318,18 @@ void QFreetypeFace::computeSize(const QFontDef &fontDef, int *xsize, int *ysize, if (!(face->face_flags & FT_FACE_FLAG_SCALABLE)) { int best = 0; for (int i = 1; i < face->num_fixed_sizes; i++) { - if (qAbs(*ysize - Y_SIZE(face,i)) < - qAbs (*ysize - Y_SIZE(face, best)) || - (qAbs (*ysize - Y_SIZE(face, i)) == - qAbs (*ysize - Y_SIZE(face, best)) && - qAbs (*xsize - X_SIZE(face, i)) < - qAbs (*xsize - X_SIZE(face, best)))) { + if (qAbs(*ysize - face->available_sizes[i].y_ppem) < + qAbs (*ysize - face->available_sizes[best].y_ppem) || + (qAbs (*ysize - face->available_sizes[i].y_ppem) == + qAbs (*ysize - face->available_sizes[best].y_ppem) && + qAbs (*xsize - face->available_sizes[i].x_ppem) < + qAbs (*xsize - face->available_sizes[best].x_ppem))) { best = i; } } - if (FT_Set_Char_Size (face, X_SIZE(face, best), Y_SIZE(face, best), 0, 0) == 0) { - *xsize = X_SIZE(face, best); - *ysize = Y_SIZE(face, best); + if (FT_Set_Char_Size (face, face->available_sizes[best].x_ppem, face->available_sizes[best].y_ppem, 0, 0) == 0) { + *xsize = face->available_sizes[best].x_ppem; + *ysize = face->available_sizes[best].y_ppem; } else { int err = 1; if (!(face->face_flags & FT_FACE_FLAG_SCALABLE) && ysize == 0 && face->num_fixed_sizes >= 1) { @@ -840,7 +821,7 @@ QFontEngineFT::Glyph *QFontEngineFT::loadGlyph(QGlyphSet *set, uint glyph, return 0; FT_GlyphSlot slot = face->glyph; - if (embolden) Q_FT_GLYPHSLOT_EMBOLDEN(slot); + if (embolden) FT_GlyphSlot_Embolden(slot); FT_Library library = qt_getFreetype(); info.xOff = TRUNC(ROUND(slot->advance.x));