Fix application font loading in basic font db

ISSUE: 460 (http://code.google.com/p/phantomjs/issues/detail?id=460)

this is a backport from qtbase:

commit 89cfe9eb01ad75c14121dbd6038b7c791226acf1
Author: Jiang Jiang <jiang.jiang@nokia.com>
Date:   Thu Nov 10 18:01:56 2011 +0100

    We need to reregister fonts in initializeDb because basic font db
    doesn't have an internal record like fontconfig does, so just
    repopulating the font database won't work. db->reregisterAppFonts
    is now used properly as intended (reregister application fonts
    after the system font database has been cleared).

    Also, static variable 'initialized' in initializeDb() is removed
    since we check privateDb()->count to see if it needs to be populated
    again.

    Task-number: QTBUG-22063

    Change-Id: Ifc66392b56b72acbe08b99256c61421c204be5d7
    Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com>
1.6
Milian Wolff 2012-05-03 18:16:14 +02:00
parent bf029ae65a
commit 4669c16e64
1 changed files with 15 additions and 5 deletions

View File

@ -103,14 +103,22 @@ static QStringList fallbackFamilies(const QString &family, const QFont::Style &s
return retList;
}
static void registerFont(QFontDatabasePrivate::ApplicationFont *fnt);
static void initializeDb()
{
static int initialized = false;
QFontDatabasePrivate *db = privateDb();
if (!initialized) {
//init by asking for the platformfontdb for the first time :)
// init by asking for the platformfontdb for the first time or after invalidation
if (!db->count)
QApplicationPrivate::platformIntegration()->fontDatabase()->populateFontDatabase();
initialized = true;
if (db->reregisterAppFonts) {
for (int i = 0; i < db->applicationFonts.count(); i++) {
if (!db->applicationFonts.at(i).families.isEmpty())
registerFont(&db->applicationFonts[i]);
}
db->reregisterAppFonts = false;
}
}
@ -133,7 +141,9 @@ void qt_applyFontDatabaseSettings(const QSettings &settings)
static inline void load(const QString & = QString(), int = -1)
{
initializeDb();
// Only initialize the database if it has been cleared or not initialized yet
if (!privateDb()->count)
initializeDb();
}
static