Evas font-engine: Use advance instead of width with whitespace size calc
authorTom Hacohen <tom@stosb.com>
Tue, 29 Mar 2011 13:52:30 +0000 (13:52 +0000)
committerTom Hacohen <tom@stosb.com>
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.

SVN revision: 58182

legacy/evas/src/lib/engines/common/evas_font_query.c

index 026afcebe032eae7262bdbd985f4d26c6c830b66..f666e9623cbde90f3cb7dc40c58fce2e30b846ee 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);
 }