Evas font-engine: Use advance instead of width with whitespace size calc
authortasn <tasn@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Tue, 29 Mar 2011 13:52:30 +0000 (13:52 +0000)
committertasn <tasn@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Tue, 29 Mar 2011 13:52:30 +0000 (13:52 +0000)
Advance is the real width of whitespace, not the width of the glyph
which is just 0.

git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/evas@58182 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/lib/engines/common/evas_font_query.c

index 026afce..f666e96 100644 (file)
@@ -74,6 +74,11 @@ evas_common_font_query_right_inset(RGBA_Font *fn __UNUSED__, const Evas_Text_Pro
    if (!text_props->len) return 0;
    gli = text_props->info->glyph + text_props->start + text_props->len - 1;
 
+   /* If the last char is a whitespace, we use the advance as the size,
+    * so the right_inset is 0. */
+   if (gli->width == 0)
+      return 0;
+
    return EVAS_FONT_ROUND_26_6_TO_INT(gli->advance) -
       (gli->width + gli->x_bear
 #ifdef OT_SUPPORT
@@ -109,7 +114,15 @@ evas_common_font_query_size(RGBA_Font *fn, const Eina_Unicode *text __UNUSED__,
      }
    EVAS_FONT_WALK_TEXT_END();
 
-   if (w) *w = prev_pen_x + keep_width;
+   /* If the last char is a whitespace, we use the advance as the size */
+   if (keep_width > 0)
+     {
+        if (w) *w = prev_pen_x + keep_width;
+     }
+   else
+     {
+        if (w) *w = EVAS_FONT_WALK_PEN_X;
+     }
    if (h) *h = evas_common_font_max_ascent_get(fn) + evas_common_font_max_descent_get(fn);
 }