diff options
-rw-r--r-- | src/gui/text/qfont_p.h | 22 | ||||
-rw-r--r-- | src/gui/text/qfontdatabase.cpp | 6 |
2 files changed, 20 insertions, 8 deletions
diff --git a/src/gui/text/qfont_p.h b/src/gui/text/qfont_p.h index 6165554388..b78d6692b4 100644 --- a/src/gui/text/qfont_p.h +++ b/src/gui/text/qfont_p.h @@ -228,22 +228,32 @@ public: void clear(); struct Key { - Key() : script(0), screen(0) { } - Key(const QFontDef &d, int c, int s = 0) - : def(d), script(c), screen(s) { } + Key() : script(0), multi(0), screen(0) { } + Key(const QFontDef &d, uchar c, bool m = 0, uchar s = 0) + : def(d), script(c), multi(m), screen(s) { } QFontDef def; - int script; - int screen; + uchar script; + uchar multi: 1; + uchar screen: 7; inline bool operator<(const Key &other) const { if (script != other.script) return script < other.script; if (screen != other.screen) return screen < other.screen; + if (multi != other.multi) return multi < other.multi; + if (multi && def.fallBackFamilies.size() != other.def.fallBackFamilies.size()) + return def.fallBackFamilies.size() < other.def.fallBackFamilies.size(); return def < other.def; } inline bool operator==(const Key &other) const - { return def == other.def && script == other.script && screen == other.screen; } + { + return script == other.script + && screen == other.screen + && multi == other.multi + && (!multi || def.fallBackFamilies.size() == other.def.fallBackFamilies.size()) + && def == other.def; + } }; // QFontEngineData cache diff --git a/src/gui/text/qfontdatabase.cpp b/src/gui/text/qfontdatabase.cpp index 1dfccca57c..3c2cf4fdcf 100644 --- a/src/gui/text/qfontdatabase.cpp +++ b/src/gui/text/qfontdatabase.cpp @@ -824,9 +824,11 @@ QFontEngine *loadEngine(int script, const QFontDef &request, family->askedForFallback = true; } - QStringList fallbacks = privateDb()->fallbackFamilies; + QStringList fallbacks = request.fallBackFamilies; if (family && !family->fallbackFamilies.isEmpty()) - fallbacks = family->fallbackFamilies; + fallbacks += family->fallbackFamilies; + else + fallbacks += privateDb()->fallbackFamilies; QPlatformFontDatabase *pfdb = QGuiApplicationPrivate::platformIntegration()->fontDatabase(); QFontEngineMulti *pfMultiEngine = pfdb->fontEngineMulti(engine, QChar::Script(script)); |