diff --git a/src/gui/text/freetype/qfreetypefontdatabase.cpp b/src/gui/text/freetype/qfreetypefontdatabase.cpp index fd02b806195..e941614b4fa 100644 --- a/src/gui/text/freetype/qfreetypefontdatabase.cpp +++ b/src/gui/text/freetype/qfreetypefontdatabase.cpp @@ -55,7 +55,7 @@ QFontEngine *QFreeTypeFontDatabase::fontEngine(const QFontDef &fontDef, void *us faceId.filename = QFile::encodeName(fontfile->fileName); faceId.index = fontfile->indexValue; - return QFontEngineFT::create(fontDef, faceId); + return QFontEngineFT::create(fontDef, faceId, fontfile->data); } QFontEngine *QFreeTypeFontDatabase::fontEngine(const QByteArray &fontData, qreal pixelSize, @@ -191,9 +191,11 @@ QStringList QFreeTypeFontDatabase::addTTFile(const QByteArray &fontData, const Q } QString family = QString::fromLatin1(face->family_name); - FontFile *fontFile = new FontFile; - fontFile->fileName = QFile::decodeName(file); - fontFile->indexValue = index; + FontFile *fontFile = new FontFile{ + QFile::decodeName(file), + index, + fontData + }; QString styleName = QString::fromLatin1(face->style_name); diff --git a/src/gui/text/freetype/qfreetypefontdatabase_p.h b/src/gui/text/freetype/qfreetypefontdatabase_p.h index f9ad0824b96..ffb10a2e5c9 100644 --- a/src/gui/text/freetype/qfreetypefontdatabase_p.h +++ b/src/gui/text/freetype/qfreetypefontdatabase_p.h @@ -26,6 +26,11 @@ struct FontFile { QString fileName; int indexValue; + + // Note: The data may be implicitly shared throughout the + // font database and platform font database, so be careful + // to never detach when accessing this member! + const QByteArray data; }; class Q_GUI_EXPORT QFreeTypeFontDatabase : public QPlatformFontDatabase diff --git a/src/gui/text/qfontdatabase_p.h b/src/gui/text/qfontdatabase_p.h index b40a651bbb3..5428e18071f 100644 --- a/src/gui/text/qfontdatabase_p.h +++ b/src/gui/text/qfontdatabase_p.h @@ -207,6 +207,10 @@ public: QCache fallbacksCache; struct ApplicationFont { QString fileName; + + // Note: The data may be implicitly shared throughout the + // font database and platform font database, so be careful + // to never detach when accessing this member! QByteArray data; bool isNull() const { return fileName.isEmpty(); }