diff options
author | Behdad Esfahbod <behdad@gnome.org> | 2006-01-14 13:28:52 +0000 |
---|---|---|
committer | Behdad Esfahbod <behdad@src.gnome.org> | 2006-01-14 13:28:52 +0000 |
commit | 240877fc00047a2898f8f8d338684c2e4e087b90 (patch) | |
tree | 2e20d484bad218e4c5f502e21a98be93e66cf79b /pango/pangocairo-fcfont.c | |
parent | 9510da42b83abfcc1c80fe7905c66b931a889d4c (diff) | |
download | pango-240877fc00047a2898f8f8d338684c2e4e087b90.tar.gz |
Draw hexbox for cairo backend. Bug #313551. Based on patch by LingNing
2006-01-14 Behdad Esfahbod <behdad@gnome.org>
Draw hexbox for cairo backend. Bug #313551. Based on patch by
LingNing Zhang.
* pango/pangocairo-private.h (_PangoCairoFontIface): Add new methods:
get_font_face and get_scaled_font, and getters:
_pango_cairo_font_get_font_face, _pango_cairo_font_get_scaled_font.
* pango/pangocairo-private.h: Add _PangoCairoHexBoxInfo, and getter
_pango_cairo_get_hex_box_info, and
_pango_cairo_get_glyph_extents_missing.
* pango/pangocairo-fcfont.c, pango/pangocairo-atsuifont.c,
* pango/pangocairo-win32font.c: Export get_font_face and
get_scaled_font methods.
* pango/pangocairo-fcfont.c: Use
* _pango_cairo_get_glyph_extents_missing
on missing glyphs.
* pango/pangocairo-font.c: Implement _pango_cairo_font_get_font_face,
_pango_cairo_font_get_scaled_font, _pango_cairo_get_hex_box_info, and
_pango_cairo_get_glyph_extents_missing.
* pango/pangocairo-render.c
* (_pango_cairo_renderer_draw_unknown_glyph):
Added.
* pango/pangocairo-render.c (pango_cairo_renderer_draw_glyphs):
Cleaned up to use the added function above.
Diffstat (limited to 'pango/pangocairo-fcfont.c')
-rw-r--r-- | pango/pangocairo-fcfont.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/pango/pangocairo-fcfont.c b/pango/pangocairo-fcfont.c index 5913ca91..e5a8b194 100644 --- a/pango/pangocairo-fcfont.c +++ b/pango/pangocairo-fcfont.c @@ -189,6 +189,8 @@ static void cairo_font_iface_init (PangoCairoFontIface *iface) { iface->install = pango_cairo_fc_font_install; + iface->get_font_face = pango_cairo_fc_font_get_font_face; + iface->get_scaled_font = pango_cairo_fc_font_get_scaled_font; } G_DEFINE_TYPE_WITH_CODE (PangoCairoFcFont, pango_cairo_fc_font, PANGO_TYPE_FC_FONT, @@ -363,8 +365,7 @@ pango_cairo_fc_font_glyph_extents_cache_init (PangoCairoFcFont *cffont) cffont->font_extents.x = 0; cffont->font_extents.y = - font_extents.ascent * PANGO_SCALE; cffont->font_extents.height = (font_extents.ascent + font_extents.descent) * PANGO_SCALE; - /* The width is only used for the width of box drawn for glyph-not-found */ - cffont->font_extents.width = (font_extents.ascent - font_extents.descent) * PANGO_SCALE; + cffont->font_extents.width = 0; cffont->glyph_extents_cache = g_new0 (GlyphExtentsCacheEntry, GLYPH_CACHE_NUM_ENTRIES); /* Make sure all cache entries are invalid initially */ @@ -445,8 +446,12 @@ pango_cairo_fc_font_get_glyph_extents (PangoFont *font, if (cffont->glyph_extents_cache == NULL) pango_cairo_fc_font_glyph_extents_cache_init (cffont); - - if (!glyph || glyph & PANGO_CAIRO_UNKNOWN_FLAG) + if (glyph & PANGO_CAIRO_UNKNOWN_FLAG) + { + _pango_cairo_get_glyph_extents_missing((PangoCairoFont *)font, glyph, ink_rect, logical_rect); + return; + } + else if (!glyph) { if (ink_rect) *ink_rect = cffont->font_extents; @@ -537,7 +542,7 @@ get_font_size (PangoCairoFcFontMap *cffontmap, PangoContext *context, const PangoFontDescription *desc, FcPattern *pattern, - PangoMatrix *matrix) + const PangoMatrix *matrix) { double size; |