diff options
Diffstat (limited to 'src/gui/text')
-rw-r--r-- | src/gui/text/qfontdatabase.cpp | 85 | ||||
-rw-r--r-- | src/gui/text/qfontengine.cpp | 14 | ||||
-rw-r--r-- | src/gui/text/qfontmetrics.cpp | 5 | ||||
-rw-r--r-- | src/gui/text/qplatformfontdatabase.cpp | 14 | ||||
-rw-r--r-- | src/gui/text/qtextdocument.cpp | 3 |
5 files changed, 85 insertions, 36 deletions
diff --git a/src/gui/text/qfontdatabase.cpp b/src/gui/text/qfontdatabase.cpp index 0b0940855d..80908122a8 100644 --- a/src/gui/text/qfontdatabase.cpp +++ b/src/gui/text/qfontdatabase.cpp @@ -72,12 +72,14 @@ QT_BEGIN_NAMESPACE #define SMOOTH_SCALABLE 0xffff +#if defined(QT_BUILD_INTERNAL) bool qt_enable_test_font = false; Q_AUTOTEST_EXPORT void qt_setQtEnableTestFont(bool value) { qt_enable_test_font = value; } +#endif static int getFontWeight(const QString &weightString) { @@ -756,7 +758,47 @@ QString qt_resolveFontFamilyAlias(const QString &alias) return alias; } -static QStringList fallbackFamilies(const QString &family, QFont::Style style, QFont::StyleHint styleHint, QChar::Script script) +QStringList QPlatformFontDatabase::fallbacksForFamily(const QString &family, QFont::Style style, QFont::StyleHint styleHint, QChar::Script script) const +{ + Q_UNUSED(family); + Q_UNUSED(styleHint); + + QStringList retList; + + size_t writingSystem = std::find(scriptForWritingSystem, + scriptForWritingSystem + QFontDatabase::WritingSystemsCount, + script) - scriptForWritingSystem; + if (writingSystem >= QFontDatabase::WritingSystemsCount) + writingSystem = QFontDatabase::Any; + + QFontDatabasePrivate *db = privateDb(); + for (int i = 0; i < db->count; ++i) { + QtFontFamily *f = db->families[i]; + + f->ensurePopulated(); + + if (writingSystem > QFontDatabase::Any && f->writingSystems[writingSystem] != QtFontFamily::Supported) + continue; + + for (int j = 0; j < f->count; ++j) { + QtFontFoundry *foundry = f->foundries[j]; + + for (int k = 0; k < foundry->count; ++k) { + if (style == foundry->styles[k]->key.style) { + if (foundry->name.isEmpty()) + retList.append(f->name); + else + retList.append(f->name + QLatin1String(" [") + foundry->name + QLatin1Char(']')); + break; + } + } + } + } + + return retList; +} + +QStringList qt_fallbacksForFamily(const QString &family, QFont::Style style, QFont::StyleHint styleHint, QChar::Script script) { // make sure that the db has all fallback families QStringList retList = QGuiApplicationPrivate::platformIntegration()->fontDatabase()->fallbacksForFamily(family,style,styleHint,script); @@ -884,17 +926,19 @@ QFontEngine *loadEngine(int script, const QFontDef &request, QFontEngine *engine = loadSingleEngine(script, request, family, foundry, style, size); Q_ASSERT(!engine || engine->type() != QFontEngine::Multi); if (engine && !(request.styleStrategy & QFont::NoFontMerging) && !engine->symbol) { - QStringList fallbacks = request.fallBackFamilies; + QPlatformFontDatabase *pfdb = QGuiApplicationPrivate::platformIntegration()->fontDatabase(); + QFontEngineMulti *pfMultiEngine = pfdb->fontEngineMulti(engine, QChar::Script(script)); + if (!request.fallBackFamilies.isEmpty()) { + QStringList fallbacks = request.fallBackFamilies; - QFont::StyleHint styleHint = QFont::StyleHint(request.styleHint); - if (styleHint == QFont::AnyStyle && request.fixedPitch) - styleHint = QFont::TypeWriter; + QFont::StyleHint styleHint = QFont::StyleHint(request.styleHint); + if (styleHint == QFont::AnyStyle && request.fixedPitch) + styleHint = QFont::TypeWriter; - fallbacks += fallbackFamilies(family->name, QFont::Style(style->key.style), styleHint, QChar::Script(script)); + fallbacks += qt_fallbacksForFamily(family->name, QFont::Style(style->key.style), styleHint, QChar::Script(script)); - QPlatformFontDatabase *pfdb = QGuiApplicationPrivate::platformIntegration()->fontDatabase(); - QFontEngineMulti *pfMultiEngine = pfdb->fontEngineMulti(engine, QChar::Script(script)); - pfMultiEngine->setFallbackFamiliesList(fallbacks); + pfMultiEngine->setFallbackFamiliesList(fallbacks); + } engine = pfMultiEngine; // Cache Multi font engine as well in case we got the single @@ -2527,6 +2571,15 @@ QFontEngine *QFontDatabase::findFont(const QFontDef &request, int script) QFontEngine *engine; +#if defined(QT_BUILD_INTERNAL) + // For testing purpose only, emulates an exact-matching monospace font + if (qt_enable_test_font && request.family == QLatin1String("__Qt__Box__Engine__")) { + engine = new QTestFontEngine(request.pixelSize); + engine->fontDef = request; + return engine; + } +#endif + // Until we specifically asked not to, try looking for Multi font engine // first, the last '1' indicates that we want Multi font engine instead // of single ones @@ -2542,12 +2595,6 @@ QFontEngine *QFontDatabase::findFont(const QFontDef &request, int script) parseFontName(request.family, foundry_name, family_name); - if (qt_enable_test_font && request.family == QLatin1String("__Qt__Box__Engine__")) { - engine =new QTestFontEngine(request.pixelSize); - engine->fontDef = request; - return engine; - } - QtFontDesc desc; QList<int> blackListed; int index = match(script, request, family_name, foundry_name, &desc, blackListed); @@ -2568,10 +2615,10 @@ QFontEngine *QFontDatabase::findFont(const QFontDef &request, int script) styleHint = QFont::TypeWriter; QStringList fallbacks = request.fallBackFamilies - + fallbackFamilies(request.family, - QFont::Style(request.style), - styleHint, - QChar::Script(script)); + + qt_fallbacksForFamily(request.family, + QFont::Style(request.style), + styleHint, + QChar::Script(script)); if (script > QChar::Script_Common) fallbacks += QString(); // Find the first font matching the specified script. diff --git a/src/gui/text/qfontengine.cpp b/src/gui/text/qfontengine.cpp index 6f5d178655..f9d924d10a 100644 --- a/src/gui/text/qfontengine.cpp +++ b/src/gui/text/qfontengine.cpp @@ -1590,15 +1590,15 @@ QFontEngineMulti::~QFontEngineMulti() } } +QStringList qt_fallbacksForFamily(const QString &family, QFont::Style style, QFont::StyleHint styleHint, QChar::Script script); + void QFontEngineMulti::ensureFallbackFamiliesQueried() { - if (QPlatformIntegration *integration = QGuiApplicationPrivate::platformIntegration()) { - const QStringList fallbackFamilies = integration->fontDatabase()->fallbacksForFamily(fontDef.family, - QFont::Style(fontDef.style), - QFont::AnyStyle, - QChar::Script(m_script)); - setFallbackFamiliesList(fallbackFamilies); - } + QFont::StyleHint styleHint = QFont::StyleHint(fontDef.styleHint); + if (styleHint == QFont::AnyStyle && fontDef.fixedPitch) + styleHint = QFont::TypeWriter; + + setFallbackFamiliesList(qt_fallbacksForFamily(fontDef.family, QFont::Style(fontDef.style), styleHint, QChar::Script(m_script))); } void QFontEngineMulti::setFallbackFamiliesList(const QStringList &fallbackFamilies) diff --git a/src/gui/text/qfontmetrics.cpp b/src/gui/text/qfontmetrics.cpp index e351d4d2c5..5bc9fe3c7f 100644 --- a/src/gui/text/qfontmetrics.cpp +++ b/src/gui/text/qfontmetrics.cpp @@ -208,6 +208,11 @@ QFontMetrics &QFontMetrics::operator=(const QFontMetrics &fm) \since 5.2 */ +/*! + \fn QFontMetricsF &QFontMetricsF::operator=(QFontMetricsF &&other) + + Move-assigns \a other to this QFontMetricsF instance. +*/ /*! \fn void QFontMetrics::swap(QFontMetrics &other) diff --git a/src/gui/text/qplatformfontdatabase.cpp b/src/gui/text/qplatformfontdatabase.cpp index 482495302b..0695c2eff4 100644 --- a/src/gui/text/qplatformfontdatabase.cpp +++ b/src/gui/text/qplatformfontdatabase.cpp @@ -346,17 +346,15 @@ QFontEngine *QPlatformFontDatabase::fontEngine(const QByteArray &fontData, qreal } /*! + \fn QStringList QPlatformFontDatabase::fallbacksForFamily(const QString &family, QFont::Style style, QFont::StyleHint styleHint, QChar::Script script) const + Returns a list of alternative fonts for the specified \a family and \a style and \a script using the \a styleHint given. + + Default implementation returns a list of fonts for which \a style and \a script support + has been reported during the font database population. */ -QStringList QPlatformFontDatabase::fallbacksForFamily(const QString &family, QFont::Style style, QFont::StyleHint styleHint, QChar::Script script) const -{ - Q_UNUSED(family); - Q_UNUSED(style); - Q_UNUSED(styleHint); - Q_UNUSED(script); - return QStringList(); -} +// implemented in qfontdatabase.cpp /*! Adds an application font described by the font contained supplied \a fontData diff --git a/src/gui/text/qtextdocument.cpp b/src/gui/text/qtextdocument.cpp index 40cca77c26..0affd3239d 100644 --- a/src/gui/text/qtextdocument.cpp +++ b/src/gui/text/qtextdocument.cpp @@ -135,9 +135,8 @@ bool Qt::mightBeRichText(const QString& text) return false; } -/*! - \fn QString Qt::convertFromPlainText(const QString &plain, WhiteSpaceMode mode) +/*! Converts the plain text string \a plain to an HTML-formatted paragraph while preserving most of its look. |