[Bug 705348] Lohit fonts accidentally disable the bytecode interpreter for Qt

bugzilla at redhat.com bugzilla at redhat.com
Mon Jun 6 16:18:26 UTC 2011


Please do not reply directly to this email. All additional
comments should be made in the comments box of this bug.


https://bugzilla.redhat.com/show_bug.cgi?id=705348

--- Comment #21 from Behdad Esfahbod <behdad at fedoraproject.org> 2011-06-06 12:18:24 EDT ---
The way Pango is using fontconfig is completely correct and the way fontconfig
is designed to be used.  In short, this is how to use fontconfig:

  - Create a pattern specifying the characteristics you are looking for (ie.
"sans bold 18").  Call this pat.

  - Call FcConfigSubstitute (NULL, pat, FcMatchPattern).  That's where
target="pattern" configuration is applied.

  - Call FcDefaultSubstitute (pat)

  - Then either: {

    - Call FcFontSort (NULL, pat, ...).  This will return a fontset, lets call
it fs.

    - For any item in fs that you want to use (call that 'font'), you should:

      - Call FcRenderPrepare (NULL, pat, font).  This will implicitly call
FcConfigSubstituteWithPat (NULL, res, pat, FcMatchFont) on the pattern that it
returns.  That's where target="font" configuration is applied.

      - Use the resulting pattern to open the font and render it.

  } or {

    - Call FcFontMatch (NULL, pat, &result).  This will return what we call a
"font" pattern.  It already has FcFontRenderPrepare (NULL, pat, font) called on
it by FcFontMatch.

  }



Now!  The way Qt is abusing fontconfig is:

 - qt_fontSetForPattern calls FcFontSort (NULL, pat, ...) and gets the
resulting fontset 'fs' and saves it.

    *** Note that it should have called FcConfigSubstitute (pattern,
FcMatchPattern) and FcDefaultSubstitute (pattern) first, but it didn't.


  - In QFontEngineMultiFT::loadEngine(), it gets font patterns out of fs, and
calls it pattern.  Note that this is a target="font" kind of pattern.

  - Then it calls:

      FcConfigSubstitute(0, pattern, FcMatchPattern);
      FcDefaultSubstitute(pattern);

    *** This is completely wrong, since pattern is a font pattern, not a query
pattern!

So, that's it.  It's completely b0rked.  Those two calls should be made before
FcFontSort(), and FcRenderPrepare called in place of those two.

-- 
Configure bugmail: https://bugzilla.redhat.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.


More information about the fonts-bugs mailing list