#include "FontCatalog.h" #include #include #include #include FontCatalog::FontCatalog(QObject* parent) : QObject(parent), m_standardSizes(QFontDatabase::standardSizes()) { const QStringList families = QFontDatabase::families(); m_fixedFamilies.reserve(families.size()); for (const QString& family : families) { if (!QFontDatabase::isPrivateFamily(family) && QFontDatabase::isFixedPitch(family)) { m_fixedFamilies.append(family); } } } QStringList FontCatalog::fixedFamilies() const { return m_fixedFamilies; } QString FontCatalog::defaultFixedFamily() const { QString systemFamily = QFontDatabase::systemFont(QFontDatabase::FixedFont).family(); if (m_fixedFamilies.contains(systemFamily)) { return systemFamily; } return m_fixedFamilies.isEmpty() ? QString() : m_fixedFamilies.first(); } QList FontCatalog::standardSizes() const { return m_standardSizes; } namespace { struct WeightEntry { QFont::Weight weight; const char* name; }; constexpr std::array kFontWeights = {{ {.weight=QFont::Thin, .name="Thin"}, {.weight=QFont::ExtraLight, .name="Extra Light"}, {.weight=QFont::Light, .name="Light"}, {.weight=QFont::Normal, .name="Regular"}, {.weight=QFont::Medium, .name="Medium"}, {.weight=QFont::DemiBold, .name="Semi Bold"}, {.weight=QFont::Bold, .name="Bold"}, {.weight=QFont::ExtraBold, .name="Extra Bold"}, {.weight=QFont::Black, .name="Black"}, }}; } // namespace QVariantList FontCatalog::fontWeights() { QVariantList entries; entries.reserve(std::size(kFontWeights)); for (const WeightEntry& entry : kFontWeights) { QVariantMap item; item.insert(QStringLiteral("name"), QString::fromLatin1(entry.name)); item.insert(QStringLiteral("weight"), static_cast(entry.weight)); entries.append(item); } return entries; } QString FontCatalog::fontWeightName(int weight) { // Snap to the nearest known entry so partial/legacy values still label. const WeightEntry* best = kFontWeights.data(); for (const WeightEntry& entry : kFontWeights) { if (std::abs(weight - static_cast(entry.weight)) < std::abs(weight - static_cast(best->weight))) { best = &entry; } } return QString::fromLatin1(best->name); }