summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBehdad Esfahbod <behdad@behdad.org>2009-04-06 19:43:17 -0400
committerBehdad Esfahbod <behdad@behdad.org>2009-04-06 19:43:43 -0400
commit1e990af007255d1137ec76bd86658198d73994c6 (patch)
treef8b624f16cbf7817d4e9383a263ea80b31cbf931
parente61e53f197bf238269a9db736901e64fd999190a (diff)
downloadpango-1e990af007255d1137ec76bd86658198d73994c6.tar.gz
[xft,ft2] Fix empty-glyph logical extents
Previously we were returning zero. We now return the height of the glyph for space.
-rw-r--r--pango/pangoft2.c17
-rw-r--r--pango/pangoxft-font.c23
2 files changed, 30 insertions, 10 deletions
diff --git a/pango/pangoft2.c b/pango/pangoft2.c
index 224f6a0c..dd268b96 100644
--- a/pango/pangoft2.c
+++ b/pango/pangoft2.c
@@ -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;
+ }
}
/**
diff --git a/pango/pangoxft-font.c b/pango/pangoxft-font.c
index 68654908..4834f1ff 100644
--- a/pango/pangoxft-font.c
+++ b/pango/pangoxft-font.c
@@ -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