From: tasn Date: Sun, 27 Feb 2011 18:09:00 +0000 (+0000) Subject: Edje text: Fixed a bug with fit_x and cleaned everything up. X-Git-Tag: submit/trunk/20120815.180907~711 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d611b41803586a5006fdbaed1f2db54eada83d69;p=profile%2Fivi%2Fedje.git Edje text: Fixed a bug with fit_x and cleaned everything up. There was a bug that cause bad sizing (by 1pt) when fit was set, this is now fixed. Furthermore, for some reason we had a loop although we already jumped to the last value right at the start. That didn't make any sense, so I removed that as well. git-svn-id: http://svn.enlightenment.org/svn/e/trunk/edje@57394 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33 --- diff --git a/src/lib/edje_text.c b/src/lib/edje_text.c index 425f047..655288f 100644 --- a/src/lib/edje_text.c +++ b/src/lib/edje_text.c @@ -428,39 +428,32 @@ _edje_text_recalc_apply(Edje *ed, Edje_Real_Part *ep, evas_object_text_font_set(ep->object, font, size); evas_object_text_text_set(ep->object, text); part_get_geometry(ep, &tw, &th); - if (tw > sw) - { - while ((tw > sw) && (size > 0) && (tw != 0)) - { - int psize = size; - size = (size * sw) / tw; - if ((psize - size) <= 0) size = psize - 1; - if (inlined_font) evas_object_text_font_source_set(ep->object, ed->path); - else evas_object_text_font_source_set(ep->object, NULL); + /* Find the wanted font size */ + if ((tw > sw) && (size > 0) && (tw != 0)) + { + size = (size * sw) / tw; - if (ep->part->scale) evas_object_scale_set(ep->object, TO_DOUBLE(sc)); - evas_object_text_font_set(ep->object, font, size); - part_get_geometry(ep, &tw, &th); - if ((size > 0) && (tw == 0)) break; - } - } - else if (tw < sw) - { - while ((tw < sw) && (size > 0) && (tw != 0)) - { - int psize = size; - size = (size * sw) / tw; - /* fprintf(stderr, "size = %i (%i, %i)\n", size, sw, tw); */ - if ((psize - size) >= 0) size = psize + 1; - if (inlined_font) evas_object_text_font_source_set(ep->object, ed->path); - else evas_object_text_font_source_set(ep->object, NULL); + if (inlined_font) evas_object_text_font_source_set(ep->object, ed->path); + else evas_object_text_font_source_set(ep->object, NULL); - if (ep->part->scale) evas_object_scale_set(ep->object, TO_DOUBLE(sc)); - evas_object_text_font_set(ep->object, font, size); - part_get_geometry(ep, &tw, &th); - if ((size > 0) && (tw == 0)) break; - } + if (ep->part->scale) evas_object_scale_set(ep->object, TO_DOUBLE(sc)); + evas_object_text_font_set(ep->object, font, size); + part_get_geometry(ep, &tw, &th); } + else if ((tw < sw) && (size > 0) && (tw != 0)) + { + size = (size * sw) / tw; + + if (inlined_font) evas_object_text_font_source_set(ep->object, ed->path); + else evas_object_text_font_source_set(ep->object, NULL); + + if (ep->part->scale) evas_object_scale_set(ep->object, TO_DOUBLE(sc)); + evas_object_text_font_set(ep->object, font, size); + part_get_geometry(ep, &tw, &th); + } + /* FIXME: This should possibly be replaced by more proper handling, + * but it's still way better than what was here before. */ + if (tw > sw) size--; } if (chosen_desc->text.fit_y && (ep->text.cache.in_str && eina_stringshare_strlen(ep->text.cache.in_str) > 0)) {