From 9473c4a9a5b9e056e516b660895cb83c64a1c77f Mon Sep 17 00:00:00 2001 From: "Carsten Haitzler (Rasterman)" Date: Fri, 31 May 2013 19:07:50 +0900 Subject: [PATCH] continuation of ascent/descent fix by tom - make textblock work too. --- src/lib/evas/common/evas_font_main.c | 48 +++++++++++++++++++++++++--- 1 file changed, 44 insertions(+), 4 deletions(-) diff --git a/src/lib/evas/common/evas_font_main.c b/src/lib/evas/common/evas_font_main.c index 43d467c0b9..1048ad10d1 100644 --- a/src/lib/evas/common/evas_font_main.c +++ b/src/lib/evas/common/evas_font_main.c @@ -84,6 +84,7 @@ evas_common_font_instance_ascent_get(RGBA_Font_Int *fi) FTUNLOCK(); fi->src->current_size = fi->size; } + if (!fi->src->ft.face) return 0; if (!FT_IS_SCALABLE(fi->src->ft.face)) { WRN("NOT SCALABLE!"); @@ -110,6 +111,7 @@ evas_common_font_instance_descent_get(RGBA_Font_Int *fi) FTUNLOCK(); fi->src->current_size = fi->size; } + if (!fi->src->ft.face) return 0; val = -(int)fi->src->ft.face->size->metrics.descender; return FONT_METRIC_ROUNDUP(val); // if (fi->src->ft.face->units_per_EM == 0) @@ -133,6 +135,7 @@ evas_common_font_instance_max_ascent_get(RGBA_Font_Int *fi) FTUNLOCK(); fi->src->current_size = fi->size; } + if (!fi->src->ft.face) return 0; if ((fi->src->ft.face->bbox.yMax == 0) && (fi->src->ft.face->bbox.yMin == 0) && (fi->src->ft.face->units_per_EM == 0)) @@ -160,6 +163,7 @@ evas_common_font_instance_max_descent_get(RGBA_Font_Int *fi) FTUNLOCK(); fi->src->current_size = fi->size; } + if (!fi->src->ft.face) return 0; if ((fi->src->ft.face->bbox.yMax == 0) && (fi->src->ft.face->bbox.yMin == 0) && (fi->src->ft.face->units_per_EM == 0)) @@ -177,28 +181,64 @@ EAPI int evas_common_font_ascent_get(RGBA_Font *fn) { // evas_common_font_size_use(fn); - return evas_common_font_instance_ascent_get(fn->fonts->data); + int max = 0, v; + Eina_List *l; + RGBA_Font_Int *fi; + + EINA_LIST_FOREACH(fn->fonts, l, fi) + { + v = evas_common_font_instance_ascent_get(fi); + if (v > max) max = v; + } + return max; } EAPI int evas_common_font_descent_get(RGBA_Font *fn) { // evas_common_font_size_use(fn); - return evas_common_font_instance_descent_get(fn->fonts->data); + int max = 0, v; + Eina_List *l; + RGBA_Font_Int *fi; + + EINA_LIST_FOREACH(fn->fonts, l, fi) + { + v = evas_common_font_instance_descent_get(fi); + if (v > max) max = v; + } + return max; } EAPI int evas_common_font_max_ascent_get(RGBA_Font *fn) { // evas_common_font_size_use(fn); - return evas_common_font_instance_max_ascent_get(fn->fonts->data); + int max = 0, v; + Eina_List *l; + RGBA_Font_Int *fi; + + EINA_LIST_FOREACH(fn->fonts, l, fi) + { + v = evas_common_font_instance_max_ascent_get(fi); + if (v > max) max = v; + } + return max; } EAPI int evas_common_font_max_descent_get(RGBA_Font *fn) { // evas_common_font_size_use(fn); - return evas_common_font_instance_max_descent_get(fn->fonts->data); + int max = 0, v; + Eina_List *l; + RGBA_Font_Int *fi; + + EINA_LIST_FOREACH(fn->fonts, l, fi) + { + v = evas_common_font_instance_max_descent_get(fi); + if (v > max) max = v; + } + return max; } EAPI int