emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Font height issue


From: Tassilo Horn
Subject: Font height issue
Date: Thu, 25 Feb 2016 20:34:52 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/25.0.91 (gnu/linux)

Hi all,

I have the problem that the font I want to use in Emacs (PragmataPro in
size 10, sizes 9 or 11 seem to be not affected) seems to have slightly
different heights in the regular and the bold version, or at least Emacs
thinks so.  As a result, when modes change text to/from regular to bold
or vice versa dynamically (e.g., show-paren-mode with a bold
show-paren-match face), the height of the line changes which is
extremely annoying.

When I searched the net I found many others having this kind of issue
with different fonts (like DejaVu Sans Mono), too, and I also found this
workaround

  
https://www.reddit.com/r/emacs/comments/3zto22/i_sort_of_fixed_a_font_rendering_bug_of_emacs/

suggesting this patch:

--8<---------------cut here---------------start------------->8---
diff --git a/src/xftfont.c b/src/xftfont.c
index 110f99a..95e7e52 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)
--8<---------------cut here---------------end--------------->8---

And indeed, that does solve the issue for me.  Now the regular and the
bold version are displayed with the same height.

I have no idea about font handling, so I cannot tell if the above DTRT.
However, it fixes an annoying issue that seems to happen only with
Emacs.  Somewhere on the net I've read that Emacs seems to be the only
one being correct, i.e., it displays what the font says, and if the bold
version of a font is higher than the regular one, that's a (mis)feature
of the font.

Anyhow, since the results can be annoying and apparently not so few
users are affected, can we have a customize option for that?

Bye,
Tassilo



reply via email to

[Prev in Thread] Current Thread [Next in Thread]