raster pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=982ef0b9d0a5ffb8dc84824ec8a44cfc9b69886c
commit 982ef0b9d0a5ffb8dc84824ec8a44cfc9b69886c Author: Youngbok Shin <youngb.s...@samsung.com> Date: Tue Jul 12 10:20:03 2016 +0900 Edje calc: Fix Evas Text width calculation with ellipsis Summary: To keep consistency with Evas Textblock part in edje, text.min has to work logically even if ellipsis is enabled. If a Text part has minimum width, maximum width and "text.min: 1 X;", Text part should be expanded until its width reaches to the maximum width. Then, ellipsis will work. Singleline Textblock is also working like this. @fix Reviewers: cedric, herdsman, raster, tasn Subscribers: Blackmole, z-wony, jpeg Differential Revision: https://phab.enlightenment.org/D3587 --- src/bin/edje/edje_cc_handlers.c | 27 --------------------------- src/lib/edje/edje_calc.c | 10 ++++++++-- src/lib/edje/edje_text.c | 29 ++++++----------------------- 3 files changed, 14 insertions(+), 52 deletions(-) diff --git a/src/bin/edje/edje_cc_handlers.c b/src/bin/edje/edje_cc_handlers.c index 88da2ee..7a1b653 100644 --- a/src/bin/edje/edje_cc_handlers.c +++ b/src/bin/edje/edje_cc_handlers.c @@ -15057,19 +15057,6 @@ edje_cc_handlers_hierarchy_free(void) part_hierarchy = NULL; } -static Eina_Bool -_part_text_ellipsis_check(Edje_Part *ep, Edje_Part_Description_Common *desc) -{ - Edje_Part_Description_Text *ed; - - if ((ep->type != EDJE_PART_TYPE_TEXT) && (ep->type != EDJE_PART_TYPE_TEXTBLOCK)) - return EINA_FALSE; - - ed = (Edje_Part_Description_Text*)desc; - - return ((ed->text.ellipsis != -1) && ed->text.min_x); -} - static void edje_cc_handlers_hierarchy_pop(void) { /* Remove part from hierarchy stack when finished parsing it */ @@ -15093,25 +15080,11 @@ edje_cc_handlers_hierarchy_pop(void) file_in, line - 1, current_de->entry, current_part->name); exit(-1); } - if (_part_text_ellipsis_check(current_part, current_part->other.desc[i])) - { - WRN("Part '%s' in group '%s' contains description '%s:%g' which has text.min: 1 X; but not text.ellipsis: -1;", - current_part->name, current_de->entry, - current_part->other.desc[i]->state.name, current_part->other.desc[i]->state.value); - WRN("This is almost certainly not what you want."); - } } /* auto-add default desc if it was omitted */ if (!current_part->default_desc) ob_collections_group_parts_part_description(); - else if (_part_text_ellipsis_check(current_part, current_part->default_desc)) - { - WRN("Part '%s' in group '%s' contains description '%s:%g' which has text.min: 1 X; but not text.ellipsis: -1;", - current_part->name, current_de->entry, - current_part->default_desc->state.name, current_part->default_desc->state.value); - WRN("This is almost certainly not what you want."); - } } if (info) diff --git a/src/lib/edje/edje_calc.c b/src/lib/edje/edje_calc.c index b38b03a..04abc0e 100644 --- a/src/lib/edje/edje_calc.c +++ b/src/lib/edje/edje_calc.c @@ -1700,20 +1700,26 @@ _edje_part_recalc_single_text(FLOAT_T sc EINA_UNUSED, if (chosen_desc->text.max_x) { - if ((*maxw < 0) || (mw < *maxw)) *maxw = mw; + if ((*maxw < 0) || (mw > *maxw)) *maxw = mw; } if (chosen_desc->text.max_y) { - if ((*maxh < 0) || (mh < *maxh)) *maxh = mh; + if ((*maxh < 0) || (mh > *maxh)) *maxh = mh; } if (chosen_desc->text.min_x) { if (mw > *minw) *minw = mw; + if ((*maxw > -1) && (*minw > *maxw)) *minw = *maxw; } if (chosen_desc->text.min_y) { if (mh > *minh) *minh = mh; + if ((*maxh > -1) && (*minh > *maxh)) *minh = *maxh; } + if ((*maxw > -1) && (mw > *maxw)) mw = *maxw; + if ((*maxh > -1) && (mh > *maxh)) mh = *maxh; + + evas_object_resize(ep->object, mw, mh); } #else diff --git a/src/lib/edje/edje_text.c b/src/lib/edje/edje_text.c index 50f8e90..d65f0a9 100644 --- a/src/lib/edje/edje_text.c +++ b/src/lib/edje/edje_text.c @@ -135,7 +135,7 @@ _edje_text_fit_x(Edje *ed, Edje_Real_Part *ep, if (ep->part->scale) evas_object_scale_set(ep->object, TO_DOUBLE(sc)); - evas_obj_text_ellipsis_set(ep->object, (chosen_desc->text.min_x || chosen_desc->text.fit_x) ? -1 : params->type.text.ellipsis); + evas_obj_text_ellipsis_set(ep->object, params->type.text.ellipsis); efl_text_properties_font_set(ep->object, font, size); efl_text_set(ep->object, text); efl_gfx_size_set(ep->object, sw, sh); @@ -462,28 +462,11 @@ _edje_text_recalc_apply(Edje *ed, Edje_Real_Part *ep, text, font, size, sw, sh, &free_text); } - /* when evas ellipsis support was added in efl 1.8 and used to replace - * previous support, SOMEONE, who I shall call "cedric", borked ellipsis - * defaults. as a result, edje_cc continued using 0.0 (left-most) as its default value - * for ellipsis while evas used -1.0 (no ellipsizing). - * this was moderately okay for a time because nobody was using it or GROUP parts - * with text in them very frequently, and so nobody noticed that the mismatch was breaking - * sizing in some cases when the edje ellipsis value failed to be applied, - * which occurred any time text.min_x was set; in this case, ellipsis would NEVER be - * correctly applied, and instead the text object would only ever get the first - * ellipsis_set(0), permanently breaking the part. - * the only way to fix this while preserving previous behavior was to bump - * the edje file minor version and then check it here to ignore "unset" ellipsis - * values from old file versions. - * the downside is that this will break old files which have text.min_x set to 0...maybe. - * - * -zmike - * 22 April 2014 - */ - else if (((ed->file->version >= 3) && (ed->file->minor >= 6)) || - params->type.text.ellipsis) - evas_object_text_ellipsis_set(ep->object, - chosen_desc->text.min_x ? -1 : params->type.text.ellipsis); + else if ((ed->file->version >= 3) && (ed->file->minor >= 6)) + { + evas_object_text_ellipsis_set(ep->object, + params->type.text.ellipsis); + } eina_stringshare_replace(&ep->typedata.text->cache.out_str, text); ep->typedata.text->cache.in_w = sw; --