# HG changeset patch # User Kenichi Handa # Date 863235421 0 # Node ID 530ee47cb56b7c1d84e37ac8ffcd970687812b84 # Parent 78ec737e715485f7f76b0ee75572f7c4436fd81d (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. diff -r 78ec737e7154 -r 530ee47cb56b src/xterm.c --- 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)