summaryrefslogtreecommitdiff
path: root/pango/pangox.c
diff options
context:
space:
mode:
authorOwen Taylor <otaylor@redhat.com>2000-01-18 03:03:07 +0000
committerOwen Taylor <otaylor@src.gnome.org>2000-01-18 03:03:07 +0000
commitdc428426c9c618412eae117d7cc542e64b7babe3 (patch)
tree267db5934b4dbdb7c7bc288aea55ab3f5cf38326 /pango/pangox.c
parent4f4abbdc8fc0cd0547b0df81eb6f7bb3c77dee7e (diff)
downloadpango-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.c55
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;