Mercurial > emacs
changeset 2883:b8a3b11892dc
Make sure that all the display faces use fonts of the
same dimensions as the default face, so as not to confuse the rest
of the redisplay code.
* xfaces.c (same_size_fonts): New function.
(merge_faces): Only merge in a new font from the FROM face if it
is the same size as the font in the TO face.
author | Jim Blandy <jimb@redhat.com> |
---|---|
date | Wed, 19 May 1993 03:07:10 +0000 |
parents | 0990f98b4a6c |
children | e52ea063421a |
files | src/xfaces.c |
diffstat | 1 files changed, 26 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/src/xfaces.c Wed May 19 03:06:38 1993 +0000 +++ b/src/xfaces.c Wed May 19 03:07:10 1993 +0000 @@ -420,7 +420,12 @@ /* Initializing face arrays for frames. */ -/* Set up faces 0 and 1 based on the normal text and modeline GC's. */ +/* Set up faces 0 and 1 based on the normal text and modeline GC's. + This gets called whenever the parameters stored in the frame itself + (i.e. font, background color, etcetera) change. + + Note that the first two faces just contain references to the + frame's own resources. We shouldn't free them. */ void init_frame_faces (f) struct frame *f; @@ -547,16 +552,32 @@ /* Computing faces appropriate for a given piece of text in a buffer. */ +/* Return non-zero if FONT1 and FONT2 have the same size bounding box. + We assume that they're both character-cell fonts. */ +static int +same_size_fonts (font1, font2) + XFontStruct *font1, *font2; +{ + XCharStruct *bounds1 = font1->min_bounds; + XCharStruct *bounds2 = font2->min_bounds; + + return (bounds1->width == bounds2->width + && bounds1->ascent == bounds2->ascent + && bounds1->descent == bounds2->descent); +} + + /* Modify face TO by copying from FROM all properties which have nondefault settings. */ static void merge_faces (from, to) struct face *from, *to; { - if (from->font != (XFontStruct *)FACE_DEFAULT) - { - to->font = from->font; - } + /* Only merge the font if it's the same size as the base font. */ + if (from->font != (XFontStruct *) FACE_DEFAULT + && ! from->font->per_char + && same_size_fonts (from->font, to->font)) + to->font = from->font; if (from->foreground != FACE_DEFAULT) to->foreground = from->foreground; if (from->background != FACE_DEFAULT)