From 81f7be7c2aa7bf6b1e512460c32dcb7eda7aa2e6 Mon Sep 17 00:00:00 2001 From: Daniel Hirt Date: Sun, 31 Jul 2016 00:48:12 +0300 Subject: Canvas text: fix range_geometry_get for RTL Fixes T3627. @fix --- src/lib/evas/canvas/evas_object_textblock.c | 23 +++++++++++------------ src/tests/evas/evas_test_textblock.c | 10 ++++++++++ 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/src/lib/evas/canvas/evas_object_textblock.c b/src/lib/evas/canvas/evas_object_textblock.c index da4840e2ca..85b529f487 100644 --- a/src/lib/evas/canvas/evas_object_textblock.c +++ b/src/lib/evas/canvas/evas_object_textblock.c @@ -11772,6 +11772,14 @@ _evas_textblock_cursor_range_in_line_geometry_get( return NULL; } +#ifdef BIDI_SUPPORT + if (ti->text_props.bidi_dir == EVAS_BIDI_DIRECTION_RTL) + { + x1 = x1 + w1; + x2 = x2 + w2; + } +#endif + /* Make x2 the one on the right */ if (x2 < x1) { @@ -11785,18 +11793,9 @@ _evas_textblock_cursor_range_in_line_geometry_get( w2 = tmp; } -#ifdef BIDI_SUPPORT - if (ti->text_props.bidi_dir == EVAS_BIDI_DIRECTION_RTL) - { - x = x1 + w1; - w = x2 + w2 - x; - } - else -#endif - { - x = x1; - w = x2 - x1; - } + x = x1; + w = x2 - x1; + if (w > 0) { tr = calloc(1, sizeof(Evas_Textblock_Rectangle)); diff --git a/src/tests/evas/evas_test_textblock.c b/src/tests/evas/evas_test_textblock.c index 70ba06bbfe..a3062c855e 100644 --- a/src/tests/evas/evas_test_textblock.c +++ b/src/tests/evas/evas_test_textblock.c @@ -2452,6 +2452,16 @@ START_TEST(evas_textblock_geometries) free(tr2); /* Same run different scripts */ + evas_object_textblock_text_markup_set(tb, "עברית"); + evas_textblock_cursor_pos_set(main_cur, 4); // last character + evas_textblock_cursor_pos_set(cur, 5); // after last character + + rects = evas_textblock_cursor_range_geometry_get(cur, main_cur); + fail_if(!rects); + EINA_LIST_FREE(rects, tr) + free(tr); + + evas_object_textblock_text_markup_set(tb, "עבריתenglishрусскийעברית"); evas_textblock_cursor_pos_set(cur, 3); -- cgit v1.2.1