[xft,ft2] Fix empty-glyph logical extents
authorBehdad Esfahbod <behdad@behdad.org>
Mon, 6 Apr 2009 23:43:17 +0000 (19:43 -0400)
committerBehdad Esfahbod <behdad@behdad.org>
Mon, 6 Apr 2009 23:43:43 +0000 (19:43 -0400)
Previously we were returning zero.  We now return the height of the
glyph for space.

pango/pangoft2.c
pango/pangoxft-font.c

index 224f6a0..dd268b9 100644 (file)
@@ -318,14 +318,12 @@ pango_ft2_font_get_glyph_extents (PangoFont      *font,
                                  PangoRectangle *logical_rect)
 {
   PangoFT2GlyphInfo *info;
+  gboolean empty = FALSE;
 
   if (glyph == PANGO_GLYPH_EMPTY)
     {
-      if (ink_rect)
-       ink_rect->x = ink_rect->y = ink_rect->height = ink_rect->width = 0;
-      if (logical_rect)
-       logical_rect->x = logical_rect->y = logical_rect->height = logical_rect->width = 0;
-      return;
+      glyph = pango_fc_font_get_glyph (font, ' ');
+      empty = TRUE;
     }
 
   if (glyph & PANGO_GLYPH_UNKNOWN_FLAG)
@@ -367,6 +365,15 @@ pango_ft2_font_get_glyph_extents (PangoFont      *font,
     *ink_rect = info->ink_rect;
   if (logical_rect)
     *logical_rect = info->logical_rect;
+
+  if (empty)
+    {
+      if (ink_rect)
+       ink_rect->x = ink_rect->y = ink_rect->height = ink_rect->width = 0;
+      if (logical_rect)
+       logical_rect->x = logical_rect->width = 0;
+      return;
+    }
 }
 
 /**
index 6865490..4834f1f 100644 (file)
@@ -326,19 +326,23 @@ pango_xft_font_get_glyph_extents (PangoFont        *font,
 {
   PangoXftFont *xfont = (PangoXftFont *)font;
   PangoFcFont *fcfont = PANGO_FC_FONT (font);
+  gboolean empty = FALSE;
 
-  if (!fcfont->fontmap)                /* Display closed */
-    goto fallback;
-
-  if (glyph == PANGO_GLYPH_EMPTY)
+  if (G_UNLIKELY (!fcfont->fontmap))   /* Display closed */
     {
-    fallback:
       if (ink_rect)
        ink_rect->x = ink_rect->width = ink_rect->y = ink_rect->height = 0;
       if (logical_rect)
        logical_rect->x = logical_rect->width = logical_rect->y = logical_rect->height = 0;
       return;
     }
+
+  if (glyph == PANGO_GLYPH_EMPTY)
+    {
+      glyph = pango_fc_font_get_glyph (font, ' ');
+      empty = TRUE;
+    }
+
   if (glyph & PANGO_GLYPH_UNKNOWN_FLAG)
     {
       get_glyph_extents_missing (xfont, glyph, ink_rect, logical_rect);
@@ -350,6 +354,15 @@ pango_xft_font_get_glyph_extents (PangoFont        *font,
       else
        get_glyph_extents_raw (xfont, glyph, ink_rect, logical_rect);
     }
+
+  if (empty)
+    {
+      if (ink_rect)
+       ink_rect->x = ink_rect->y = ink_rect->height = ink_rect->width = 0;
+      if (logical_rect)
+       logical_rect->x = logical_rect->width = 0;
+      return;
+    }
 }
 
 static void