Fix for bug 547

Reduce length of wchar_t strings to the minimum required
for conversion

Check if Bold or Italic is given in the font name, set
corresponding variable
This commit is contained in:
Holger Vogt 2021-04-24 17:29:28 +02:00
parent 897d4c598b
commit c9a19c7569
2 changed files with 12 additions and 5 deletions

View File

@ -1079,10 +1079,10 @@ int WIN_Text(const char *text, int x, int y, int angle)
lfw.lfEscapement = angle * 10; lfw.lfEscapement = angle * 10;
lfw.lfOrientation = angle * 10; lfw.lfOrientation = angle * 10;
lfw.lfWeight = 500; lfw.lfWeight = 500;
lfw.lfItalic = 0; lfw.lfItalic = FALSE;
lfw.lfUnderline = 0; lfw.lfUnderline = 0;
lfw.lfStrikeOut = 0; lfw.lfStrikeOut = 0;
lfw.lfCharSet = 0; lfw.lfCharSet = DEFAULT_CHARSET;
lfw.lfOutPrecision = 0; lfw.lfOutPrecision = 0;
lfw.lfClipPrecision = 0; lfw.lfClipPrecision = 0;
lfw.lfQuality = 0; lfw.lfQuality = 0;
@ -1096,6 +1096,10 @@ int WIN_Text(const char *text, int x, int y, int angle)
wchar_t wface[32]; wchar_t wface[32];
swprintf(wface, 32, L"%S", facename); swprintf(wface, 32, L"%S", facename);
(void)lstrcpyW(lfw.lfFaceName, wface); (void)lstrcpyW(lfw.lfFaceName, wface);
if (strstr(facename, "Bold"))
lfw.lfWeight = 700;
if (strstr(facename, "Italic"))
lfw.lfItalic = TRUE;
} }
if (!cp_getvar("wfont_size", CP_NUM, &(lfw.lfHeight), 0)) { if (!cp_getvar("wfont_size", CP_NUM, &(lfw.lfHeight), 0)) {
lfw.lfHeight = 18; lfw.lfHeight = 18;
@ -1113,8 +1117,9 @@ int WIN_Text(const char *text, int x, int y, int angle)
#ifdef EXT_ASC #ifdef EXT_ASC
TextOut(wd->hDC, x, wd->Area.bottom - y - currentgraph->fontheight, text, (int)strlen(text)); TextOut(wd->hDC, x, wd->Area.bottom - y - currentgraph->fontheight, text, (int)strlen(text));
#else #else
const int n_byte_wide = 2 * (int) strlen(text) + 1; const int n_byte_wide = (int) strlen(text);
wchar_t * const wtext = TMALLOC(wchar_t, n_byte_wide); wchar_t * const wtext = TMALLOC(wchar_t, n_byte_wide);
/* wtext needs not to be NULL-terminated */
MultiByteToWideChar(CP_UTF8, 0, text, -1, wtext, n_byte_wide); MultiByteToWideChar(CP_UTF8, 0, text, -1, wtext, n_byte_wide);
TextOutW(wd->hDC, x, wd->Area.bottom - y - currentgraph->fontheight, TextOutW(wd->hDC, x, wd->Area.bottom - y - currentgraph->fontheight,
wtext, n_byte_wide); wtext, n_byte_wide);

View File

@ -305,7 +305,8 @@ int WPRINT_NewViewport(GRAPH * graph)
TextOut(PrinterDC, PrinterWidth - graph->fontwidth, -1*yoffset, graph->plotname, TextOut(PrinterDC, PrinterWidth - graph->fontwidth, -1*yoffset, graph->plotname,
(int)strlen(graph->plotname)); (int)strlen(graph->plotname));
#else #else
const int n_byte_wide = 2 * (int) strlen(graph->plotname) + 1; /* wtext needs not to be NULL-terminated */
const int n_byte_wide = (int) strlen(graph->plotname);
wchar_t * const wtext = TMALLOC(wchar_t, n_byte_wide); wchar_t * const wtext = TMALLOC(wchar_t, n_byte_wide);
MultiByteToWideChar(CP_UTF8, 0, graph->plotname, -1, wtext, MultiByteToWideChar(CP_UTF8, 0, graph->plotname, -1, wtext,
n_byte_wide); n_byte_wide);
@ -458,7 +459,8 @@ int WPRINT_Text(char * text, int x, int y, int degrees)
#ifdef EXT_ASC #ifdef EXT_ASC
TextOut(PrinterDC, x, PrinterHeight - y - currentgraph->fontheight, text, (int)strlen(text)); TextOut(PrinterDC, x, PrinterHeight - y - currentgraph->fontheight, text, (int)strlen(text));
#else #else
const int n_byte_wide = 2 * (int) strlen(text) + 1; /* wtext needs not to be NULL-terminated */
const int n_byte_wide = (int) strlen(text);
wchar_t * const wtext = TMALLOC(wchar_t, n_byte_wide); wchar_t * const wtext = TMALLOC(wchar_t, n_byte_wide);
MultiByteToWideChar(CP_UTF8, 0, text, -1, wtext, n_byte_wide); MultiByteToWideChar(CP_UTF8, 0, text, -1, wtext, n_byte_wide);
TextOutW(PrinterDC, x, PrinterHeight - y - currentgraph->fontheight, TextOutW(PrinterDC, x, PrinterHeight - y - currentgraph->fontheight,