Menu

#5136 font size rendering affected by fontconfig DPI setting

Accepted
nobody
None
Defect
2019-09-17
2017-05-11
No

Report:
http://lists.gnu.org/archive/html/bug-lilypond/2017-01/msg00022.html
http://lists.gnu.org/archive/html/bug-lilypond/2017-02/msg00051.html

I ran into an issue with font rendering in Lilypond where text characters
are far too large. This issue also affected several other users and is
described here https://bbs.archlinux.org/viewtopic.php?id=211350.

It turns out that if the dpi setting is manually set in the fontconfig
fonts.conf file, Lilypond will adopt that dpi setting (rather than the
standard setting used in Lilypond, which is 1200) and render all text too
large.

The desktop environment LXQT sets this to 96 dpi automatically, which is
what triggered the bug for me. This may not a good idea on their part, but
I imagine some users may want to or need to adjust this setting and it
doesn't seem right that this should affect rendering in Lilypond.

To reproduce this bug, edit the following file (or create the file, if it
doesn't exist):
$XDG_CONFIG_HOME/fontconfig/fonts.conf

Paste this as the contents of the file (or just add the <match> block with
the dpi setting):

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
  <match target="pattern">
    <edit name="dpi" mode="assign">
      <double>96</double>
    </edit>
  </match>
</fontconfig>

Next, compile any .ly file that includes text, for example:

\version "2.19.49"
\header {
  title = "Title"
}
\relative c''{
c
}

I also have a proposed patch that fixes the problem described, although I
don't know if this is the proper way to fix it:

--- lilypond-2.19.49.orig/lily/pango-font.cc 2016-10-16 07:16:18.000000000
-0400
+++ lilypond-2.19.49.new/lily/pango-font.cc 2016-10-29 22:39:02.921622080
-0400
@@ -317,7 +317,7 @@
   pango_fc_font_unlock_face (fcfont);
   pango_glyph_string_free (pgs);
   pgs = 0;
-  PangoFontDescription *descr = pango_font_describe (pa->font);
+  PangoFontDescription *descr = pango_context_get_font_description
(context_);
   Real size = pango_font_description_get_size (descr)
               / (Real (PANGO_SCALE));

I also created a minimal Pango example that reproduces the bug here
http://stackoverflow.com/questions/40325159/why-is-the-font-map-resolution-reset-when-using-fontconfig-2-11-94.
Thanks!

Tim Schellenberg

Werner commented:

I think it's a lilypond bug, since setting a DPI value is for stuff
that goes to the screen and/or a selected printer, but lilypond should
produce stuff that does not depend on the DPI.

Discussion

  • Charles G. Waldman

    I just ran across the same issue in Lilypond on my Gentoo Linux system. I do not have a ~/.config/fontconfig/fonts.conf and none of the system fontconfig files specify a DPI, as determined by

    $ locate fonts.conf|xargs grep -i dpi

    The pango-fonts.cc patch above (which originates at
    https://bbs.archlinux.org/viewtopic.php?pid=1665573#p1665573 )
    fixes the problem.

    Note that this issue was created over a year ago (2017-05-11) and is marked "Accepted". I think the patch should be applied to lilypond source so users don't have to patch manually.

     
  • Hynek Mlnarik

    Hynek Mlnarik - 2019-09-17

    Thanks for identifying the root cause! I was able to workaround this issue by including the following in the fonts.conf, maybe it would help someone else as well:

     <match target="pattern">
      <test name="prgname" compare="not_eq" qual="any">
        <string>lilypond</string>
      </test>
      <edit name="dpi" mode="assign">
       <double>96</double>
      </edit>
     </match>