From 6746b071d18d1c23460b8d1adc4cb2fd53a5697f Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Wed, 13 Jun 2012 00:54:27 +0000 Subject: [PATCH] and in my continuing foxes for bitmap font loading... correctly chose the closest of N sizes. SVN revision: 72055 --- .../src/lib/engines/common/evas_font_load.c | 43 +++++++++++-------- 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/legacy/evas/src/lib/engines/common/evas_font_load.c b/legacy/evas/src/lib/engines/common/evas_font_load.c index 4a0375121d..8e0bc15ea6 100644 --- a/legacy/evas/src/lib/engines/common/evas_font_load.c +++ b/legacy/evas/src/lib/engines/common/evas_font_load.c @@ -378,41 +378,46 @@ evas_common_font_int_load_complete(RGBA_Font_Int *fi) fi->real_size = fi->size * 64; error = FT_Set_Char_Size(fi->src->ft.face, 0, fi->real_size, font_dpi, font_dpi); if (error) - { - fi->real_size = fi->size; - error = FT_Set_Pixel_Sizes(fi->src->ft.face, 0, fi->real_size); - } + error = FT_Set_Pixel_Sizes(fi->src->ft.face, 0, fi->real_size); FTUNLOCK(); if (error) { - int i; + int i, maxd = 0x7fffffff; int chosen_size = 0; - int chosen_width = 0; + int chosen_size2 = 0; for (i = 0; i < fi->src->ft.face->num_fixed_sizes; i++) { - int s; - int d, cd; - - s = fi->src->ft.face->available_sizes[i].height; - cd = chosen_size - fi->size; + int s, cd; + + s = fi->src->ft.face->available_sizes[i].size; + cd = chosen_size - fi->real_size; if (cd < 0) cd = -cd; - d = s - fi->size; - if (d < 0) d = -d; - if (d < cd) - { - chosen_width = fi->src->ft.face->available_sizes[i].width; + if (cd < maxd) + { + maxd = cd; chosen_size = s; + chosen_size2 = fi->src->ft.face->available_sizes[i].y_ppem; + if (maxd == 0) break; } - if (d == 0) break; } fi->real_size = chosen_size; FTLOCK(); - error = FT_Set_Pixel_Sizes(fi->src->ft.face, chosen_width, fi->real_size); + error = FT_Set_Pixel_Sizes(fi->src->ft.face, 0, fi->real_size); FTUNLOCK(); if (error) { - /* couldn't choose the size anyway... what now? */ + error = FT_Set_Char_Size(fi->src->ft.face, 0, fi->real_size, font_dpi, font_dpi); + if (error) + { + /* hack around broken fonts */ + fi->real_size = (chosen_size2 / 64) * 60; + error = FT_Set_Char_Size(fi->src->ft.face, 0, fi->real_size, font_dpi, font_dpi); + if (error) + { + /* couldn't choose the size anyway... what now? */ + } + } } } fi->src->current_size = 0;