Something went wrong. Try again.
The agentic engineering control plane for the posthuman future
Something went wrong. Try again.
2.3 kB · 74 lines
C++
at main
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475#include "FontCatalog.h"
#include <QFontDatabase>#include <QVariantMap>
#include <array>#include <cmath>
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<int> FontCatalog::standardSizes() const { return m_standardSizes;}
namespace {struct WeightEntry { QFont::Weight weight; const char* name;};constexpr std::array<WeightEntry, 9> 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<int>(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<int>(entry.weight)) < std::abs(weight - static_cast<int>(best->weight))) { best = &entry; } } return QString::fromLatin1(best->name);}