diff options
author | Miikka Heikkinen <miikka.heikkinen@digia.com> | 2012-03-30 14:23:36 +0300 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-04-10 12:49:34 +0200 |
commit | ef4783d2978ec5edf1b90ef5a13467c6c9ee3df6 (patch) | |
tree | 94a5ec1ae57db8aadf7a1a3a5c3ab4a957b8c98d /src | |
parent | a159ca80d73f07d617d6edd9b3e59bda25449a1c (diff) |
Make it possible to enable non-scalable font scaling
Windows native font engine supports scaling of non-scalalble fonts, so
make it possible to do so.
Added two functions to QPlatformFontDatabase: fontsAlwaysScalable() and
standardSizes(), and made fontsAlwaysScalable() to return true for
Windows native font database.
Windows Freetype font engine doesn't seem to support scaling of
non-scalable fonts, so didn't enable it in there.
Added implementation of standardSizes() for Mac OS.
Task-number: QTBUG-24970
Change-Id: I41c9356ede8a37b7c61db94340dbeb5b629f34b9
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com>
Reviewed-by: Bradley T. Hughes <bradley.hughes@nokia.com>
Reviewed-by: Jiang Jiang <jiang.jiang@nokia.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/gui/text/qfontdatabase.cpp | 22 | ||||
-rw-r--r-- | src/gui/text/qfontdatabase_qpa.cpp | 6 | ||||
-rw-r--r-- | src/gui/text/qplatformfontdatabase_qpa.cpp | 29 | ||||
-rw-r--r-- | src/gui/text/qplatformfontdatabase_qpa.h | 2 | ||||
-rw-r--r-- | src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm | 11 | ||||
-rw-r--r-- | src/platformsupport/fontdatabases/mac/qcoretextfontdatabase_p.h | 2 | ||||
-rw-r--r-- | src/plugins/platforms/windows/qwindowsfontdatabase.cpp | 5 | ||||
-rw-r--r-- | src/plugins/platforms/windows/qwindowsfontdatabase.h | 2 |
8 files changed, 67 insertions, 12 deletions
diff --git a/src/gui/text/qfontdatabase.cpp b/src/gui/text/qfontdatabase.cpp index 468d029cf2..a1af856992 100644 --- a/src/gui/text/qfontdatabase.cpp +++ b/src/gui/text/qfontdatabase.cpp @@ -735,12 +735,13 @@ static void initFontDef(const QtFontDesc &desc, const QFontDef &request, QFontDe fontDef->family += QLatin1Char(']'); } - if (desc.style->smoothScalable) + if (desc.style->smoothScalable + || QGuiApplicationPrivate::platformIntegration()->fontDatabase()->fontsAlwaysScalable() + || (desc.style->bitmapScalable && (request.styleStrategy & QFont::PreferMatch))) { fontDef->pixelSize = request.pixelSize; - else if ((desc.style->bitmapScalable && (request.styleStrategy & QFont::PreferMatch))) - fontDef->pixelSize = request.pixelSize; - else + } else { fontDef->pixelSize = desc.size->pixelSize; + } fontDef->styleHint = request.styleHint; fontDef->styleStrategy = request.styleStrategy; @@ -1534,6 +1535,9 @@ bool QFontDatabase::isScalable(const QString &family, QList<int> QFontDatabase::pointSizes(const QString &family, const QString &styleName) { + if (QGuiApplicationPrivate::platformIntegration()->fontDatabase()->fontsAlwaysScalable()) + return standardSizes(); + bool smoothScalable = false; QString familyName, foundryName; parseFontName(family, foundryName, familyName); @@ -1634,6 +1638,9 @@ QFont QFontDatabase::font(const QString &family, const QString &style, QList<int> QFontDatabase::smoothSizes(const QString &family, const QString &styleName) { + if (QGuiApplicationPrivate::platformIntegration()->fontDatabase()->fontsAlwaysScalable()) + return standardSizes(); + bool smoothScalable = false; QString familyName, foundryName; parseFontName(family, foundryName, familyName); @@ -1689,12 +1696,7 @@ QList<int> QFontDatabase::smoothSizes(const QString &family, */ QList<int> QFontDatabase::standardSizes() { - QList<int> ret; - static const unsigned short standard[] = - { 6, 7, 8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 26, 28, 36, 48, 72, 0 }; - const unsigned short *sizes = standard; - while (*sizes) ret << *sizes++; - return ret; + return QGuiApplicationPrivate::platformIntegration()->fontDatabase()->standardSizes(); } diff --git a/src/gui/text/qfontdatabase_qpa.cpp b/src/gui/text/qfontdatabase_qpa.cpp index 0014efc450..c2a3aa9722 100644 --- a/src/gui/text/qfontdatabase_qpa.cpp +++ b/src/gui/text/qfontdatabase_qpa.cpp @@ -161,9 +161,12 @@ QFontEngine *loadSingleEngine(int script, Q_UNUSED(foundry); Q_ASSERT(size); + QPlatformFontDatabase *pfdb = QGuiApplicationPrivate::platformIntegration()->fontDatabase(); int pixelSize = size->pixelSize; - if (!pixelSize || (style->smoothScalable && pixelSize == SMOOTH_SCALABLE)) + if (!pixelSize || (style->smoothScalable && pixelSize == SMOOTH_SCALABLE) + || pfdb->fontsAlwaysScalable()) { pixelSize = request.pixelSize; + } QFontDef def = request; def.pixelSize = pixelSize; @@ -171,7 +174,6 @@ QFontEngine *loadSingleEngine(int script, QFontCache::Key key(def,script); QFontEngine *engine = QFontCache::instance()->findEngine(key); if (!engine) { - QPlatformFontDatabase *pfdb = QGuiApplicationPrivate::platformIntegration()->fontDatabase(); engine = pfdb->fontEngine(def,QUnicodeTables::Script(script),size->handle); if (engine) { QFontCache::Key key(def,script); diff --git a/src/gui/text/qplatformfontdatabase_qpa.cpp b/src/gui/text/qplatformfontdatabase_qpa.cpp index 6af0398f00..f6d82802f7 100644 --- a/src/gui/text/qplatformfontdatabase_qpa.cpp +++ b/src/gui/text/qplatformfontdatabase_qpa.cpp @@ -385,6 +385,35 @@ QString QPlatformFontDatabase::resolveFontFamilyAlias(const QString &family) con } /*! + Return true if all fonts are considered scalable when using this font database. + Defaults to false. + + \since 5.0 + */ + +bool QPlatformFontDatabase::fontsAlwaysScalable() const +{ + return false; +} + +/*! + Return list of standard font sizes when using this font database. + + \since 5.0 + */ + + QList<int> QPlatformFontDatabase::standardSizes() const +{ + QList<int> ret; + static const unsigned short standard[] = + { 6, 7, 8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 26, 28, 36, 48, 72, 0 }; + ret.reserve(int(sizeof(standard) / sizeof(standard[0]))); + const unsigned short *sizes = standard; + while (*sizes) ret << *sizes++; + return ret; +} + +/*! \class QPlatformFontDatabase \brief The QPlatformFontDatabase class makes it possible to customize how fonts are discovered and how they are rendered diff --git a/src/gui/text/qplatformfontdatabase_qpa.h b/src/gui/text/qplatformfontdatabase_qpa.h index 3810b75dbf..9fe3b0380d 100644 --- a/src/gui/text/qplatformfontdatabase_qpa.h +++ b/src/gui/text/qplatformfontdatabase_qpa.h @@ -102,6 +102,8 @@ public: virtual QFont defaultFont() const; virtual QString resolveFontFamilyAlias(const QString &family) const; + virtual bool fontsAlwaysScalable() const; + virtual QList<int> standardSizes() const; //callback static void registerQPF2Font(const QByteArray &dataArray, void *handle); diff --git a/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm b/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm index c42320889a..4063a9ec91 100644 --- a/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm +++ b/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm @@ -393,5 +393,16 @@ QFont QCoreTextFontDatabase::defaultFont() const return QFont(defaultFontName); } +QList<int> QCoreTextFontDatabase::standardSizes() const +{ + QList<int> ret; + static const unsigned short standard[] = + { 9, 10, 11, 12, 13, 14, 18, 24, 36, 48, 64, 72, 96, 144, 288, 0 }; + ret.reserve(int(sizeof(standard) / sizeof(standard[0]))); + const unsigned short *sizes = standard; + while (*sizes) ret << *sizes++; + return ret; +} + QT_END_NAMESPACE diff --git a/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase_p.h b/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase_p.h index adcfeebf0b..556b176b07 100644 --- a/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase_p.h +++ b/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase_p.h @@ -58,6 +58,8 @@ public: QStringList addApplicationFont(const QByteArray &fontData, const QString &fileName); void releaseHandle(void *handle); QFont defaultFont() const; + QList<int> standardSizes() const; + private: mutable QString defaultFontName; QHash<QFont::StyleHint, QStringList> fallbackLists; diff --git a/src/plugins/platforms/windows/qwindowsfontdatabase.cpp b/src/plugins/platforms/windows/qwindowsfontdatabase.cpp index 3fc40f49ac..979b2a028b 100644 --- a/src/plugins/platforms/windows/qwindowsfontdatabase.cpp +++ b/src/plugins/platforms/windows/qwindowsfontdatabase.cpp @@ -900,6 +900,11 @@ QString QWindowsFontDatabase::fontDir() const return result; } +bool QWindowsFontDatabase::fontsAlwaysScalable() const +{ + return true; +} + HFONT QWindowsFontDatabase::systemFont() { static const HFONT stock_sysfont = (HFONT)GetStockObject(SYSTEM_FONT); diff --git a/src/plugins/platforms/windows/qwindowsfontdatabase.h b/src/plugins/platforms/windows/qwindowsfontdatabase.h index 2fa615253e..3921992775 100644 --- a/src/plugins/platforms/windows/qwindowsfontdatabase.h +++ b/src/plugins/platforms/windows/qwindowsfontdatabase.h @@ -86,6 +86,8 @@ public: virtual QString fontDir() const; virtual QFont defaultFont() const { return systemDefaultFont(); } + virtual bool fontsAlwaysScalable() const; + static QFont systemDefaultFont(); static QFontEngine *createEngine(int script, const QFontDef &request, |