From d9b9647a1542779503d82e54171893d3dff19d20 Mon Sep 17 00:00:00 2001 From: "Carsten Haitzler (Rasterman)" Date: Fri, 17 Apr 2020 19:19:52 +0100 Subject: [PATCH] Revert "evas_textblock: pick textrun fonts" This reverts commit 9b987c67e1e38602ba2e4c9c990798e99d938bbe. this breaks color emoji in terminology (evas textgrid). --- src/lib/evas/common/evas_font_query.c | 35 +++++++++++++++++++++++++-- src/tests/evas/evas_test_textblock.c | 22 ----------------- 2 files changed, 33 insertions(+), 24 deletions(-) diff --git a/src/lib/evas/common/evas_font_query.c b/src/lib/evas/common/evas_font_query.c index a25c19c81e..ec480fd8e1 100644 --- a/src/lib/evas/common/evas_font_query.c +++ b/src/lib/evas/common/evas_font_query.c @@ -17,7 +17,7 @@ * @return length of the run found. */ EAPI int -evas_common_font_query_run_font_end_get(RGBA_Font *fn, RGBA_Font_Int **script_fi, RGBA_Font_Int **cur_fi, Evas_Script_Type script EINA_UNUSED, const Eina_Unicode *text, int run_len) +evas_common_font_query_run_font_end_get(RGBA_Font *fn, RGBA_Font_Int **script_fi, RGBA_Font_Int **cur_fi, Evas_Script_Type script, const Eina_Unicode *text, int run_len) { RGBA_Font_Int *fi = NULL; const Eina_Unicode *run_end = text + run_len; @@ -26,7 +26,38 @@ evas_common_font_query_run_font_end_get(RGBA_Font *fn, RGBA_Font_Int **script_fi /* If there's no current script_fi, find it first */ if (!*script_fi) { - fi = fn->fonts->data; + const Eina_Unicode *base_char = NULL; + /* Skip common chars */ + for (base_char = text ; + (base_char < run_end) && + (evas_common_language_char_script_get(*base_char) != script) ; + base_char++) + ; + /* If counter reach variation sequence it is safe to pick default font */ + if(VAR_SEQ_SAFE(base_char) || (base_char != run_end && VAR_SEQ_SAFE((base_char+1)))) goto get_top_font; + + if (base_char == run_end) base_char = text; + + /* Find the first renderable char */ + while (base_char < run_end) + { + /* 0x1F is the last ASCII contral char, just a hack in + * the meanwhile. */ + if ((*base_char > 0x1F) && + evas_common_font_glyph_search(fn, &fi, *base_char, 0, EVAS_FONT_SEARCH_OPTION_NONE)) + break; + base_char++; + } + + + /* If everything else fails, at least try to find a font for the + * replacement char */ + if (base_char == run_end) + evas_common_font_glyph_search(fn, &fi, REPLACEMENT_CHAR, 0, EVAS_FONT_SEARCH_OPTION_NONE); +get_top_font: + + if (!fi) + fi = fn->fonts->data; *script_fi = fi; } diff --git a/src/tests/evas/evas_test_textblock.c b/src/tests/evas/evas_test_textblock.c index d26b8fc7b9..acf21186c7 100644 --- a/src/tests/evas/evas_test_textblock.c +++ b/src/tests/evas/evas_test_textblock.c @@ -4184,27 +4184,6 @@ EFL_START_TEST(evas_textblock_fit) } EFL_END_TEST; -EFL_START_TEST(evas_textblock_textrun_font) -{ - START_TB_TEST(); - int w1, h1, w2, h2; - - evas_object_resize(tb, 300, 300); - evas_object_textblock_text_markup_set(tb, "가123A321"); - evas_object_textblock_size_native_get(tb, &w1, &h1); - evas_object_textblock_text_markup_set(tb, "A321가123"); - evas_object_textblock_size_native_get(tb, &w2, &h2); - ck_assert(w1==w2 && h1==h2); - evas_object_textblock_text_markup_set(tb, "123가A321"); - evas_object_textblock_size_native_get(tb, &w2, &h2); - ck_assert(w1==w2 && h1==h2); - evas_object_textblock_text_markup_set(tb, "A가123321"); - evas_object_textblock_size_native_get(tb, &w2, &h2); - ck_assert(w1==w2 && h1==h2); - END_TB_TEST(); -} -EFL_END_TEST; - #ifdef HAVE_HYPHEN static void _hyphenation_width_stress(Evas_Object *tb, Evas_Textblock_Cursor *cur) @@ -5076,7 +5055,6 @@ void evas_test_textblock(TCase *tc) tcase_add_test(tc, evas_textblock_delete); tcase_add_test(tc, evas_textblock_obstacle); tcase_add_test(tc, evas_textblock_fit); - tcase_add_test(tc, evas_textblock_textrun_font); #ifdef HAVE_HYPHEN tcase_add_test(tc, evas_textblock_hyphenation); #endif