1
0
mirror of https://git.tartarus.org/simon/putty.git synced 2025-03-12 18:13:50 -05:00

Work around a weird bug in gdk_draw_text_wc().

[originally from svn r2437]
This commit is contained in:
Simon Tatham 2003-01-03 17:52:51 +00:00
parent 0a6e82b4dd
commit 106bf20b35

View File

@ -1590,7 +1590,22 @@ void do_text_internal(Context ctx, int x, int y, char *text, int len,
* nothing at all; such is life.
*/
} else if (inst->fontinfo[fontid].is_wide) {
gwcs = smalloc(sizeof(GdkWChar) * (len+1));
/*
* At least one version of gdk_draw_text_wc() has a
* weird bug whereby it reads `len' elements of the
* input string, but only draws `len/2'. Hence I'm
* going to make its input array twice as long as it
* theoretically needs to be, and pass in twice the
* actual number of characters. If a fixed gdk actually
* takes the doubled length seriously, then (a) the
* array will stand scrutiny up to the full length, (b)
* the spare elements of the array are full of zeroes
* which will probably be an empty glyph in the font,
* and (c) the clip rectangle should prevent it causing
* trouble anyway.
*/
gwcs = smalloc(sizeof(GdkWChar) * (len*2+1));
memset(gwcs, 0, sizeof(GdkWChar) * (len*2+1));
/*
* FIXME: when we have a wide-char equivalent of
* from_unicode, use it instead of this.