diff options
author | Owen Taylor <otaylor@redhat.com> | 2000-01-18 03:03:07 +0000 |
---|---|---|
committer | Owen Taylor <otaylor@src.gnome.org> | 2000-01-18 03:03:07 +0000 |
commit | dc428426c9c618412eae117d7cc542e64b7babe3 (patch) | |
tree | 267db5934b4dbdb7c7bc288aea55ab3f5cf38326 /pango/pangox.c | |
parent | 4f4abbdc8fc0cd0547b0df81eb6f7bb3c77dee7e (diff) | |
download | pango-dc428426c9c618412eae117d7cc542e64b7babe3.tar.gz |
Updated to use new X font mechanism.
Mon Jan 17 22:03:24 2000 Owen Taylor <otaylor@redhat.com>
* modules/hangul/hangul.c modules/tamil/tamil.c:
Updated to use new X font mechanism.
* libpango/pangox.[ch]: Misc bugfixes, no longer segfaults.
Diffstat (limited to 'pango/pangox.c')
-rw-r--r-- | pango/pangox.c | 55 |
1 files changed, 39 insertions, 16 deletions
diff --git a/pango/pangox.c b/pango/pangox.c index 0bd1de72..7b4656c1 100644 --- a/pango/pangox.c +++ b/pango/pangox.c @@ -51,15 +51,18 @@ struct _PangoXFont { gint max_subfonts; }; -static PangoXSubfontInfo *pango_x_find_subfont (PangoFont *font, - PangoXSubfont subfont_index); -static XCharStruct * pango_x_get_per_char (PangoXSubfontInfo *subfont, - guint16 char_index); -static void pango_x_font_destroy (PangoFont *font); -static gboolean pango_x_find_glyph (PangoFont *font, - PangoGlyph glyph, - PangoXSubfontInfo **subfont_return, - XCharStruct **charstruct_return); +static PangoXSubfontInfo * pango_x_find_subfont (PangoFont *font, + PangoXSubfont subfont_index); +static XCharStruct * pango_x_get_per_char (PangoFont *font, + PangoXSubfontInfo *subfont, + guint16 char_index); +static void pango_x_font_destroy (PangoFont *font); +static gboolean pango_x_find_glyph (PangoFont *font, + PangoGlyph glyph, + PangoXSubfontInfo **subfont_return, + XCharStruct **charstruct_return); +static XFontStruct * pango_x_get_font_struct (PangoFont *font, + PangoXSubfontInfo *info); PangoFontClass pango_x_font_class = { pango_x_font_destroy @@ -150,7 +153,9 @@ pango_x_render (Display *display, c.byte1 = index / 256; c.byte2 = index % 256; - fs = subfont->font_struct; + fs = pango_x_get_font_struct (font, subfont); + if (!fs) + continue; if (fs->fid != old_fid) { @@ -537,6 +542,21 @@ pango_x_font_destroy (PangoFont *font) /* Utility functions */ +static XFontStruct * +pango_x_get_font_struct (PangoFont *font, PangoXSubfontInfo *info) +{ + PangoXFont *xfont = (PangoXFont *)font; + + if (!info->font_struct) + { + info->font_struct = XLoadQueryFont (xfont->display, info->xlfd); + if (!info->font_struct) + g_warning ("Cannot load font for XLFD '%s\n", info->xlfd); + } + + return info->font_struct; +} + static PangoXSubfontInfo * pango_x_find_subfont (PangoFont *font, PangoXSubfont subfont_index) @@ -553,7 +573,8 @@ pango_x_find_subfont (PangoFont *font, } static XCharStruct * -pango_x_get_per_char (PangoXSubfontInfo *subfont, +pango_x_get_per_char (PangoFont *font, + PangoXSubfontInfo *subfont, guint16 char_index) { XFontStruct *fs; @@ -565,9 +586,11 @@ pango_x_get_per_char (PangoXSubfontInfo *subfont, byte1 = char_index / 256; byte2 = char_index % 256; - fs = subfont->font_struct; - - if ((fs->min_byte1 == 0) && (fs->min_byte1 == 0)) + fs = pango_x_get_font_struct (font, subfont); + if (!fs) + return NULL; + + if ((fs->min_byte1 == 0) && (fs->max_byte1 == 0)) { if (byte2 < fs->min_char_or_byte2 || byte2 > fs->max_char_or_byte2) return NULL; @@ -607,9 +630,9 @@ pango_x_find_glyph (PangoFont *font, if (!subfont) return FALSE; - cs = pango_x_get_per_char (subfont, char_index); + cs = pango_x_get_per_char (font, subfont, char_index); - if (cs->width != 0) + if (cs && (cs->lbearing != cs->rbearing)) { if (subfont_return) *subfont_return = subfont; |