From 55049803e1f4215cedaa30935eae4ca2aa5835d2 Mon Sep 17 00:00:00 2001 From: Manuel Nickschas Date: Mon, 3 Aug 2009 23:54:53 +0200 Subject: [PATCH] Don't put loaded formats directly in the format cache Bad... idea. --- src/qtui/chatitem.cpp | 2 +- src/qtui/topiclabel.cpp | 2 +- src/uisupport/uistyle.cpp | 20 ++++++++++---------- src/uisupport/uistyle.h | 13 +++++++------ 4 files changed, 19 insertions(+), 18 deletions(-) diff --git a/src/qtui/chatitem.cpp b/src/qtui/chatitem.cpp index b52fe3f0..1f7e9ac6 100644 --- a/src/qtui/chatitem.cpp +++ b/src/qtui/chatitem.cpp @@ -371,7 +371,7 @@ ContentsChatItem::ContentsChatItem(const qreal &width, const QPointF &pos, QGrap } QFontMetricsF *ContentsChatItem::fontMetrics() const { - return QtUi::style()->fontMetrics(data(ChatLineModel::FormatRole).value().at(0).second); + return QtUi::style()->fontMetrics(data(ChatLineModel::FormatRole).value().at(0).second, 0); } ContentsChatItem::~ContentsChatItem() { diff --git a/src/qtui/topiclabel.cpp b/src/qtui/topiclabel.cpp index e74d5dcb..2bcd740b 100644 --- a/src/qtui/topiclabel.cpp +++ b/src/qtui/topiclabel.cpp @@ -80,7 +80,7 @@ void TopicLabel::setText(const QString &text) { UiStyle::StyledString styledContents = QtUi::style()->styleString(QtUi::style()->mircToInternal(text), UiStyle::PlainMsg); plainText = styledContents.plainText; - formatList = QtUi::style()->toTextLayoutList(styledContents.formatList, plainText.length()); + formatList = QtUi::style()->toTextLayoutList(styledContents.formatList, plainText.length(), 0); int height = 1; foreach(QTextLayout::FormatRange fr, formatList) { height = qMax(height, QFontMetrics(fr.format.font()).height()); diff --git a/src/uisupport/uistyle.cpp b/src/uisupport/uistyle.cpp index 3bd9b624..1626c01b 100644 --- a/src/uisupport/uistyle.cpp +++ b/src/uisupport/uistyle.cpp @@ -107,7 +107,7 @@ void UiStyle::loadStyleSheet() { foreach(quint64 fmtType, parser.formats().keys()) { QTextCharFormat fmt = baseFmt; fmt.merge(parser.formats().value(fmtType)); - _formatCache[fmtType] = fmt; + _formats[fmtType] = fmt; } _listItemFormats = parser.listItemFormats(); @@ -279,12 +279,12 @@ QVariant UiStyle::itemData(int role, const QTextCharFormat &format) const { /******** Caching *******/ -QTextCharFormat UiStyle::cachedFormat(quint64 key) const { - return _formatCache.value(key, QTextCharFormat()); +QTextCharFormat UiStyle::format(quint64 key) const { + return _formats.value(key, QTextCharFormat()); } QTextCharFormat UiStyle::cachedFormat(quint32 formatType, quint32 messageLabel) const { - return cachedFormat(formatType | ((quint64)messageLabel << 32)); + return _formatCache.value(formatType | ((quint64)messageLabel << 32), QTextCharFormat()); } void UiStyle::setCachedFormat(const QTextCharFormat &format, quint32 formatType, quint32 messageLabel) { @@ -312,7 +312,7 @@ QTextCharFormat UiStyle::format(quint32 ftype, quint32 label_) { quint64 label = (quint64)label_ << 32; // check if we have exactly this format readily cached already - QTextCharFormat fmt = cachedFormat(label|ftype); + QTextCharFormat fmt = cachedFormat(ftype, label_); if(fmt.properties().count()) return fmt; @@ -332,7 +332,7 @@ void UiStyle::mergeFormat(QTextCharFormat &fmt, quint32 ftype, quint64 label) { // TODO: allow combinations for mirc formats and colors (each), e.g. setting a special format for "bold and italic" // or "foreground 01 and background 03" - if((ftype & 0xfff0)) { // element format + if((ftype & 0xfff00)) { // element format for(quint32 mask = 0x00100; mask <= 0x40000; mask <<= 1) { if(ftype & mask) { mergeSubElementFormat(fmt, mask | 0xff, label); @@ -357,10 +357,10 @@ void UiStyle::mergeFormat(QTextCharFormat &fmt, quint32 ftype, quint64 label) { // Merge a subelement format into an existing message format void UiStyle::mergeSubElementFormat(QTextCharFormat& fmt, quint32 ftype, quint64 label) { quint64 key = ftype | label; - fmt.merge(cachedFormat(key & Q_UINT64_C(0x0000ffffffffff00))); // label + subelement - fmt.merge(cachedFormat(key & Q_UINT64_C(0x0000ffffffffffff))); // label + subelement + msgtype - fmt.merge(cachedFormat(key & Q_UINT64_C(0xffffffffffffff00))); // label + subelement + nickhash - fmt.merge(cachedFormat(key & Q_UINT64_C(0xffffffffffffffff))); // label + subelement + nickhash + msgtype + fmt.merge(format(key & Q_UINT64_C(0x0000ffffffffff00))); // label + subelement + fmt.merge(format(key & Q_UINT64_C(0x0000ffffffffffff))); // label + subelement + msgtype + fmt.merge(format(key & Q_UINT64_C(0xffffffffffffff00))); // label + subelement + nickhash + fmt.merge(format(key & Q_UINT64_C(0xffffffffffffffff))); // label + subelement + nickhash + msgtype } UiStyle::FormatType UiStyle::formatType(Message::Type msgType) { diff --git a/src/uisupport/uistyle.h b/src/uisupport/uistyle.h index 52ad8188..7911dc7e 100644 --- a/src/uisupport/uistyle.h +++ b/src/uisupport/uistyle.h @@ -133,10 +133,10 @@ public: static QString mircToInternal(const QString &); static inline QString timestampFormatString() { return _timestampFormatString; } - QTextCharFormat format(quint32 formatType, quint32 messageLabel = 0); - QFontMetricsF *fontMetrics(quint32 formatType, quint32 messageLabel = 0); + QTextCharFormat format(quint32 formatType, quint32 messageLabel); + QFontMetricsF *fontMetrics(quint32 formatType, quint32 messageLabel); - QList toTextLayoutList(const FormatList &, int textLength, quint32 messageLabel = 0); + QList toTextLayoutList(const FormatList &, int textLength, quint32 messageLabel); inline const QBrush &brush(ColorRole role) const { return _uiStylePalette.at((int) role); } inline void setBrush(ColorRole role, const QBrush &brush) { _uiStylePalette[(int) role] = brush; } @@ -154,9 +154,9 @@ protected: void loadStyleSheet(); QString loadStyleSheet(const QString &name, bool shouldExist = false); - QTextCharFormat cachedFormat(quint64 key) const; - QTextCharFormat cachedFormat(quint32 formatType, quint32 messageLabel = 0) const; - void setCachedFormat(const QTextCharFormat &format, quint32 formatType, quint32 messageLabel = 0); + QTextCharFormat format(quint64 key) const; + QTextCharFormat cachedFormat(quint32 formatType, quint32 messageLabel) const; + void setCachedFormat(const QTextCharFormat &format, quint32 formatType, quint32 messageLabel); void mergeFormat(QTextCharFormat &format, quint32 formatType, quint64 messageLabel); void mergeSubElementFormat(QTextCharFormat &format, quint32 formatType, quint64 messageLabel); @@ -172,6 +172,7 @@ private slots: private: QVector _uiStylePalette; QBrush _markerLineBrush; + QHash _formats; QHash _formatCache; QHash _metricsCache; QHash _listItemFormats; -- 2.20.1