From dee98ea248b2eac7f6ff49afbeb8853e959d92fe Mon Sep 17 00:00:00 2001 From: Thiep Ha Date: Thu, 2 Oct 2014 08:36:35 +0100 Subject: [PATCH] evas textblock: return text direction for under cursor in cursor geometry get Summary: Currently, in cursor geometry get function, the text direction is not returned if cursor is under cursor. This patch fixs it by returning text direction for under cursor. @fix Reviewers: tasn Subscribers: herdsman, cedric Differential Revision: https://phab.enlightenment.org/D1505 --- src/lib/evas/canvas/evas_object_textblock.c | 13 +++++++++++- src/tests/evas/evas_test_textblock.c | 23 +++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/src/lib/evas/canvas/evas_object_textblock.c b/src/lib/evas/canvas/evas_object_textblock.c index 925b31741c..2534f20fa4 100644 --- a/src/lib/evas/canvas/evas_object_textblock.c +++ b/src/lib/evas/canvas/evas_object_textblock.c @@ -9596,7 +9596,19 @@ evas_textblock_cursor_geometry_get(const Evas_Textblock_Cursor *cur, Evas_Coord if (ctype == EVAS_TEXTBLOCK_CURSOR_UNDER) { + Evas_Object_Textblock_Line *ln; + Evas_Object_Textblock_Item *it; + ret = evas_textblock_cursor_pen_geometry_get(cur, cx, cy, cw, ch); + _find_layout_item_match(cur, &ln, &it); + if (ret >= 0) + { + Evas_BiDi_Direction itdir = + (it->type == EVAS_TEXTBLOCK_ITEM_TEXT) ? + _ITEM_TEXT(it)->text_props.bidi_dir : + _ITEM_FORMAT(it)->bidi_dir; + if (dir) *dir = itdir; + } } else if (ctype == EVAS_TEXTBLOCK_CURSOR_BEFORE) { @@ -9604,7 +9616,6 @@ evas_textblock_cursor_geometry_get(const Evas_Textblock_Cursor *cur, Evas_Coord * of just after the previous char (which in bidi text may not be * just before the current char). */ Evas_Coord x, y, w, h; - Evas_Object_Textblock_Line *ln; Evas_Object_Textblock_Item *it; diff --git a/src/tests/evas/evas_test_textblock.c b/src/tests/evas/evas_test_textblock.c index 98174f59ae..928bbd303f 100644 --- a/src/tests/evas/evas_test_textblock.c +++ b/src/tests/evas/evas_test_textblock.c @@ -99,6 +99,7 @@ START_TEST(evas_textblock_cursor) Evas_Coord x, y, w, h; size_t i, len; Evas_Coord nw, nh; + Evas_BiDi_Direction dir; const char *buf = "This is a
test.Lets see if this works.עוד פסקה."; /* Walk the textblock using cursor_char_next */ @@ -420,6 +421,28 @@ START_TEST(evas_textblock_cursor) fail_if(evas_textblock_cursor_compare(main_cur, cur)); } + /* Check direction */ + evas_object_textblock_text_markup_set(tb, "test"); + fail_if(strcmp(evas_object_textblock_text_markup_get(tb), "test")); + dir = EVAS_BIDI_DIRECTION_RTL; + evas_textblock_cursor_geometry_get(cur, NULL, NULL, NULL, NULL, &dir, + EVAS_TEXTBLOCK_CURSOR_UNDER); + fail_if(dir != EVAS_BIDI_DIRECTION_LTR); + dir = EVAS_BIDI_DIRECTION_RTL; + evas_textblock_cursor_geometry_get(cur, NULL, NULL, NULL, NULL, &dir, + EVAS_TEXTBLOCK_CURSOR_BEFORE); + fail_if(dir != EVAS_BIDI_DIRECTION_LTR); + evas_object_textblock_text_markup_set(tb, "עוד פסקה"); + fail_if(strcmp(evas_object_textblock_text_markup_get(tb), "עוד פסקה")); + dir = EVAS_BIDI_DIRECTION_LTR; + evas_textblock_cursor_geometry_get(cur, NULL, NULL, NULL, NULL, &dir, + EVAS_TEXTBLOCK_CURSOR_UNDER); + fail_if(dir != EVAS_BIDI_DIRECTION_RTL); + dir = EVAS_BIDI_DIRECTION_LTR; + evas_textblock_cursor_geometry_get(cur, NULL, NULL, NULL, NULL, &dir, + EVAS_TEXTBLOCK_CURSOR_BEFORE); + fail_if(dir != EVAS_BIDI_DIRECTION_RTL); + #ifdef HAVE_FRIBIDI evas_object_textblock_text_markup_set(tb, "testנסיוןtestנסיון"