From eed4068fa2a24693514a7713b779b7a84e803b85 Mon Sep 17 00:00:00 2001 From: Ali Alzyod Date: Tue, 18 Aug 2020 19:15:12 +0900 Subject: [PATCH] evas_textblock: myanmar script rendering with e vowel. Summary: Resolve rendering e vowel (0x1031) with Myanmar(Burmese) with zero width non joiner (0x200C) Test Plan: ninja test Reviewers: woohyun, bowonryu Reviewed By: bowonryu Subscribers: cedric, #reviewers, #committers Tags: #efl Differential Revision: https://phab.enlightenment.org/D12102 --- src/lib/evas/canvas/evas_object_textblock.c | 21 ++++++++++++++++++++ src/tests/elementary/elm_test_entry.c | 22 +++++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/src/lib/evas/canvas/evas_object_textblock.c b/src/lib/evas/canvas/evas_object_textblock.c index 7a4a37134c..d50592cc5d 100644 --- a/src/lib/evas/canvas/evas_object_textblock.c +++ b/src/lib/evas/canvas/evas_object_textblock.c @@ -5436,6 +5436,27 @@ skip: script = evas_common_language_script_type_get(str, script_len); + /* FIXME Workaround for Burmese Vowel E Rendering, caused by bug in Harfbuzz + breaking text run will fix the visual issue. + */ + if (script == EVAS_SCRIPT_MYANMAR && script_len > 1) + { + int i; + for (i = 0 ; i < script_len - 1; i++) + { + if (str[i] == 0x200C) + { + if (str[i+1] == 0x1031) + { + cur_len += script_len; + script_len = i + 1; + cur_len -= script_len; + break; + } + } + } + } + Evas_Object_Protected_Data *obj = efl_data_scope_get(c->obj, EFL_CANVAS_OBJECT_CLASS); while (script_len > 0) { diff --git a/src/tests/elementary/elm_test_entry.c b/src/tests/elementary/elm_test_entry.c index f3e5c1225c..5df40b19ec 100644 --- a/src/tests/elementary/elm_test_entry.c +++ b/src/tests/elementary/elm_test_entry.c @@ -610,6 +610,27 @@ EFL_START_TEST(elm_entry_test_text_class) } EFL_END_TEST +EFL_START_TEST(elm_entry_test_burmese) +{ + Evas_Object *win, *textblock; + Evas_Textblock_Style *style; + int w; + + win = win_add(NULL, "entry", ELM_WIN_BASIC); + textblock = evas_object_textblock_add(win); + + style = evas_textblock_style_new(); + evas_textblock_style_set(style, "DEFAULT='font=arial font_size=20 color=red'"); + evas_object_textblock_style_set(textblock, style); + evas_textblock_style_free(style); + style = NULL; + + evas_object_textblock_text_markup_set(textblock, "\u1006\u200C\u1031\u200C\u1031\u200C\u1031"); + evas_object_textblock_size_native_get(textblock, &w, NULL); + ck_assert_int_ne(w, 0); +} +EFL_END_TEST + EFL_START_TEST(elm_entry_keycode) { Evas_Object *win, *entry; @@ -651,5 +672,6 @@ void elm_test_entry(TCase *tc) tcase_add_test(tc, elm_entry_magnifier); tcase_add_test(tc, elm_entry_file_get_set); tcase_add_test(tc, elm_entry_test_text_class); + tcase_add_test(tc, elm_entry_test_burmese); tcase_add_test(tc, elm_entry_keycode); }