[PATCH to 1.2.8] gdk_text_width_wc was broked
- From: Vlad Harchev <hvv hippo ru>
- To: gtk-devel-list gnome org
- Subject: [PATCH to 1.2.8] gdk_text_width_wc was broked
- Date: Tue, 22 Aug 2000 20:45:29 +0500 (SAMST)
Hi,
Here is a patch to fix broken behaviour of gdk_text_width_wc. If the font
passed to it is of type GDK_FONT_FONT (i.e. not a fontset) it converts wcs
to char[] using plain assignment, rather than using gdk_wcstombs). This breaks
horribly for russian strings - the characters get shifted by 128 after such
conversion, thus leading to measuring the width of completely different string
(it always shorter, so all strings in russian appear truncated by a half of a
letter in average).
Best regards,
-Vlad
diff -ru gtk+-1.2.5-was/gdk/gdkfont.c gtk+-1.2.5/gdk/gdkfont.c
--- gtk+-1.2.5-was/gdk/gdkfont.c Mon Aug 21 11:40:39 2000
+++ gtk+-1.2.5/gdk/gdkfont.c Tue Aug 22 18:48:55 2000
@@ -388,12 +388,18 @@
xfont = (XFontStruct *) private->xfont;
if ((xfont->min_byte1 == 0) && (xfont->max_byte1 == 0))
{
- gchar *text_8bit;
- gint i;
- text_8bit = g_new (gchar, text_length);
- for (i=0; i<text_length; i++) text_8bit[i] = text[i];
- width = XTextWidth (xfont, text_8bit, text_length);
- g_free (text_8bit);
+ GdkWChar* wc_tmp;
+ gchar* mbtext;
+ gint mblen;
+
+ wc_tmp = g_new(GdkWChar,text_length+1);
+ memcpy(wc_tmp,text,sizeof(GdkWChar)*text_length);
+ wc_tmp[text_length] = (GdkWChar)0;
+ mbtext = gdk_wcstombs(wc_tmp);
+ mblen = strlen(mbtext);
+ width = XTextWidth (xfont, mbtext, mblen);
+ g_free(mbtext);
+ g_free(wc_tmp);
}
else
{
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]