require Freetype version 2.1.10+

Signed-off-by: Ivailo Monev <xakepa10@laimg.moc>
This commit is contained in:
Ivailo Monev 2019-12-17 02:34:10 +00:00
parent 33bf38c255
commit 21b2fd740d
2 changed files with 14 additions and 32 deletions

View file

@ -283,7 +283,8 @@ set_package_properties(X11 PROPERTIES
TYPE REQUIRED TYPE REQUIRED
) )
find_package(Freetype) # v2.1.10+ required for FT_GlyphSlot_Embolden()
find_package(Freetype 2.1.10)
set_package_properties(Freetype PROPERTIES set_package_properties(Freetype PROPERTIES
PURPOSE "Required for fonts configuration support" PURPOSE "Required for fonts configuration support"
DESCRIPTION "Freely available software library to render fonts" DESCRIPTION "Freely available software library to render fonts"

View file

@ -79,26 +79,6 @@
QT_BEGIN_NAMESPACE 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 FLOOR(x) ((x) & -64)
#define CEIL(x) (((x)+63) & -64) #define CEIL(x) (((x)+63) & -64)
#define TRUNC(x) ((x) >> 6) #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) 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 # if 0
FcChar8 *name; FcChar8 *name;
FcPatternGetString(pattern, FC_FAMILY, 0, &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)) { if (!(face->face_flags & FT_FACE_FLAG_SCALABLE)) {
int best = 0; int best = 0;
for (int i = 1; i < face->num_fixed_sizes; i++) { for (int i = 1; i < face->num_fixed_sizes; i++) {
if (qAbs(*ysize - Y_SIZE(face,i)) < if (qAbs(*ysize - face->available_sizes[i].y_ppem) <
qAbs (*ysize - Y_SIZE(face, best)) || qAbs (*ysize - face->available_sizes[best].y_ppem) ||
(qAbs (*ysize - Y_SIZE(face, i)) == (qAbs (*ysize - face->available_sizes[i].y_ppem) ==
qAbs (*ysize - Y_SIZE(face, best)) && qAbs (*ysize - face->available_sizes[best].y_ppem) &&
qAbs (*xsize - X_SIZE(face, i)) < qAbs (*xsize - face->available_sizes[i].x_ppem) <
qAbs (*xsize - X_SIZE(face, best)))) { qAbs (*xsize - face->available_sizes[best].x_ppem))) {
best = i; best = i;
} }
} }
if (FT_Set_Char_Size (face, X_SIZE(face, best), Y_SIZE(face, best), 0, 0) == 0) { if (FT_Set_Char_Size (face, face->available_sizes[best].x_ppem, face->available_sizes[best].y_ppem, 0, 0) == 0) {
*xsize = X_SIZE(face, best); *xsize = face->available_sizes[best].x_ppem;
*ysize = Y_SIZE(face, best); *ysize = face->available_sizes[best].y_ppem;
} else { } else {
int err = 1; int err = 1;
if (!(face->face_flags & FT_FACE_FLAG_SCALABLE) && ysize == 0 && face->num_fixed_sizes >= 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; return 0;
FT_GlyphSlot slot = face->glyph; FT_GlyphSlot slot = face->glyph;
if (embolden) Q_FT_GLYPHSLOT_EMBOLDEN(slot); if (embolden) FT_GlyphSlot_Embolden(slot);
FT_Library library = qt_getFreetype(); FT_Library library = qt_getFreetype();
info.xOff = TRUNC(ROUND(slot->advance.x)); info.xOff = TRUNC(ROUND(slot->advance.x));