From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Werner LEMBERG Newsgroups: gmane.emacs.bugs Subject: bug#29078: 25.2; font issue with FreeType 2.8; should not use the rounded ascender and descender Date: Tue, 31 Oct 2017 12:22:14 +0100 (CET) Message-ID: <20171031.122214.1272044855799157335.wl@gnu.org> References: <87d153pqw0.fsf@cventin.lip.ens-lyon.fr> <874lqfmvvj.fsf@gmail.com> NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Trace: blaine.gmane.org 1509449000 27786 195.159.176.226 (31 Oct 2017 11:23:20 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Tue, 31 Oct 2017 11:23:20 +0000 (UTC) Cc: vincent@vinc17.net, 29078@debbugs.gnu.org To: rpluim@gmail.com Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Tue Oct 31 12:23:16 2017 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1e9UdP-0005yu-2D for geb-bug-gnu-emacs@m.gmane.org; Tue, 31 Oct 2017 12:23:07 +0100 Original-Received: from localhost ([::1]:44858 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1e9UdW-0001FI-6q for geb-bug-gnu-emacs@m.gmane.org; Tue, 31 Oct 2017 07:23:14 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:48719) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1e9UdN-0001Da-4F for bug-gnu-emacs@gnu.org; Tue, 31 Oct 2017 07:23:06 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1e9UdJ-0004BU-Uk for bug-gnu-emacs@gnu.org; Tue, 31 Oct 2017 07:23:05 -0400 Original-Received: from debbugs.gnu.org ([208.118.235.43]:34621) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1e9UdJ-0004BN-Qe for bug-gnu-emacs@gnu.org; Tue, 31 Oct 2017 07:23:01 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1e9UdJ-00089F-Jj for bug-gnu-emacs@gnu.org; Tue, 31 Oct 2017 07:23:01 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Werner LEMBERG Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 31 Oct 2017 11:23:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 29078 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: Original-Received: via spool by 29078-submit@debbugs.gnu.org id=B29078.150944897231302 (code B ref 29078); Tue, 31 Oct 2017 11:23:01 +0000 Original-Received: (at 29078) by debbugs.gnu.org; 31 Oct 2017 11:22:52 +0000 Original-Received: from localhost ([127.0.0.1]:43302 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1e9UdA-00088o-C6 for submit@debbugs.gnu.org; Tue, 31 Oct 2017 07:22:52 -0400 Original-Received: from mout.gmx.net ([212.227.15.15]:58467) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1e9Ud7-00088a-PE for 29078@debbugs.gnu.org; Tue, 31 Oct 2017 07:22:50 -0400 Original-Received: from gnu.org ([217.175.203.57]) by mail.gmx.com (mrgmx002 [212.227.17.190]) with ESMTPSA (Nemesis) id 0Lhwgc-1dNnnF2tzW-00n7F9; Tue, 31 Oct 2017 12:22:35 +0100 In-Reply-To: <874lqfmvvj.fsf@gmail.com> X-Mailer: Mew version 6.7 on Emacs 26.0.50 / Mule 6.0 (HANACHIRUSATO) X-Provags-ID: V03:K0:DdNcnKQInxNhrtLci+cT5Fvi/z6X5XRzL6lyqn7tyzZDN2xdeM4 hld4sI7bDiq9K+GBK8lNB9976oNVvdrQC0+0XmWSjPXtIqFeAhw8Et00XWjZME20VP6dST0 9hFIwqUQEtlOavMTu3jDzvOjSyi+MYpC80QR2bf7rGo4uX9sns+Z3TRjyRBl6xWT7QA03Cu 4NPRyutOvrrSvWJkGxzQQ== X-UI-Out-Filterresults: notjunk:1;V01:K0:0FEdZG0UtEM=:N0r5uk8lJEi/3WtcksOOCW LNfFADweQ4YbXvMuQgsusnsYQq6VGNs7HB9JNWSnAcw756WxdADbXnRor+f3NQOG0e3UvPr0p TvYgtM4Vmjg6awKhj5BUiYRpEbQOBfXR6f6at4oK8TLhs8uXNNDlZDCBGdmTzUgJsk7xwYa2Q KiQNuBL8EdEEilt8w294WiGNXFJMW0VIrXfmEdVklpFRzjW1rkv4OtlA19aDOu7CkxwzKXHFz qdFGSY28Ok307YcgEdjL1RbeusndHZRKnDbkPNcJpr6cZHbvatoxrA5OaOnDJQezZWwa67aMs nq2YqegtA2H6hAXiwUru1hZ1Z1mMsTYApHZ/ZTkXRGkjAv008PANOxnhPS5gfIm3J5q6JULxW nRESz9VO10MS7CgMFu8/MQPCvHGG15y+6vJFtcgG1JGh9GBzwh6IC7Z8Or2sLfUi1BNgJEB79 Jo0tALW+ZK6jd1B0bRsXt+E859EHFO/HBSWe9ak9tjKa0v/sfvZSSWuRkt62b5cgo4yRGCU+v wkynoPop81YYNIVappaUCpU6NPa/vUiXwHDyNvU3zIaZSLMTwT3dQntDpyfXyJozFx0W+ay22 bGIxQ+cd6KlCQlElGXqAUaj+8LFJSF9LD2hx1028ud2Xjjbnji0+UnthXCUuBwa095Chrf8E2 Do3wEI1wpSoe2SjZBMranK4wAFjcflqUmYYKJFaN4qf6VO05qIGrtsJ2AzmQVcIE3K/E9zIFR Kn2GXqV2mn8dihtuBap/sVoaYF26KBrKWlEZ+J6Wv2wq4H35ice/tNLM9oftLkjI+xsHLi+V X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 208.118.235.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.org gmane.emacs.bugs:139254 Archived-At: >> For TrueType fonts, FreeType 2.8 uses different rounding rules for >> values in the FT_Size_Metrics structure, which is apparently used >> by Emacs (since there are visible changes). In particular, one can >> now have ascender + descender > height. The consequences are: >> >> 1. Tables look a bit ugly. >> >> 2. Windows (with the same number of text lines) are unnecessarily >> higher than before. >> >> 3. This can break existing configurations, where Emacs would be >> opened at start up, with an expected window size. >> >> I could notice changes at least with the default Mono font, which >> appears to be DejaVu Sans Mono. >> >> Upstream now recommends to use the values from the FT_Face >> structure and scale them manually: > > I don't have FreeType2.8 to test, but you're saying we need to do this? > > diff --git a/src/ftfont.c b/src/ftfont.c > index 35f5923376..d16bf09a1e 100644 > --- a/src/ftfont.c > +++ b/src/ftfont.c > @@ -1153,18 +1153,9 @@ ftfont_open2 (struct frame *f, > upEM = ft_face->units_per_EM; > scalable = (INTEGERP (AREF (entity, FONT_AVGWIDTH_INDEX)) > && XINT (AREF (entity, FONT_AVGWIDTH_INDEX)) == 0); > - if (scalable) > - { > - font->ascent = ft_face->ascender * size / upEM + 0.5; > - font->descent = - ft_face->descender * size / upEM + 0.5; > - font->height = ft_face->height * size / upEM + 0.5; > - } > - else > - { > - font->ascent = ft_face->size->metrics.ascender >> 6; > - font->descent = - ft_face->size->metrics.descender >> 6; > - font->height = ft_face->size->metrics.height >> 6; > - } > + font->ascent = ft_face->ascender * size / upEM + 0.5; > + font->descent = - ft_face->descender * size / upEM + 0.5; > + font->height = ft_face->height * size / upEM + 0.5; > if (INTEGERP (AREF (entity, FONT_SPACING_INDEX))) > spacing = XINT (AREF (entity, FONT_SPACING_INDEX)); > else No. The `scalable' branch must make a distinction between TrueType and non-TrueType fonts if the font gets fully hinted (i.e., if the TrueType bytecode gets interpreted), something like if (scalable) { if (use_truetype_bytecode_hinting(font)) { /* use TrueType rules for rounding */ font->ascent = ROUND(ft_face->ascender * size / upEM) font->descent = ROUND(-ft_face->descender * size / upEM); font->height = font->ascent + font->descent; } else { font->ascent = CEIL(ft_face->ascender * size / upEM); font->descent = FLOOR(-ft_face->descender * size / upEM); font->height = ROUND(ft_face->height * size / upEM); } } ... Werner