diff options
-rw-r--r-- | pango/pangoft2.c | 17 | ||||
-rw-r--r-- | pango/pangoxft-font.c | 23 |
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 |