fixes for negative font width and multi-byte char support
Warren_Baird at cimmetry.com
Warren_Baird at cimmetry.com
Thu Feb 6 08:47:36 CST 2003
ChangeLog:
1. Added sanity check on width logical font field in CreateFontIndirect.
2. Added multi-bytes character support for GetGlyphOutline.
Description:
1. Passing a negative width in the logical font to the X11drv XRender
library will somehow produce a crash.
Warren Baird : Warren_Baird at cimmetry.com
Dave Belanger
diff -ur clean/wine/objects/font.c wine/objects/font.c
--- clean/wine/objects/font.c Wed Jan 29 15:31:13 2003
+++ wine/objects/font.c Thu Jan 30 10:27:31 2003
@@ -328,6 +328,11 @@
debugstr_w(plf->lfFaceName),
plf->lfWeight > 400 ? "Bold" : "",
plf->lfItalic ? "Italic" : "", hFont);
+
+ if (plf->lfWidth < 0) {
+ fontPtr->logfont.lfWidth = 0;
+ WARN("Invalid font width has been specified; setting it to
zero.\n");
+ }
if (plf->lfEscapement != plf->lfOrientation) {
/* this should really depend on whether GM_ADVANCED is set */
@@ -1610,8 +1615,20 @@
UINT c;
if(!(fuFormat & GGO_GLYPH_INDEX)) {
- p = FONT_mbtowc(hdc, (char*)&uChar, 1, NULL, NULL);
- c = p[0];
+ char temp[3];
+ if (uChar > 0xFF) {
+ /* multi-byte */
+ temp[1] = uChar & 0xFF;
+ temp[0] = (uChar >> 8) & 0xFF;
+ temp[2] = 0;
+ } else {
+ /* single byte */
+ temp[0] = uChar;
+ temp[1] = 0;
+ temp[2] = 0;
+ }
+ p = FONT_mbtowc(hdc, temp, strlen(temp), NULL, NULL);
+ c = p[0];
} else
c = uChar;
ret = GetGlyphOutlineW(hdc, c, fuFormat, lpgm, cbBuffer, lpBuffer,
More information about the wine-patches
mailing list