uistyle: Support rendering of strikethrough'd text
[quassel.git] / src / uisupport / uistyle.h
index 7d1a8bc..023808e 100644 (file)
@@ -23,6 +23,7 @@
 #include <utility>
 #include <vector>
 
+#include <QColor>
 #include <QDataStream>
 #include <QFontMetricsF>
 #include <QHash>
@@ -80,7 +81,7 @@ public:
         Bold            = 0x00000100,
         Italic          = 0x00000200,
         Underline       = 0x00000400,
-        Reverse         = 0x00000800,
+        Strikethrough   = 0x00000800,
 
         // Individual parts of a message
         Timestamp       = 0x00001000,
@@ -127,6 +128,11 @@ public:
         Invalid           = 0xffffffff
     };
 
+    enum class FormatProperty {
+        AllowForegroundOverride = QTextFormat::UserProperty,
+        AllowBackgroundOverride
+    };
+
     enum class ColorRole {
         MarkerLine,
         // Sender colors (16 + self)
@@ -158,6 +164,8 @@ public:
 
     struct Format {
         FormatType type;
+        QColor foreground;
+        QColor background;
     };
 
     using FormatList = std::vector<std::pair<quint16, Format>>;
@@ -242,7 +250,7 @@ public:
      */
     static QString timestampFormatString();
 
-    QTextCharFormat format(FormatType formatType, MessageLabel messageLabel) const;
+    QTextCharFormat format(const Format &format, MessageLabel messageLabel) const;
     QFontMetricsF *fontMetrics(FormatType formatType, MessageLabel messageLabel) const;
 
     QList<QTextLayout::FormatRange> toTextLayoutList(const FormatList &, int textLength, MessageLabel messageLabel) const;
@@ -263,11 +271,12 @@ protected:
     void loadStyleSheet();
     QString loadStyleSheet(const QString &name, bool shouldExist = false);
 
-    QTextCharFormat format(quint64 key) const;
-    QTextCharFormat cachedFormat(FormatType formatType, MessageLabel messageLabel) const;
-    void setCachedFormat(const QTextCharFormat &format, FormatType formatType, MessageLabel messageLabel) const;
-    void mergeFormat(QTextCharFormat &format, FormatType formatType, MessageLabel messageLabel) const;
-    void mergeSubElementFormat(QTextCharFormat &format, FormatType formatType, MessageLabel messageLabel) const;
+    QTextCharFormat parsedFormat(quint64 key) const;
+    QTextCharFormat cachedFormat(const Format &format, MessageLabel messageLabel) const;
+    void setCachedFormat(const QTextCharFormat &charFormat, const Format &format, MessageLabel messageLabel) const;
+    void mergeFormat(QTextCharFormat &charFormat, const Format &format, MessageLabel messageLabel) const;
+    void mergeSubElementFormat(QTextCharFormat &charFormat, FormatType formatType, MessageLabel messageLabel) const;
+    void mergeColors(QTextCharFormat &charFormat, const Format &format, MessageLabel messageLabel) const;
 
     static FormatType formatType(const QString &code);
     static QString formatCode(FormatType);
@@ -319,7 +328,7 @@ private:
     QVector<QBrush> _uiStylePalette;
     QBrush _markerLineBrush;
     QHash<quint64, QTextCharFormat> _formats;
-    mutable QHash<quint64, QTextCharFormat> _formatCache;
+    mutable QHash<QString, QTextCharFormat> _formatCache;
     mutable QHash<quint64, QFontMetricsF *> _metricsCache;
     QHash<UiStyle::ItemFormatType, QTextCharFormat> _listItemFormats;
     static QHash<QString, FormatType> _formatCodes;