Mercurial > emacs
changeset 17720:530ee47cb56b
(dumpglyphs): Even if font (not fontset) is used,
display Latin1 characters correctly if the font contains glyphs
for them. Fix bug of displaying cursor on a composite character.
author | Kenichi Handa <handa@m17n.org> |
---|---|
date | Sat, 10 May 1997 03:37:01 +0000 |
parents | 78ec737e7154 |
children | 4ebed8fa4fcb |
files | src/xterm.c |
diffstat | 1 files changed, 25 insertions(+), 14 deletions(-) [+] |
line wrap: on
line diff
--- a/src/xterm.c Sat May 10 03:24:32 1997 +0000 +++ b/src/xterm.c Sat May 10 03:37:01 1997 +0000 @@ -747,12 +747,26 @@ } else { - font = FACE_FONT (face); - if (font == (XFontStruct *) FACE_DEFAULT) - font = f->output_data.x->font; - baseline = FONT_BASE (font); font_not_found: - gc = FACE_GC (face); + if (charset == CHARSET_ASCII || charset == charset_latin_iso8859_1) + { + font = FACE_FONT (face); + if (font == (XFontStruct *) FACE_DEFAULT) + font = f->output_data.x->font; + baseline = FONT_BASE (font); + if (charset == charset_latin_iso8859_1) + { + if (font->max_char_or_byte2 < 0x80) + /* This font can't display Latin1 characters. */ + font = NULL; + else + { + for (cp = buf; cp < buf + len; cp++) + cp->byte2 |= 0x80; + } + } + } + gc = FACE_GC (face); } /* Now override that if the cursor's on this character. */ @@ -763,7 +777,8 @@ if (font == f->output_data.x->font && face->background == f->output_data.x->background_pixel - && face->foreground == f->output_data.x->foreground_pixel) + && face->foreground == f->output_data.x->foreground_pixel + && !cmpcharp) { gc = f->output_data.x->cursor_gc; } @@ -846,19 +861,15 @@ unsigned long mask = GCForeground | GCBackground; unsigned long fore, back; - /* The current code at first exchange foreground and - background of GC, fill the area, then recover the - original foreground and background of GC. + /* The current code at first set foreground to background, + fill the area, then recover the original foreground. Aren't there any more smart ways? */ XGetGCValues (FRAME_X_DISPLAY (f), gc, mask, &xgcv); - fore = xgcv.foreground, back = xgcv.background; - xgcv.foreground = back, xgcv.background = fore; - XChangeGC (FRAME_X_DISPLAY (f), gc, mask, &xgcv); + XSetForeground (FRAME_X_DISPLAY (f), gc, xgcv.background); XFillRectangle (FRAME_X_DISPLAY (f), window, gc, left, top, run_width, line_height); - xgcv.foreground = fore, xgcv.background = back; - XChangeGC (FRAME_X_DISPLAY (f), gc, mask, &xgcv); + XSetForeground (FRAME_X_DISPLAY (f), gc, xgcv.foreground); background_filled = 1; if (cmpcharp)