From 447b807e0068f85fa2efadde6d67f0266cae0462 Mon Sep 17 00:00:00 2001 From: tasn Date: Sun, 30 Jan 2011 10:39:42 +0000 Subject: [PATCH] Evas font: skip over common script items when getting the font, we should get the font of the actual script items. git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/evas@56484 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33 --- src/lib/engines/common/evas_font_ot.c | 12 +++++++++++- src/lib/engines/common/evas_font_ot_walk.x | 29 +++++++++++++++++++++++++---- 2 files changed, 36 insertions(+), 5 deletions(-) diff --git a/src/lib/engines/common/evas_font_ot.c b/src/lib/engines/common/evas_font_ot.c index 3a77afe..e5306b6 100644 --- a/src/lib/engines/common/evas_font_ot.c +++ b/src/lib/engines/common/evas_font_ot.c @@ -162,7 +162,17 @@ evas_common_font_ot_populate_text_props(void *_fn, const Eina_Unicode *text, fi->src->current_size = fi->size; } /* Load the font needed for this script */ - evas_common_font_glyph_search(fn, &fi, *text); + { + /* Skip common chars */ + const Eina_Unicode *tmp; + for (tmp = text ; + *tmp && + evas_common_language_char_script_get(*tmp) == EVAS_SCRIPT_COMMON ; + tmp++) + ; + if (!*tmp && (tmp > text)) tmp--; + evas_common_font_glyph_search(fn, &fi, *tmp); + } if (len < 0) { diff --git a/src/lib/engines/common/evas_font_ot_walk.x b/src/lib/engines/common/evas_font_ot_walk.x index 496f830..5daec80 100644 --- a/src/lib/engines/common/evas_font_ot_walk.x +++ b/src/lib/engines/common/evas_font_ot_walk.x @@ -24,7 +24,18 @@ prev_index = 0; \ /* Load the glyph according to the first letter of the script, preety * bad, but will have to do */ \ - evas_common_font_glyph_search(fn, &fi, *text); \ + { \ + /* Skip common chars */ \ + const Eina_Unicode *tmp; \ + for (tmp = text ; \ + *tmp && \ + evas_common_language_char_script_get(*tmp) == \ + EVAS_SCRIPT_COMMON ; \ + tmp++) \ + ; \ + if (!*tmp && (tmp > text)) tmp--; \ + evas_common_font_glyph_search(fn, &fi, *tmp); \ + } \ for (char_index = 0 ; char_index < intl_props->ot_data->len ; char_index++) \ { \ FT_UInt index; \ @@ -47,9 +58,19 @@ { \ int _char_index_d, _i; \ int visible; \ - /* Load the glyph according to the first letter of the script, preety - * bad, but will have to do */ \ - evas_common_font_glyph_search(fn, &fi, *text); \ + /* Load the font needed for this script */ \ + { \ + /* Skip common chars */ \ + const Eina_Unicode *tmp; \ + for (tmp = text ; \ + *tmp && \ + evas_common_language_char_script_get(*tmp) == \ + EVAS_SCRIPT_COMMON ; \ + tmp++) \ + ; \ + if (!*tmp && (tmp > text)) tmp--; \ + evas_common_font_glyph_search(fn, &fi, *tmp); \ + } \ prev_index = 0; \ _i = intl_props->ot_data->len; \ if (intl_props->bidi.dir == EVAS_BIDI_DIRECTION_RTL) \ -- 2.7.4