Don't put loaded formats directly in the format cache
authorManuel Nickschas <sputnick@quassel-irc.org>
Mon, 3 Aug 2009 21:54:53 +0000 (23:54 +0200)
committerManuel Nickschas <sputnick@quassel-irc.org>
Thu, 6 Aug 2009 18:25:58 +0000 (20:25 +0200)
Bad... idea.

src/qtui/chatitem.cpp
src/qtui/topiclabel.cpp
src/uisupport/uistyle.cpp
src/uisupport/uistyle.h

index b52fe3f..1f7e9ac 100644 (file)
@@ -371,7 +371,7 @@ ContentsChatItem::ContentsChatItem(const qreal &width, const QPointF &pos, QGrap
 }
 
 QFontMetricsF *ContentsChatItem::fontMetrics() const {
 }
 
 QFontMetricsF *ContentsChatItem::fontMetrics() const {
-  return QtUi::style()->fontMetrics(data(ChatLineModel::FormatRole).value<UiStyle::FormatList>().at(0).second);
+  return QtUi::style()->fontMetrics(data(ChatLineModel::FormatRole).value<UiStyle::FormatList>().at(0).second, 0);
 }
 
 ContentsChatItem::~ContentsChatItem() {
 }
 
 ContentsChatItem::~ContentsChatItem() {
index e74d5dc..2bcd740 100644 (file)
@@ -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;
 
   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());
   int height = 1;
   foreach(QTextLayout::FormatRange fr, formatList) {
     height = qMax(height, QFontMetrics(fr.format.font()).height());
index 3bd9b62..1626c01 100644 (file)
@@ -107,7 +107,7 @@ void UiStyle::loadStyleSheet() {
     foreach(quint64 fmtType, parser.formats().keys()) {
       QTextCharFormat fmt = baseFmt;
       fmt.merge(parser.formats().value(fmtType));
     foreach(quint64 fmtType, parser.formats().keys()) {
       QTextCharFormat fmt = baseFmt;
       fmt.merge(parser.formats().value(fmtType));
-      _formatCache[fmtType] = fmt;
+      _formats[fmtType] = fmt;
     }
     _listItemFormats = parser.listItemFormats();
 
     }
     _listItemFormats = parser.listItemFormats();
 
@@ -279,12 +279,12 @@ QVariant UiStyle::itemData(int role, const QTextCharFormat &format) const {
 
 /******** Caching *******/
 
 
 /******** 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 {
 }
 
 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) {
 }
 
 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
   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;
 
   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"
 
   // 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);
     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;
 // 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) {
 }
 
 UiStyle::FormatType UiStyle::formatType(Message::Type msgType) {
index 52ad818..7911dc7 100644 (file)
@@ -133,10 +133,10 @@ public:
   static QString mircToInternal(const QString &);
   static inline QString timestampFormatString() { return _timestampFormatString; }
 
   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<QTextLayout::FormatRange> toTextLayoutList(const FormatList &, int textLength, quint32 messageLabel = 0);
+  QList<QTextLayout::FormatRange> 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; }
 
   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);
 
   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);
 
   void mergeFormat(QTextCharFormat &format, quint32 formatType, quint64 messageLabel);
   void mergeSubElementFormat(QTextCharFormat &format, quint32 formatType, quint64 messageLabel);
 
@@ -172,6 +172,7 @@ private slots:
 private:
   QVector<QBrush> _uiStylePalette;
   QBrush _markerLineBrush;
 private:
   QVector<QBrush> _uiStylePalette;
   QBrush _markerLineBrush;
+  QHash<quint64, QTextCharFormat> _formats;
   QHash<quint64, QTextCharFormat> _formatCache;
   QHash<quint64, QFontMetricsF *> _metricsCache;
   QHash<quint32, QTextCharFormat> _listItemFormats;
   QHash<quint64, QTextCharFormat> _formatCache;
   QHash<quint64, QFontMetricsF *> _metricsCache;
   QHash<quint32, QTextCharFormat> _listItemFormats;