GNU bug report logs - #22383
25.1.50; Wrong font height for some fonts

Previous Next

Package: emacs;

Reported by: Fangwen Yu <yynyygy <at> gmail.com>

Date: Sat, 16 Jan 2016 07:08:01 UTC

Severity: normal

Found in version 25.1.50

Done: Eli Zaretskii <eliz <at> gnu.org>

Bug is archived. No further changes may be made.

Full log


Message #8 received at 22383 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Fangwen Yu <yynyygy <at> gmail.com>, Kenichi Handa <handa <at> gnu.org>
Cc: 22383 <at> debbugs.gnu.org
Subject: Re: bug#22383: 25.1.50; Wrong font height for some fonts
Date: Sat, 16 Jan 2016 10:11:54 +0200
> Date: Sat, 16 Jan 2016 15:07:04 +0800
> From: Fangwen Yu <yynyygy <at> gmail.com>
> 
> 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.




This bug report was last modified 9 years and 93 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.