FreeType: Fix font rendering with fonts with embedded bitmaps

Only reproduced with Windows font Calibri. This font has both
outline (vector) and bitmap glyphs. QFontEngine_FT has an hack
to get metrics from EBLC table, but this might fail, resulting
in a 0 ascender and descender, meaning QFontMetrics::height()
will be 0, meaning totally broken text.

This patch checks for that failure, and fallbacks to the outline
metrics instead of the bitmap ones.

Task-number: QTBUG-42898
Change-Id: If33fc3404d0c7f84557f8c4a5ae71b30f78d60a7
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@theqtcompany.com>
bb10
Sérgio Martins 2014-11-26 10:12:55 +00:00 committed by Konstantin Ritt
parent 33739ccb95
commit 1edc7554de
1 changed files with 4 additions and 2 deletions

View File

@ -762,8 +762,10 @@ bool QFontEngineFT::init(FaceId faceId, bool antialias, GlyphFormat format,
face->face_flags &= ~FT_FACE_FLAG_SCALABLE;
FT_Select_Size(face, i);
metrics.ascender = face->size->metrics.ascender;
metrics.descender = face->size->metrics.descender;
if (face->size->metrics.ascender + face->size->metrics.descender > 0) {
metrics.ascender = face->size->metrics.ascender;
metrics.descender = face->size->metrics.descender;
}
FT_Set_Char_Size(face, xsize, ysize, 0, 0);
face->face_flags |= FT_FACE_FLAG_SCALABLE;