Edje text: Fixed a bug with fit_x and cleaned everything up.
authortasn <tasn@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Sun, 27 Feb 2011 18:09:00 +0000 (18:09 +0000)
committertasn <tasn@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Sun, 27 Feb 2011 18:09:00 +0000 (18:09 +0000)
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

src/lib/edje_text.c

index 425f047..655288f 100644 (file)
@@ -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))
      {