Re: [PATCH to 1.2.8] gdk_text_width_wc was broked
- From: Vlad Harchev <hvv hippo ru>
- To: gtk-devel-list gnome org
- Subject: Re: [PATCH to 1.2.8] gdk_text_width_wc was broked
- Date: Wed, 30 Aug 2000 22:45:13 +0500 (SAMST)
On Tue, 22 Aug 2000, Vlad Harchev wrote:
Hi,
Will this patch be applied?
> 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
> {
Best regards,
-Vlad
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]