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
)
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"

View file

@ -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));