$NetBSD: patch-ao,v 1.1 2007/03/18 20:59:35 markd Exp $ Asian font selection issues fix from Dirk Mueller --- src/kernel/qfontdatabase_x11.cpp.orig 2007-02-03 03:01:12.000000000 +1300 +++ src/kernel/qfontdatabase_x11.cpp @@ -1589,15 +1589,6 @@ QFontEngine *loadEngine( QFont::Script s if (script == QFont::Latin) // add Euro character FcCharSetAddChar(cs, 0x20ac); - if (script == QFont::Han_SimplifiedChinese) - FcCharSetAddChar(cs, 0x3400); - if (script == QFont::Han_TraditionalChinese){ - FcCharSetAddChar(cs, 0x3435); - FcCharSetAddChar(cs, 0xE000); - FcCharSetAddChar(cs, 0xF6B1); - } - if (script == QFont::MiscellaneousSymbols) - FcCharSetAddChar(cs, 0x2714); FcPatternAddCharSet(pattern, FC_CHARSET, cs); FcCharSetDestroy(cs); } @@ -1813,7 +1804,11 @@ static QFontEngine *loadFontConfigFont(c FcPatternPrint(pattern); #endif + // XftFontMatch calls the right ConfigSubstitute variants, but as we use + // FcFontMatch/Sort here we have to do it manually. FcConfigSubstitute(0, pattern, FcMatchPattern); + XftDefaultSubstitute(QPaintDevice::x11AppDisplay(), QPaintDevice::x11AppScreen(), pattern); + // qDebug("1: pattern contains:"); // FcPatternPrint(pattern); @@ -1847,10 +1842,6 @@ static QFontEngine *loadFontConfigFont(c value.u.s = (const FcChar8 *)cs.data(); FcPatternAddWeak(pattern, FC_FAMILY, value, FcTrue); } -#ifdef FONT_MATCH_DEBUG - printf("final pattern contains:\n"); - FcPatternPrint(pattern); -#endif } if (script != QFont::Unicode) { @@ -1860,19 +1851,15 @@ static QFontEngine *loadFontConfigFont(c if (script == QFont::Latin) // add Euro character FcCharSetAddChar(cs, 0x20ac); - if (script == QFont::Han_SimplifiedChinese) - FcCharSetAddChar(cs, 0x3400); - if (script == QFont::Han_TraditionalChinese) { - FcCharSetAddChar(cs, 0x3435); - FcCharSetAddChar(cs, 0xE000); - FcCharSetAddChar(cs, 0xF6B1); - } - if (script == QFont::MiscellaneousSymbols) - FcCharSetAddChar(cs, 0x2714); FcPatternAddCharSet(pattern, FC_CHARSET, cs); FcCharSetDestroy(cs); } +#ifdef FONT_MATCH_DEBUG + printf("final pattern contains:\n"); + FcPatternPrint(pattern); +#endif + QFontEngine *fe = 0; for( int jj = (FcGetVersion() >= 20392 ? 0 : 1); jj < 2; ++jj ) {