(svn r23038) -Fix: Check that the selected font size is valid the font face in use and choose the nearest size to that selected if not. Font metrics should then just work.

replace/41b28d7194a279bdc17475d4fbe2ea6ec885a466
peter1138 13 years ago
parent 7f90fcb5e6
commit f0ef9a09ff

@ -746,18 +746,25 @@ bool SetFallbackFont(FreeTypeSettings *settings, const char *language_isocode, i
static void SetFontGeometry(FT_Face face, FontSize size, int pixels)
{
FT_Set_Pixel_Sizes(face, 0, pixels);
if (FT_IS_SCALABLE(face)) {
int asc = face->ascender * pixels / face->units_per_EM;
int dec = face->descender * pixels / face->units_per_EM;
FT_Error err = FT_Set_Pixel_Sizes(face, 0, pixels);
if (err == FT_Err_Invalid_Pixel_Size) {
/* Find nearest size to that requested */
FT_Bitmap_Size *bs = face->available_sizes;
int i = face->num_fixed_sizes;
int n = bs->height;
for (; --i; bs++) {
if (abs(pixels - bs->height) < abs(pixels - n)) n = bs->height;
}
_ascender[size] = asc;
_font_height[size] = asc - dec;
} else {
_ascender[size] = pixels;
_font_height[size] = pixels;
FT_Set_Pixel_Sizes(face, 0, n);
}
int asc = face->size->metrics.ascender >> 6;
int dec = face->size->metrics.descender >> 6;
_ascender[size] = asc;
_font_height[size] = asc - dec;
}
/**

Loading…
Cancel
Save