diff options
author | Jiang Jiang <jiang.jiang@nokia.com> | 2012-05-09 16:38:54 +0200 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-05-11 01:42:02 +0200 |
commit | 2b39093d2f811a1d6593fcbbfdc7ead993d68f59 (patch) | |
tree | 4c7159f2c59c8ea6303ff794668b874429298bf6 /src/platformsupport/fontdatabases | |
parent | 954c2f4cf1466ac7a8d9be2ea20dc0e4aeb53c7a (diff) |
Do not use charset loaded by fontconfig
The only use for storing charset loaded by fontconfig in font engines
is for determine if a font supports certain codepoint, however FreeType
already does that. The charset loaded is sometimes not complete, for
instance in fontconfig 2.9.0 it removed Apple Roman platform support
for cmap loading, thus results a regression in common symbol fonts
(Wingdings, Webdings) rendering. Because those symbol fonts produced
by Monotype only contain two cmap tables: Apple Roman and Microsoft
Symbol, since the Microsoft Symbol table has a weird 0xF000 offset,
we always fallback to the Apple Roman cmap table.
Removing freetype charset cache also make each font engine consuming
less memory.
Change-Id: I88f3f44981f3a1c517b84809a3f5b834ffff7681
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com>
Diffstat (limited to 'src/platformsupport/fontdatabases')
-rw-r--r-- | src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp | 5 | ||||
-rw-r--r-- | src/platformsupport/fontdatabases/fontconfig/qfontenginemultifontconfig.cpp | 14 |
2 files changed, 4 insertions, 15 deletions
diff --git a/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp b/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp index d995ffbbad..86a01d8f3b 100644 --- a/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp +++ b/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp @@ -517,7 +517,6 @@ QFontEngine *QFontconfigDatabase::fontEngine(const QFontDef &f, QUnicodeTables:: FcResult result; FcPattern *match = FcFontMatch(0, pattern, &result); - FcCharSet *charset; if (match) { QFontEngineFT::HintStyle default_hint_style; if (f.hintingPreference != QFont::PreferDefaultHinting) { @@ -577,7 +576,6 @@ QFontEngine *QFontconfigDatabase::fontEngine(const QFontDef &f, QUnicodeTables:: } else format = QFontEngineFT::Format_Mono; - FcPatternGetCharSet(match, FC_CHARSET, 0, &charset); FcPatternDestroy(match); } else format = antialias ? QFontEngineFT::Format_A8 : QFontEngineFT::Format_Mono; @@ -600,9 +598,6 @@ QFontEngine *QFontconfigDatabase::fontEngine(const QFontDef &f, QUnicodeTables:: } } - if (engine && engine->freetype && !engine->freetype->charset) - engine->freetype->charset = FcCharSetCopy(charset); - return engine; } diff --git a/src/platformsupport/fontdatabases/fontconfig/qfontenginemultifontconfig.cpp b/src/platformsupport/fontdatabases/fontconfig/qfontenginemultifontconfig.cpp index 31828ef01f..153c452b04 100644 --- a/src/platformsupport/fontdatabases/fontconfig/qfontenginemultifontconfig.cpp +++ b/src/platformsupport/fontdatabases/fontconfig/qfontenginemultifontconfig.cpp @@ -61,18 +61,12 @@ QFontEngineMultiFontConfig::~QFontEngineMultiFontConfig() bool QFontEngineMultiFontConfig::shouldLoadFontEngineForCharacter(int at, uint ucs4) const { - QFontEngineFT *fontEngine = static_cast<QFontEngineFT *>(engines.at(at)); bool charSetHasChar = true; - if (fontEngine != 0) { - FcCharSet *charSet = fontEngine->freetype->charset; + FcPattern *matchPattern = getMatchPatternForFallback(at - 1); + if (matchPattern != 0) { + FcCharSet *charSet; + FcPatternGetCharSet(matchPattern, FC_CHARSET, 0, &charSet); charSetHasChar = FcCharSetHasChar(charSet, ucs4); - } else { - FcPattern *matchPattern = getMatchPatternForFallback(at - 1); - if (matchPattern != 0) { - FcCharSet *charSet; - FcPatternGetCharSet(matchPattern, FC_CHARSET, 0, &charSet); - charSetHasChar = FcCharSetHasChar(charSet, ucs4); - } } return charSetHasChar; |