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 <[email protected]> 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.
_______________________________________________
fonts-bugs mailing list
[email protected]
https://admin.fedoraproject.org/mailman/listinfo/fonts-bugs
http://fonts.fedoraproject.org/

Reply via email to