From e9a40835f21cfd4a46da388158aca6b0cda650a7 Mon Sep 17 00:00:00 2001 From: Thiep Ha Date: Wed, 26 Nov 2014 10:18:49 +0200 Subject: [PATCH] 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 9ae9f09..9b9a9ee 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, "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, "עוד פסקה"); + 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 -- 2.7.4