diff --git a/src/kernel/qfontdatabase_x11.cpp b/src/kernel/qfontdatabase_x11.cpp index 05bdbb8..5b865e6 100644 --- a/src/kernel/qfontdatabase_x11.cpp +++ b/src/kernel/qfontdatabase_x11.cpp @@ -1513,13 +1513,25 @@ static double addPatternProps(XftPattern *pattern, const QtFontStyle::Key &key, convert the pixel size to a point size and request that. */ double size_value = request.pixelSize; + double dpi = QPaintDevice::x11AppDpiY(fp->screen); double scale = 1.; if ( size_value > MAXFONTSIZE_XFT ) { scale = (double)size_value/(double)MAXFONTSIZE_XFT; size_value = MAXFONTSIZE_XFT; } - size_value = size_value*72./QPaintDevice::x11AppDpiY(fp->screen); +#ifdef QT_XFT2 + /* + 2006-12-28 If QT is not compiled against xft1, there is no need + for the workaround above (confirmed). Thus, in addition, add + font pixelsize to the pattern to avoid fontconfig making wrong + guesses. Also provide a DPI value for fontconfig so it never + attempts to fallback to its default. + */ + XftPatternAddDouble(pattern, XFT_PIXEL_SIZE, size_value); + XftPatternAddDouble(pattern, XFT_DPI, dpi); +#endif + size_value = size_value*72./dpi; XftPatternAddDouble( pattern, XFT_SIZE, size_value ); #ifdef XFT_MATRIX @@ -1877,6 +1889,11 @@ static QFontEngine *loadFontConfigFont(const QFontPrivate *fp, const QFontDef &r FcResult result; FcFontSet *fs = 0; FcPattern *fsp = 0; + + // Properly conform to fontconfig API. We need to call FcDefaultSubstitute() + // before FcFontSort()/FcFontMatch(). + FcDefaultSubstitute(pattern); + if( use_fontsort ) { fs = FcFontSort(0, pattern, FcFalse, 0, &result); if (!fs)