[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] harfbuzz 2ffec6b 1/2: Unbreak display of characters on MS-
From: |
Eli Zaretskii |
Subject: |
[Emacs-diffs] harfbuzz 2ffec6b 1/2: Unbreak display of characters on MS-Windows |
Date: |
Fri, 31 May 2019 04:33:55 -0400 (EDT) |
branch: harfbuzz
commit 2ffec6b48e282fd7b25c6ebf31c05ac6b75ff6ac
Author: Eli Zaretskii <address@hidden>
Commit: Eli Zaretskii <address@hidden>
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.
(cherry picked from commit 38564f8a664347c42f7614d9c91e0d49e4a073e8)
---
src/w32font.c | 18 +++++++++++++++---
1 file changed, 15 insertions(+), 3 deletions(-)
diff --git a/src/w32font.c b/src/w32font.c
index 2576df6..14d49b2 100644
--- a/src/w32font.c
+++ b/src/w32font.c
@@ -704,11 +704,23 @@ w32font_draw (struct glyph_string *s, int from, int to,
int i;
for (i = 0; i < len; i++)
- ExtTextOutW (s->hdc, x + i, y, options, NULL,
- s->char2b + from + i, 1, NULL);
+ {
+ WCHAR c = s->char2b[from + i] & 0xFFFF;
+ ExtTextOutW (s->hdc, x + i, y, options, NULL, &c, 1, NULL);
+ }
}
else
- ExtTextOutW (s->hdc, x, y, options, NULL, s->char2b + from, len, NULL);
+ {
+ /* The number of glyphs in a glyph_string cannot be larger than
+ the maximum value of the 'used' member of a glyph_row, so we
+ are OK using alloca here. */
+ eassert (len <= SHRT_MAX);
+ WCHAR *chars = alloca (len * sizeof (WCHAR));
+ int j;
+ for (j = 0; j < len; j++)
+ chars[j] = s->char2b[from + j] & 0xFFFF;
+ ExtTextOutW (s->hdc, x, y, options, NULL, chars, len, NULL);
+ }
/* Restore clip region. */
if (s->num_clips > 0)