diff options
author | Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io> | 2020-08-06 08:47:37 +0200 |
---|---|---|
committer | Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io> | 2020-08-06 11:43:24 +0200 |
commit | 76068d0114157c6b59523f3fb032cd8de64e9a63 (patch) | |
tree | 2dfe4e31b17ca2768eb7248760a86513128024ea /src/gui/text/qfontdatabase.cpp | |
parent | b7a1bd306443e4f932a96020c1d48418916237ea (diff) |
Make QFontDatabase member functions static
QFontDatabase is a singleton and all instances would share
a single, mutex-protected global data pointer. But some functions
were implemented as non-static functions. This caused a lot
of code on the form
QFontDatabase().families(...)
since there was no static access. Other functions were implemented
as static.
To consolidate, we make all functions static. This should be
source-compatible, but not binary compatible.
[ChangeLog][QtGui][Fonts] Some functions in QFontDatabase were in
principle static, but previously not implemented as such. All
member functions have now been made static, so that constructing
objects of QFontDatabase is no longer necessary to access certain
functionality.
Fixes: QTBUG-83284
Change-Id: Ifd8c15016281c71f631b53387402c942cd9c43f6
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
Diffstat (limited to 'src/gui/text/qfontdatabase.cpp')
-rw-r--r-- | src/gui/text/qfontdatabase.cpp | 67 |
1 files changed, 46 insertions, 21 deletions
diff --git a/src/gui/text/qfontdatabase.cpp b/src/gui/text/qfontdatabase.cpp index 2ec2263321..550215ee64 100644 --- a/src/gui/text/qfontdatabase.cpp +++ b/src/gui/text/qfontdatabase.cpp @@ -1253,12 +1253,6 @@ QString QFontDatabase::styleString(const QFontInfo &fontInfo) */ QFontDatabase::QFontDatabase() { - if (Q_UNLIKELY(!qApp || !QGuiApplicationPrivate::platformIntegration())) - qFatal("QFontDatabase: Must construct a QGuiApplication before accessing QFontDatabase"); - - QMutexLocker locker(fontDatabaseMutex()); - createDatabase(); - d = privateDb(); } /*! @@ -1315,15 +1309,34 @@ QFontDatabase::QFontDatabase() */ /*! + \internal + + Initializes the font database if necessary and returns its + pointer. Mutex lock must be held when calling this function. +*/ +QFontDatabasePrivate *QFontDatabase::ensureFontDatabase() +{ + QFontDatabasePrivate *d = privateDb(); + if (d->count == 0) { + if (Q_UNLIKELY(qGuiApp == nullptr || QGuiApplicationPrivate::platformIntegration() == nullptr)) + qFatal("QFontDatabase: Must construct a QGuiApplication before accessing QFontDatabase"); + + initializeDb(); + } + return d; +} + +/*! Returns a sorted list of the available writing systems. This is list generated from information about all installed fonts on the system. \sa families() */ -QList<QFontDatabase::WritingSystem> QFontDatabase::writingSystems() const +QList<QFontDatabase::WritingSystem> QFontDatabase::writingSystems() { QMutexLocker locker(fontDatabaseMutex()); + QFontDatabasePrivate *d = ensureFontDatabase(); QT_PREPEND_NAMESPACE(load)(); @@ -1361,12 +1374,13 @@ QList<QFontDatabase::WritingSystem> QFontDatabase::writingSystems() const \sa families() */ -QList<QFontDatabase::WritingSystem> QFontDatabase::writingSystems(const QString &family) const +QList<QFontDatabase::WritingSystem> QFontDatabase::writingSystems(const QString &family) { QString familyName, foundryName; parseFontName(family, foundryName, familyName); QMutexLocker locker(fontDatabaseMutex()); + QFontDatabasePrivate *d = ensureFontDatabase(); QT_PREPEND_NAMESPACE(load)(); @@ -1394,9 +1408,10 @@ QList<QFontDatabase::WritingSystem> QFontDatabase::writingSystems(const QString \sa writingSystems() */ -QStringList QFontDatabase::families(WritingSystem writingSystem) const +QStringList QFontDatabase::families(WritingSystem writingSystem) { QMutexLocker locker(fontDatabaseMutex()); + QFontDatabasePrivate *d = ensureFontDatabase(); QT_PREPEND_NAMESPACE(load)(); @@ -1435,12 +1450,13 @@ QStringList QFontDatabase::families(WritingSystem writingSystem) const \sa families() */ -QStringList QFontDatabase::styles(const QString &family) const +QStringList QFontDatabase::styles(const QString &family) { QString familyName, foundryName; parseFontName(family, foundryName, familyName); QMutexLocker locker(fontDatabaseMutex()); + QFontDatabasePrivate *d = ensureFontDatabase(); QT_PREPEND_NAMESPACE(load)(familyName); @@ -1477,7 +1493,7 @@ QStringList QFontDatabase::styles(const QString &family) const */ bool QFontDatabase::isFixedPitch(const QString &family, - const QString &style) const + const QString &style) { Q_UNUSED(style); @@ -1485,6 +1501,7 @@ bool QFontDatabase::isFixedPitch(const QString &family, parseFontName(family, foundryName, familyName); QMutexLocker locker(fontDatabaseMutex()); + QFontDatabasePrivate *d = ensureFontDatabase(); QT_PREPEND_NAMESPACE(load)(familyName); @@ -1503,13 +1520,14 @@ bool QFontDatabase::isFixedPitch(const QString &family, \sa isScalable(), isSmoothlyScalable() */ bool QFontDatabase::isBitmapScalable(const QString &family, - const QString &style) const + const QString &style) { bool bitmapScalable = false; QString familyName, foundryName; parseFontName(family, foundryName, familyName); QMutexLocker locker(fontDatabaseMutex()); + QFontDatabasePrivate *d = ensureFontDatabase(); QT_PREPEND_NAMESPACE(load)(familyName); @@ -1543,13 +1561,14 @@ bool QFontDatabase::isBitmapScalable(const QString &family, \sa isScalable(), isBitmapScalable() */ -bool QFontDatabase::isSmoothlyScalable(const QString &family, const QString &style) const +bool QFontDatabase::isSmoothlyScalable(const QString &family, const QString &style) { bool smoothScalable = false; QString familyName, foundryName; parseFontName(family, foundryName, familyName); QMutexLocker locker(fontDatabaseMutex()); + QFontDatabasePrivate *d = ensureFontDatabase(); QT_PREPEND_NAMESPACE(load)(familyName); @@ -1589,7 +1608,7 @@ bool QFontDatabase::isSmoothlyScalable(const QString &family, const QString &sty \sa isBitmapScalable(), isSmoothlyScalable() */ bool QFontDatabase::isScalable(const QString &family, - const QString &style) const + const QString &style) { QMutexLocker locker(fontDatabaseMutex()); if (isSmoothlyScalable(family, style)) @@ -1605,7 +1624,7 @@ bool QFontDatabase::isScalable(const QString &family, \sa smoothSizes(), standardSizes() */ QList<int> QFontDatabase::pointSizes(const QString &family, - const QString &styleName) + const QString &styleName) { if (QGuiApplicationPrivate::platformIntegration()->fontDatabase()->fontsAlwaysScalable()) return standardSizes(); @@ -1615,6 +1634,7 @@ QList<int> QFontDatabase::pointSizes(const QString &family, parseFontName(family, foundryName, familyName); QMutexLocker locker(fontDatabaseMutex()); + QFontDatabasePrivate *d = ensureFontDatabase(); QT_PREPEND_NAMESPACE(load)(familyName); @@ -1663,12 +1683,13 @@ QList<int> QFontDatabase::pointSizes(const QString &family, returned. */ QFont QFontDatabase::font(const QString &family, const QString &style, - int pointSize) const + int pointSize) { QString familyName, foundryName; parseFontName(family, foundryName, familyName); QMutexLocker locker(fontDatabaseMutex()); + QFontDatabasePrivate *d = ensureFontDatabase(); QT_PREPEND_NAMESPACE(load)(familyName); @@ -1717,6 +1738,7 @@ QList<int> QFontDatabase::smoothSizes(const QString &family, parseFontName(family, foundryName, familyName); QMutexLocker locker(fontDatabaseMutex()); + QFontDatabasePrivate *d = ensureFontDatabase(); QT_PREPEND_NAMESPACE(load)(familyName); @@ -1776,12 +1798,13 @@ QList<int> QFontDatabase::standardSizes() \sa weight(), bold() */ -bool QFontDatabase::italic(const QString &family, const QString &style) const +bool QFontDatabase::italic(const QString &family, const QString &style) { QString familyName, foundryName; parseFontName(family, foundryName, familyName); QMutexLocker locker(fontDatabaseMutex()); + QFontDatabasePrivate *d = ensureFontDatabase(); QT_PREPEND_NAMESPACE(load)(familyName); @@ -1810,12 +1833,13 @@ bool QFontDatabase::italic(const QString &family, const QString &style) const \sa italic(), weight() */ bool QFontDatabase::bold(const QString &family, - const QString &style) const + const QString &style) { QString familyName, foundryName; parseFontName(family, foundryName, familyName); QMutexLocker locker(fontDatabaseMutex()); + QFontDatabasePrivate *d = ensureFontDatabase(); QT_PREPEND_NAMESPACE(load)(familyName); @@ -1846,12 +1870,13 @@ bool QFontDatabase::bold(const QString &family, \sa italic(), bold() */ int QFontDatabase::weight(const QString &family, - const QString &style) const + const QString &style) { QString familyName, foundryName; parseFontName(family, foundryName, familyName); QMutexLocker locker(fontDatabaseMutex()); + QFontDatabasePrivate *d = ensureFontDatabase(); QT_PREPEND_NAMESPACE(load)(familyName); @@ -1875,7 +1900,7 @@ int QFontDatabase::weight(const QString &family, /*! \internal */ -bool QFontDatabase::hasFamily(const QString &family) const +bool QFontDatabase::hasFamily(const QString &family) { QString parsedFamily, foundry; parseFontName(family, foundry, parsedFamily); @@ -1896,7 +1921,7 @@ bool QFontDatabase::hasFamily(const QString &family) const \sa families() */ -bool QFontDatabase::isPrivateFamily(const QString &family) const +bool QFontDatabase::isPrivateFamily(const QString &family) { return QGuiApplicationPrivate::platformIntegration()->fontDatabase()->isPrivateFontFamily(family); } |