1
0
mirror of https://github.com/Swordfish90/cool-retro-term.git synced 2026-02-08 00:32:27 +00:00

Tentative implementation of font handling on cpp side.

This commit is contained in:
Filippo Scognamiglio
2026-01-11 19:28:31 +01:00
parent bd89df3564
commit 60784c47d9
13 changed files with 827 additions and 209 deletions

110
app/fontmanager.h Normal file
View File

@@ -0,0 +1,110 @@
#ifndef FONTMANAGER_H
#define FONTMANAGER_H
#include <QObject>
#include <QStringList>
#include <QHash>
#include <QSet>
#include "fontlistmodel.h"
class FontManager : public QObject
{
Q_OBJECT
Q_PROPERTY(FontListModel *fontList READ fontList CONSTANT)
Q_PROPERTY(FontListModel *filteredFontList READ filteredFontList NOTIFY filteredFontListChanged)
Q_PROPERTY(int fontSource READ fontSource WRITE setFontSource NOTIFY fontSourceChanged)
Q_PROPERTY(int rasterization READ rasterization WRITE setRasterization NOTIFY rasterizationChanged)
Q_PROPERTY(QString fontName READ fontName WRITE setFontName NOTIFY fontNameChanged)
Q_PROPERTY(qreal fontScaling READ fontScaling WRITE setFontScaling NOTIFY fontScalingChanged)
Q_PROPERTY(qreal fontWidth READ fontWidth WRITE setFontWidth NOTIFY fontWidthChanged)
Q_PROPERTY(qreal lineSpacing READ lineSpacing WRITE setLineSpacing NOTIFY lineSpacingChanged)
Q_PROPERTY(qreal baseFontScaling READ baseFontScaling WRITE setBaseFontScaling NOTIFY baseFontScalingChanged)
Q_PROPERTY(bool lowResolutionFont READ lowResolutionFont NOTIFY lowResolutionFontChanged)
public:
explicit FontManager(QObject *parent = nullptr);
Q_INVOKABLE void refresh();
FontListModel *fontList();
FontListModel *filteredFontList();
int fontSource() const;
void setFontSource(int fontSource);
int rasterization() const;
void setRasterization(int rasterization);
QString fontName() const;
void setFontName(const QString &fontName);
qreal fontScaling() const;
void setFontScaling(qreal fontScaling);
qreal fontWidth() const;
void setFontWidth(qreal fontWidth);
qreal lineSpacing() const;
void setLineSpacing(qreal lineSpacing);
qreal baseFontScaling() const;
void setBaseFontScaling(qreal baseFontScaling);
bool lowResolutionFont() const;
signals:
void fontSourceChanged();
void rasterizationChanged();
void fontNameChanged();
void fontScalingChanged();
void fontWidthChanged();
void lineSpacingChanged();
void baseFontScalingChanged();
void lowResolutionFontChanged();
void filteredFontListChanged();
void terminalFontChanged(QString fontFamily,
int pixelSize,
int lineSpacing,
qreal screenScaling,
qreal fontWidth,
QString fallbackFontFamily,
bool lowResolutionFont);
private:
QStringList retrieveMonospaceFonts();
void populateBundledFonts();
void populateSystemFonts();
void addBundledFont(const QString &name,
const QString &text,
const QString &source,
qreal baseWidth,
int pixelSize,
bool lowResolutionFont,
const QString &fallbackName = QString());
void setFontSubstitutions(const QString &family, const QStringList &substitutes);
void removeFontSubstitution(const QString &family);
void updateFilteredFonts();
void updateComputedFont();
const FontEntry *findFontByName(const QString &name) const;
QString resolveFontFamily(const QString &sourcePath);
FontListModel m_fontListModel;
FontListModel m_filteredFontListModel;
QVector<FontEntry> m_allFonts;
int m_fontSource = 0;
int m_rasterization = 0;
QString m_fontName = QStringLiteral("TERMINUS_SCALED");
qreal m_fontScaling = 1.0;
qreal m_fontWidth = 1.0;
qreal m_lineSpacing = 0.1;
qreal m_baseFontScaling = 0.75;
bool m_lowResolutionFont = false;
QHash<QString, QString> m_loadedFamilies;
QSet<QString> m_bundledFamilies;
};
#endif // FONTMANAGER_H