Subject: Re: bug#22383: 25.1.50; Wrong font height for some fonts

From: Eli Zaretskii <[email-masked]>
Date: Sat, 16 Jan 2016 10:11:54 +0200

> Date: Sat, 16 Jan 2016 15:07:04 +0800
> From: Fangwen Yu <[email-masked]>
> 
> With DejaVu Sans Mono-11, text lines in Emacs are 1 pixel taller than in
> gedit or gnome-terminal, also, bold faces are 1 pixel taller than
> regular, so if the theme uses bold faces, texts will jump up and down
> while editing. The line height problem also happens with Consolas font,
> but the bold faces problem doesn't.
> 
> Since it clearly has something to do with font height, I digged into the
> source and found the related code. Apply this patch, and the problem is
> gone:
> 
> diff --git a/src/xftfont.c b/src/xftfont.c
> index 956231e..d0f9a68 100644
> --- a/src/xftfont.c
> +++ b/src/xftfont.c
> @@ -395,16 +395,16 @@ xftfont_open (struct frame *f, Lisp_Object entity, int
> pixel_size)
> 
> font->ascent = xftfont->ascent;
> font->descent = xftfont->descent;
> - if (pixel_size >= 5)
> - {
> - /* The above condition is a dirty workaround because
> - XftTextExtents8 behaves strangely for some fonts
> - (e.g. "Dejavu Sans Mono") when pixel_size is less than 5. */
> - if (font->ascent < extents.y)
> - font->ascent = extents.y;
> - if (font->descent < extents.height - extents.y)
> - font->descent = extents.height - extents.y;
> - }
> + /* if (pixel_size >= 5) */
> + /* { */
> + /* /\* The above condition is a dirty workaround because */
> + /* XftTextExtents8 behaves strangely for some fonts */
> + /* (e.g. "Dejavu Sans Mono") when pixel_size is less than 5. *\/ */
> + /* if (font->ascent < extents.y) */
> + /* font->ascent = extents.y; */
> + /* if (font->descent < extents.height - extents.y) */
> + /* font->descent = extents.height - extents.y; */
> + /* } */
> font->height = font->ascent + font->descent;
> 
> if (XINT (AREF (entity, FONT_SIZE_INDEX)) == 0)
> 
> As the comment says, this piece of code is a dirty workaround, and
> apparently it is causing some new problems.

Thanks for the report and the patch.

I'm CC'ing Handa-san, who wrote that code, in the hope that he could
comment on this issue.