herdsman pushed a commit to branch efl-1.12. http://git.enlightenment.org/core/efl.git/commit/?id=0dc58467a44333e67ffe24b5a9cacb6757c459b0
commit 0dc58467a44333e67ffe24b5a9cacb6757c459b0 Author: Thiep Ha <thiep...@samsung.com> Date: Wed Nov 26 10:18:49 2014 +0200 textblock: correct text position for RTL text with margins Summary: If a RTL textblock has right margin, text is wrongly placed (right margin is moved to left). This patch fixes this issue. Test cases are also added to test text position with margins. @fix Reviewers: tasn, herdsman Subscribers: woohyun, cedric Differential Revision: https://phab.enlightenment.org/D1691 --- src/lib/evas/canvas/evas_object_textblock.c | 4 ++-- src/tests/evas/evas_test_textblock.c | 33 +++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/src/lib/evas/canvas/evas_object_textblock.c b/src/lib/evas/canvas/evas_object_textblock.c index 2534f20..52a5954 100644 --- a/src/lib/evas/canvas/evas_object_textblock.c +++ b/src/lib/evas/canvas/evas_object_textblock.c @@ -3397,8 +3397,8 @@ loop_advance: /* c->o->style_pad.r is already included in the line width, so it's * not used in this calculation. . */ c->ln->x = c->marginl + c->o->style_pad.l + - ((c->w - c->ln->w - - c->o->style_pad.l - c->marginl) * _layout_line_align_get(c)); + ((c->w - c->ln->w - c->o->style_pad.l - + c->marginl - c->marginr) * _layout_line_align_get(c)); } else { diff --git a/src/tests/evas/evas_test_textblock.c b/src/tests/evas/evas_test_textblock.c index 928bbd3..1c071bd 100644 --- a/src/tests/evas/evas_test_textblock.c +++ b/src/tests/evas/evas_test_textblock.c @@ -1954,6 +1954,39 @@ START_TEST(evas_textblock_various) evas_textblock_cursor_pos_set(cur, 0); evas_textblock_cursor_char_delete(cur); + /* Check margins' position */ + { + Evas_Coord nw, nh, lx, lw; + + evas_object_textblock_text_markup_set(tb, "This is a test"); + evas_object_textblock_size_native_get(tb, &nw, &nh); + evas_object_resize(tb, nw, nh); + evas_object_textblock_line_number_geometry_get(tb, 0, &lx, NULL, &lw, NULL); + ck_assert_int_eq(lx, 0); + ck_assert_int_eq(lx + lw, nw); + + evas_object_textblock_text_markup_set(tb, "<left_margin=10 right_margin=5>This is a test</>"); + evas_object_textblock_size_native_get(tb, &nw, &nh); + evas_object_resize(tb, nw, nh); + evas_object_textblock_line_number_geometry_get(tb, 0, &lx, NULL, &lw, NULL); + ck_assert_int_eq(lx, 10); + ck_assert_int_eq(lx + lw + 5, nw); + + evas_object_textblock_text_markup_set(tb, "עוד פסקה"); + evas_object_textblock_size_native_get(tb, &nw, &nh); + evas_object_resize(tb, nw, nh); + evas_object_textblock_line_number_geometry_get(tb, 0, &lx, NULL, &lw, NULL); + ck_assert_int_eq(lx, 0); + ck_assert_int_eq(lx + lw, nw); + + evas_object_textblock_text_markup_set(tb, "<left_margin=10 right_margin=5>עוד פסקה</>"); + evas_object_textblock_size_native_get(tb, &nw, &nh); + evas_object_resize(tb, nw, nh); + evas_object_textblock_line_number_geometry_get(tb, 0, &lx, NULL, &lw, NULL); + ck_assert_int_eq(lx, 10); + ck_assert_int_eq(lx + lw + 5, nw); + } + /* Super big one line item. */ { #define CNT 10000 --