Help/litehtml: Fix resolution of font name

- check case-insensitively
- need to break after the first font was found in database

Change-Id: Iddd58ec88d61b2506965a618441205e8176e383f
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
Eike Ziller
2019-09-05 15:00:17 +02:00
parent db4cc731bb
commit a1d21fb8fe

View File

@@ -40,6 +40,7 @@
#include <QUrl>
#include <algorithm>
#include <set>
const int kDragDistance = 5;
@@ -453,11 +454,24 @@ litehtml::uint_ptr DocumentContainer::create_font(const litehtml::tchar_t *faceN
#if (QT_VERSION >= QT_VERSION_CHECK(5, 13, 0))
font->setFamilies(familyNames);
#else
static const auto knownFamilies = QFontDatabase().families().toSet();
struct CompareCaseinsensitive
{
bool operator()(const QString &a, const QString &b) const
{
return a.compare(b, Qt::CaseInsensitive) < 0;
}
};
static const QStringList known = QFontDatabase().families();
static const std::set<QString, CompareCaseinsensitive> knownFamilies(known.cbegin(),
known.cend());
font->setFamily(familyNames.last());
for (const QString &name : qAsConst(familyNames))
if (knownFamilies.contains(name))
font->setFamily(name);
for (const QString &name : qAsConst(familyNames)) {
const auto found = knownFamilies.find(name);
if (found != knownFamilies.end()) {
font->setFamily(*found);
break;
}
}
#endif
font->setPixelSize(size);
font->setWeight(cssWeightToQtWeight(weight));