Mercurial > emacs
changeset 42844:38ae31587c80
(w32_native_per_char_metric): Don't trust the metrics
that Windows returns. If a double check fails, try to guess how
ExtTextOut is going to act.
author | Jason Rumney <jasonr@gnu.org> |
---|---|
date | Sun, 20 Jan 2002 14:54:48 +0000 |
parents | 49c29a684355 |
children | ebb3a20bc357 |
files | src/w32term.c |
diffstat | 1 files changed, 14 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/src/w32term.c Sun Jan 20 09:27:57 2002 +0000 +++ b/src/w32term.c Sun Jan 20 14:54:48 2002 +0000 @@ -388,8 +388,8 @@ static void x_clear_cursor P_ ((struct window *)); static void frame_highlight P_ ((struct frame *)); static void frame_unhighlight P_ ((struct frame *)); -static void w32_new_focus_frame P_ ((struct w32_display_info *, - struct frame *)); +static void x_new_focus_frame P_ ((struct w32_display_info *, + struct frame *)); static void w32_frame_rehighlight P_ ((struct frame *)); static void x_frame_rehighlight P_ ((struct w32_display_info *)); static void x_draw_hollow_cursor P_ ((struct window *, struct glyph_row *)); @@ -1210,9 +1210,20 @@ if (retval) { + /* Don't trust the ABC widths. For synthesized fonts they are + wrong, and so is the result of GetCharWidth()! */ + int real_width; + GetCharWidth (hdc, *char2b, *char2b, &real_width); + pcm->width = char_widths.abcA + char_widths.abcB + char_widths.abcC; + + /* As far as I can tell, this is the best way to determine what + ExtTextOut will do with the broken font. */ + if (pcm->width != real_width) + pcm->width = (pcm->width + real_width) / 2; + pcm->lbearing = char_widths.abcA; - pcm->rbearing = pcm->width - char_widths.abcC; + pcm->rbearing = char_widths.abcA + char_widths.abcB; pcm->ascent = FONT_BASE (font); pcm->descent = FONT_DESCENT (font); }