Skip to content

Commit 38564f8

Browse files
committed
Unbreak display of characters on MS-Windows
* src/w32font.c (w32font_draw): Convert the glyph_string's char2b array to 16-bit WCHAR data that ExtTextOutW needs.
1 parent 627fa5a commit 38564f8

File tree

1 file changed

+15
-3
lines changed

1 file changed

+15
-3
lines changed

src/w32font.c

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -704,11 +704,23 @@ w32font_draw (struct glyph_string *s, int from, int to,
704704
int i;
705705

706706
for (i = 0; i < len; i++)
707-
ExtTextOutW (s->hdc, x + i, y, options, NULL,
708-
s->char2b + from + i, 1, NULL);
707+
{
708+
WCHAR c = s->char2b[from + i] & 0xFFFF;
709+
ExtTextOutW (s->hdc, x + i, y, options, NULL, &c, 1, NULL);
710+
}
709711
}
710712
else
711-
ExtTextOutW (s->hdc, x, y, options, NULL, s->char2b + from, len, NULL);
713+
{
714+
/* The number of glyphs in a glyph_string cannot be larger than
715+
the maximum value of the 'used' member of a glyph_row, so we
716+
are OK using alloca here. */
717+
eassert (len <= SHRT_MAX);
718+
WCHAR *chars = alloca (len * sizeof (WCHAR));
719+
int j;
720+
for (j = 0; j < len; j++)
721+
chars[j] = s->char2b[from + j] & 0xFFFF;
722+
ExtTextOutW (s->hdc, x, y, options, NULL, chars, len, NULL);
723+
}
712724

713725
/* Restore clip region. */
714726
if (s->num_clips > 0)

0 commit comments

Comments
 (0)