summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarsten Haitzler (Rasterman) <raster@rasterman.com>2020-04-17 19:19:52 +0100
committerCarsten Haitzler (Rasterman) <raster@rasterman.com>2020-04-17 19:20:26 +0100
commitd9b9647a1542779503d82e54171893d3dff19d20 (patch)
tree092c2b42def04898ab8711dc598cb5d1d0206ccc
parent04567a16db062449ac5ab02dc24984c063bcde73 (diff)
Revert "evas_textblock: pick textrun fonts"
This reverts commit 9b987c67e1e38602ba2e4c9c990798e99d938bbe. this breaks color emoji in terminology (evas textgrid).
-rw-r--r--src/lib/evas/common/evas_font_query.c35
-rw-r--r--src/tests/evas/evas_test_textblock.c22
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 @@
17 * @return length of the run found. 17 * @return length of the run found.
18 */ 18 */
19EAPI int 19EAPI int
20evas_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) 20evas_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)
21{ 21{
22 RGBA_Font_Int *fi = NULL; 22 RGBA_Font_Int *fi = NULL;
23 const Eina_Unicode *run_end = text + run_len; 23 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
26 /* If there's no current script_fi, find it first */ 26 /* If there's no current script_fi, find it first */
27 if (!*script_fi) 27 if (!*script_fi)
28 { 28 {
29 fi = fn->fonts->data; 29 const Eina_Unicode *base_char = NULL;
30 /* Skip common chars */
31 for (base_char = text ;
32 (base_char < run_end) &&
33 (evas_common_language_char_script_get(*base_char) != script) ;
34 base_char++)
35 ;
36 /* If counter reach variation sequence it is safe to pick default font */
37 if(VAR_SEQ_SAFE(base_char) || (base_char != run_end && VAR_SEQ_SAFE((base_char+1)))) goto get_top_font;
38
39 if (base_char == run_end) base_char = text;
40
41 /* Find the first renderable char */
42 while (base_char < run_end)
43 {
44 /* 0x1F is the last ASCII contral char, just a hack in
45 * the meanwhile. */
46 if ((*base_char > 0x1F) &&
47 evas_common_font_glyph_search(fn, &fi, *base_char, 0, EVAS_FONT_SEARCH_OPTION_NONE))
48 break;
49 base_char++;
50 }
51
52
53 /* If everything else fails, at least try to find a font for the
54 * replacement char */
55 if (base_char == run_end)
56 evas_common_font_glyph_search(fn, &fi, REPLACEMENT_CHAR, 0, EVAS_FONT_SEARCH_OPTION_NONE);
57get_top_font:
58
59 if (!fi)
60 fi = fn->fonts->data;
30 61
31 *script_fi = fi; 62 *script_fi = fi;
32 } 63 }
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)
4184} 4184}
4185EFL_END_TEST; 4185EFL_END_TEST;
4186 4186
4187EFL_START_TEST(evas_textblock_textrun_font)
4188{
4189 START_TB_TEST();
4190 int w1, h1, w2, h2;
4191
4192 evas_object_resize(tb, 300, 300);
4193 evas_object_textblock_text_markup_set(tb, "가123A321");
4194 evas_object_textblock_size_native_get(tb, &w1, &h1);
4195 evas_object_textblock_text_markup_set(tb, "A321가123");
4196 evas_object_textblock_size_native_get(tb, &w2, &h2);
4197 ck_assert(w1==w2 && h1==h2);
4198 evas_object_textblock_text_markup_set(tb, "123가A321");
4199 evas_object_textblock_size_native_get(tb, &w2, &h2);
4200 ck_assert(w1==w2 && h1==h2);
4201 evas_object_textblock_text_markup_set(tb, "A가123321");
4202 evas_object_textblock_size_native_get(tb, &w2, &h2);
4203 ck_assert(w1==w2 && h1==h2);
4204 END_TB_TEST();
4205}
4206EFL_END_TEST;
4207
4208#ifdef HAVE_HYPHEN 4187#ifdef HAVE_HYPHEN
4209static void 4188static void
4210_hyphenation_width_stress(Evas_Object *tb, Evas_Textblock_Cursor *cur) 4189_hyphenation_width_stress(Evas_Object *tb, Evas_Textblock_Cursor *cur)
@@ -5076,7 +5055,6 @@ void evas_test_textblock(TCase *tc)
5076 tcase_add_test(tc, evas_textblock_delete); 5055 tcase_add_test(tc, evas_textblock_delete);
5077 tcase_add_test(tc, evas_textblock_obstacle); 5056 tcase_add_test(tc, evas_textblock_obstacle);
5078 tcase_add_test(tc, evas_textblock_fit); 5057 tcase_add_test(tc, evas_textblock_fit);
5079 tcase_add_test(tc, evas_textblock_textrun_font);
5080#ifdef HAVE_HYPHEN 5058#ifdef HAVE_HYPHEN
5081 tcase_add_test(tc, evas_textblock_hyphenation); 5059 tcase_add_test(tc, evas_textblock_hyphenation);
5082#endif 5060#endif