diff --git a/ChangeLog b/ChangeLog index 4c3e158d07..f9734d0b6b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2013-04-08 Tom Hacohen + + * Evas font: Fix a bug with cluster size calculation with texts ending + with ligatures. + 2013-04-08 Carsten Haitzler (The Rasterman) * Evas: Add control API for multiple outputs (non-functional). diff --git a/NEWS b/NEWS index 2bbfecda98..de6a30842f 100644 --- a/NEWS +++ b/NEWS @@ -225,3 +225,5 @@ Fixes: * Evas font: If OS/2 table is available and the font is demi-bold, don't do runtime emboldment. * Evas font: fix font source have wrong current size. * Evas: Fix over redrawing of Evas_Map when applied on smart object. + * Evas font: Fix a bug with cluster size calculation with texts ending + with ligatures. diff --git a/src/lib/evas/common/evas_font_ot.c b/src/lib/evas/common/evas_font_ot.c index da563e0cb4..002437651e 100644 --- a/src/lib/evas/common/evas_font_ot.c +++ b/src/lib/evas/common/evas_font_ot.c @@ -166,7 +166,7 @@ evas_common_font_ot_cluster_size_get(const Evas_Text_Props *props, size_t char_i } else { - if (right_bound >= (int) (props->text_offset + props->text_len)) + if (right_bound >= (int) (props->start + props->len)) { items = props->text_offset + props->text_len - base_cluster; } diff --git a/src/tests/evas/evas_test_textblock.c b/src/tests/evas/evas_test_textblock.c index 77f32494f2..2e99cc7fb9 100644 --- a/src/tests/evas/evas_test_textblock.c +++ b/src/tests/evas/evas_test_textblock.c @@ -604,6 +604,27 @@ START_TEST(evas_textblock_cursor) fail_if(1 != evas_textblock_cursor_pos_get(cur)); } + /* Make sure coords are correct for ligatures */ + { + evas_object_textblock_text_markup_set(tb, "fi
fii"); + + for (i = 0 ; i < 2 ; i++) + { + evas_textblock_cursor_pen_geometry_get(cur, NULL, NULL, &w, NULL); + ck_assert_int_eq(w, 3); + evas_textblock_cursor_char_next(cur); + } + + evas_textblock_cursor_char_next(cur); + + for (i = 0 ; i < 3 ; i++) + { + evas_textblock_cursor_pen_geometry_get(cur, NULL, NULL, &w, NULL); + ck_assert_int_eq(w, 3); + evas_textblock_cursor_char_next(cur); + } + } + END_TB_TEST(); } END_TEST