From a1d21fb8febed4c1a8097620188b65d7c9e0d8fb Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Thu, 5 Sep 2019 15:00:17 +0200 Subject: [PATCH] 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 --- .../help/qlitehtml/container_qpainter.cpp | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/plugins/help/qlitehtml/container_qpainter.cpp b/src/plugins/help/qlitehtml/container_qpainter.cpp index aa44428750b..3426d098c29 100644 --- a/src/plugins/help/qlitehtml/container_qpainter.cpp +++ b/src/plugins/help/qlitehtml/container_qpainter.cpp @@ -40,6 +40,7 @@ #include #include +#include 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 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));