From ad5674f5a14ab073485f1301057ef5ec92e4b144 Mon Sep 17 00:00:00 2001 From: Jason Rumney Date: Mon, 3 Jan 2005 22:53:30 +0000 Subject: [PATCH] (w32_load_system_font): Set FONT_WIDTH to maximum, not average width. Set fontp->average_width and fontp->space_width to their appropriate values. --- src/w32fns.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/w32fns.c b/src/w32fns.c index 08780e05b1f..b7115601553 100644 --- a/src/w32fns.c +++ b/src/w32fns.c @@ -64,6 +64,7 @@ extern double atof (); extern int w32_console_toggle_lock_key P_ ((int, Lisp_Object)); extern void w32_menu_display_help P_ ((HWND, HMENU, UINT, UINT)); extern void w32_free_menu_strings P_ ((HWND)); +extern XCharStruct *w32_per_char_metric P_ ((XFontStruct *, wchar_t *, int)); extern int quit_char; @@ -4544,7 +4545,7 @@ w32_load_system_font (f,fontname,size) /* Fill out details in lf according to the font that was actually loaded. */ lf.lfHeight = font->tm.tmInternalLeading - font->tm.tmHeight; - lf.lfWidth = font->tm.tmAveCharWidth; + lf.lfWidth = font->tm.tmMaxCharWidth; lf.lfWeight = font->tm.tmWeight; lf.lfItalic = font->tm.tmItalic; lf.lfCharSet = font->tm.tmCharSet; @@ -4592,6 +4593,24 @@ w32_load_system_font (f,fontname,size) fontp->name = (char *) xmalloc (strlen (fontname) + 1); bcopy (fontname, fontp->name, strlen (fontname) + 1); + if (lf.lfPitchAndFamily == FIXED_PITCH) + { + /* Fixed width font. */ + fontp->average_width = fontp->space_width = FONT_WIDTH (font); + } + else + { + wchar_t space = 32; + XCharStruct* pcm; + pcm = w32_per_char_metric (font, &space, ANSI_FONT); + if (pcm) + fontp->space_width = pcm->width; + else + fontp->space_width = FONT_WIDTH (font); + + fontp->average_width = font->tm.tmAveCharWidth; + } + charset = xlfd_charset_of_font (fontname); /* Cache the W32 codepage for a font. This makes w32_encode_char -- 2.39.2