Q_ASSERT(QVariant::nameToType("UiStyle::FormatList") != QVariant::Invalid);
}
+ _defaultFont = QFont("Monospace", QApplication::font().pointSize());
+
// Default format
_defaultPlainFormat.setForeground(QBrush("#000000"));
- _defaultPlainFormat.setFont(QFont("Monospace", QApplication::font().pointSize()));
+ _defaultPlainFormat.setFont(_defaultFont);
_defaultPlainFormat.font().setFixedPitch(true);
_defaultPlainFormat.font().setStyleHint(QFont::TypeWriter);
setFormat(None, _defaultPlainFormat, Settings::Default);
}
UiStyle::~ UiStyle() {
-
+ qDeleteAll(_cachedFontMetrics);
}
void UiStyle::setFormat(FormatType ftype, QTextCharFormat fmt, Settings::Mode mode) {
// NOTE: This function is intimately tied to the values in FormatType. Don't change this
// until you _really_ know what you do!
QTextCharFormat UiStyle::mergedFormat(quint32 ftype) {
- if(_cachedFormats.contains(ftype)) return _cachedFormats[ftype];
+ if(_cachedFormats.contains(ftype)) return _cachedFormats.value(ftype);
if(ftype == Invalid) return QTextCharFormat();
// Now we construct the merged format, starting with the default
QTextCharFormat fmt = format(None);
if(ftype & 0x00800000) fmt.merge(format((FormatType)(ftype & 0xf0800000))); // background
// URL
if(ftype & Url) fmt.merge(format(Url));
- _cachedFormats[ftype] = fmt;
- return fmt;
+ return _cachedFormats[ftype] = fmt;
+}
+
+QFontMetricsF *UiStyle::fontMetrics(quint32 ftype) {
+ // QFontMetricsF is not assignable, so we need to store pointers :/
+ if(_cachedFontMetrics.contains(ftype)) return _cachedFontMetrics.value(ftype);
+ return (_cachedFontMetrics[ftype] = new QFontMetricsF(mergedFormat(ftype).font()));
}
UiStyle::FormatType UiStyle::formatType(const QString & code) const {
#define _UISTYLE_H_
#include <QDataStream>
+#include <QFontMetricsF>
#include <QTextCharFormat>
#include <QTextLayout>
#include <QUrl>
void setFormat(FormatType, QTextCharFormat, Settings::Mode mode/* = Settings::Custom*/);
QTextCharFormat format(FormatType, Settings::Mode mode = Settings::Custom) const;
QTextCharFormat mergedFormat(quint32 formatType);
+ QFontMetricsF *fontMetrics(quint32 formatType);
FormatType formatType(const QString &code) const;
QString formatCode(FormatType) const;
+ inline QFont defaultFont() const { return _defaultFont; }
+
protected:
private:
QString mircToInternal(const QString &);
+ QFont _defaultFont;
QTextCharFormat _defaultPlainFormat;
QHash<FormatType, QTextCharFormat> _defaultFormats;
QHash<FormatType, QTextCharFormat> _customFormats;
QHash<quint32, QTextCharFormat> _cachedFormats;
+ QHash<quint32, QFontMetricsF *> _cachedFontMetrics;
QHash<QString, FormatType> _formatCodes;
QString _settingsKey;