diff options
Diffstat (limited to 'gdk/gdkfont.c')
-rw-r--r-- | gdk/gdkfont.c | 67 |
1 files changed, 44 insertions, 23 deletions
diff --git a/gdk/gdkfont.c b/gdk/gdkfont.c index ec9dd563d..072852d37 100644 --- a/gdk/gdkfont.c +++ b/gdk/gdkfont.c @@ -403,12 +403,14 @@ gdk_text_width_wc (GdkFont *font, gchar *glyphs; int glyphs_len; - _gdk_font_wc_to_glyphs (font, text, text_length, - &glyphs, &glyphs_len); - - width = gdk_text_width (font, glyphs, glyphs_len); - - g_free (glyphs); + if (_gdk_font_wc_to_glyphs (font, text, text_length, + &glyphs, &glyphs_len)) + { + width = gdk_text_width (font, glyphs, glyphs_len); + g_free (glyphs); + } + else + width = 0; break; } @@ -510,12 +512,14 @@ gdk_char_width_wc (GdkFont *font, { gchar *glyphs; int glyphs_len; - - _gdk_font_wc_to_glyphs (font, &character, 1, &glyphs, &glyphs_len); - - width = gdk_text_width (font, glyphs, glyphs_len); - - g_free (glyphs); + + if (_gdk_font_wc_to_glyphs (font, &character, 1, &glyphs, &glyphs_len)) + { + width = gdk_text_width (font, glyphs, glyphs_len); + g_free (glyphs); + } + else + width = 0; break; } @@ -637,13 +641,26 @@ gdk_text_extents_wc (GdkFont *font, gchar *glyphs; int glyphs_len; - _gdk_font_wc_to_glyphs (font, text, text_length, - &glyphs, &glyphs_len); - - gdk_text_extents (font, glyphs, glyphs_len, - lbearing, rbearing, width, ascent, descent); - - g_free (glyphs); + if (_gdk_font_wc_to_glyphs (font, text, text_length, + &glyphs, &glyphs_len)) + { + gdk_text_extents (font, glyphs, glyphs_len, + lbearing, rbearing, width, ascent, descent); + g_free (glyphs); + } + else + { + if (lbearing) + *lbearing = 0; + if (rbearing) + *rbearing = 0; + if (width) + *width = 0; + if (ascent) + *ascent = 0; + if (descent) + *descent = 0; + } break; } @@ -821,7 +838,7 @@ gdk_char_height (GdkFont *font, return gdk_text_height (font, &character, 1); } -void +gboolean _gdk_font_wc_to_glyphs (GdkFont *font, const GdkWChar *text, gint text_length, @@ -831,8 +848,8 @@ _gdk_font_wc_to_glyphs (GdkFont *font, XFontStruct *xfont; GdkFontPrivate *font_private = (GdkFontPrivate*) font; - g_return_if_fail (font != NULL); - g_return_if_fail (font->type == GDK_FONT_FONT); + g_return_val_if_fail (font != NULL, FALSE); + g_return_val_if_fail (font->type == GDK_FONT_FONT, FALSE); xfont = (XFontStruct *) font_private->xfont; @@ -844,12 +861,14 @@ _gdk_font_wc_to_glyphs (GdkFont *font, char *mbstr = _gdk_wcstombs_len (text, text_length); if (result_length) - *result_length = strlen (mbstr); + *result_length = mbstr ? strlen (mbstr) : 0; if (result) *result = mbstr; else g_free (mbstr); + + return mbstr != NULL; } else { @@ -872,5 +891,7 @@ _gdk_font_wc_to_glyphs (GdkFont *font, if (result_length) *result_length = text_length; + + return TRUE; } } |