hermet pushed a commit to branch elementary-1.11. http://git.enlightenment.org/core/elementary.git/commit/?id=4743f872cb449078e664bbf61bb13a9374ba1613
commit 4743f872cb449078e664bbf61bb13a9374ba1613 Author: Thiep Ha <thie...@gmail.com> Date: Mon Sep 1 23:05:30 2014 +0900 label: Fix size calculation for wrapped label Summary: Label size is incorrectly calculated (text does not wrap) if elm_label_line_wrap_set() is called before elm_label_wrap_width_set(). @fix Test Plan: The label3 test case is added to show the bug case. In label3 test case, if we switch the calling sequence of elm_label_line_wrap_set() and elm_label_wrap_width_set(), the result is different. Reviewers: raster, seoz, woohyun, Hermet Differential Revision: https://phab.enlightenment.org/D1369 --- src/bin/test.c | 2 ++ src/bin/test_label.c | 26 ++++++++++++++++++++++++++ src/lib/elm_label.c | 13 +++++++++---- 3 files changed, 37 insertions(+), 4 deletions(-) diff --git a/src/bin/test.c b/src/bin/test.c index 11045a1..fbb6cd3 100644 --- a/src/bin/test.c +++ b/src/bin/test.c @@ -174,6 +174,7 @@ void test_flip_to(void *data, Evas_Object *obj, void *event_info); void test_flip_page(void *data, Evas_Object *obj, void *event_info); void test_label(void *data, Evas_Object *obj, void *event_info); void test_label2(void *data, Evas_Object *obj, void *event_info); +void test_label3(void *data, Evas_Object *obj, void *event_info); void test_conformant(void *data, Evas_Object *obj, void *event_info); void test_conformant2(void *data, Evas_Object *obj, void *event_info); void test_conformant_indicator(void *data, Evas_Object *obj, void *event_info); @@ -762,6 +763,7 @@ add_tests: //------------------------------// ADD_TEST(NULL, "Text", "Label", test_label); ADD_TEST(NULL, "Text", "Label2", test_label2); + ADD_TEST(NULL, "Text", "Label3", test_label3); //------------------------------// ADD_TEST(NULL, "Stored Surface Buffer", "Launcher", test_launcher); diff --git a/src/bin/test_label.c b/src/bin/test_label.c index 4f25ada..5ebbc97 100644 --- a/src/bin/test_label.c +++ b/src/bin/test_label.c @@ -288,3 +288,29 @@ test_label2(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_in evas_object_resize(win, 320, 320); evas_object_show(win); } + +void +test_label3(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +{ + Evas_Object *win, *bx, *lb; + + win = elm_win_util_standard_add("label", "Label"); + elm_win_autodel_set(win, EINA_TRUE); + bx = elm_box_add(win); + + lb = elm_label_add(win); + elm_object_text_set(lb, + "This is text for our label, that is long but " + "not too long. The label is designed to have line-wrap." + ); + elm_label_line_wrap_set(lb, ELM_WRAP_CHAR); + elm_label_wrap_width_set(lb, 200); + evas_object_size_hint_weight_set(lb, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(lb, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_pack_end(bx, lb); + evas_object_show(lb); + + evas_object_show(bx); + evas_object_show(win); + elm_win_resize_object_add(win, bx); +} diff --git a/src/lib/elm_label.c b/src/lib/elm_label.c index 95da559..c206b47 100644 --- a/src/lib/elm_label.c +++ b/src/lib/elm_label.c @@ -39,13 +39,18 @@ _recalc(void *data) ELM_WIDGET_DATA_GET_OR_RETURN(data, wd); Evas_Coord minw = -1, minh = -1; - Evas_Coord resw; + Evas_Coord resw, w; evas_event_freeze(evas_object_evas_get(data)); - evas_object_geometry_get(wd->resize_obj, NULL, NULL, &resw, NULL); - if (sd->wrap_w > resw) - resw = sd->wrap_w; + edje_object_size_min_calc(wd->resize_obj, &minw, NULL); + evas_object_geometry_get(wd->resize_obj, NULL, NULL, &w, NULL); + if (sd->wrap_w > minw) + resw = sd->wrap_w; + else if ((sd->wrap_w > 0) && (minw > sd->wrap_w)) + resw = minw; + else + resw = w; edje_object_size_min_restricted_calc(wd->resize_obj, &minw, &minh, resw, 0); /* This is a hack to workaround the way min size hints are treated. --