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>bb10
parent
a159ca80d7
commit
ef4783d297
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -384,6 +384,35 @@ QString QPlatformFontDatabase::resolveFontFamilyAlias(const QString &family) con
|
|||
return family;
|
||||
}
|
||||
|
||||
/*!
|
||||
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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Reference in New Issue