Sophie

Sophie

distrib > Mandriva > 2009.0 > x86_64 > by-pkgid > d9166b60b776d5b57e8de22557b27e8b > files > 35

qt3-3.3.8b-8.2mdv2009.0.src.rpm

--- src/kernel/qfontdatabase_x11.cpp	2006-12-28 21:40:34.000000000 +0200
+++ src/kernel/qfontdatabase_x11.cpp	2006-12-28 21:43:44.000000000 +0200
@@ -1504,13 +1504,24 @@
       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
@@ -1875,6 +1886,11 @@
     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)