MsgId lastSeenMsgId = Client::networkModel()->lastSeenMarkerMsgId(bufferId);
if(lastSeenMsgId < myMsgId && lastSeenMsgId >= prevMsgId) {
QLinearGradient gradient(0, 0, 0, contentsItem().fontMetrics()->lineSpacing());
- gradient.setColorAt(0, QtUi::style()->markerLineBrush().color()); // FIXME: Use full (gradient?) brush instead of just the color
+ gradient.setColorAt(0, QtUi::style()->brush(UiStyle::MarkerLine).color()); // FIXME: Use full (gradient?) brush instead of just the color
gradient.setColorAt(0.1, Qt::transparent);
painter->fillRect(boundingRect(), gradient);
}
_paletteColorRoles["tooltip-text"] = QPalette::ToolTipText;
_paletteColorRoles["window"] = QPalette::Window;
_paletteColorRoles["window-text"] = QPalette::WindowText;
+
+ _uiStylePalette = QVector<QBrush>(UiStyle::NumRoles, QBrush());
+
+ _uiStyleColorRoles["marker-line"] = UiStyle::MarkerLine;
+ _uiStyleColorRoles["active-nick"] = UiStyle::ActiveNick;
+ _uiStyleColorRoles["inactive-nick"] = UiStyle::InactiveNick;
+ _uiStyleColorRoles["channel"] = UiStyle::Channel;
+ _uiStyleColorRoles["inactive-channel"] = UiStyle::InactiveChannel;
+ _uiStyleColorRoles["active-channel"] = UiStyle::ActiveChannel;
+ _uiStyleColorRoles["unread-channel"] = UiStyle::UnreadChannel;
+ _uiStyleColorRoles["highlighted-channel"] = UiStyle::HighlightedChannel;
+ _uiStyleColorRoles["query"] = UiStyle::Query;
+ _uiStyleColorRoles["inactive-query"] = UiStyle::InactiveQuery;
+ _uiStyleColorRoles["active-query"] = UiStyle::ActiveQuery;
+ _uiStyleColorRoles["unread-query"] = UiStyle::UnreadQuery;
+ _uiStyleColorRoles["highlighted-query"] = UiStyle::HighlightedQuery;
}
void QssParser::processStyleSheet(QString &ss) {
QString rolestr = line.left(idx).trimmed();
QString brushstr = line.mid(idx + 1).trimmed();
- // We treat the marker line color as a palette role even though it isn't -> special casing
- if(rolestr == "marker-line") {
- _markerLineBrush = parseBrush(brushstr);
- continue;
- }
-
- if(!_paletteColorRoles.contains(rolestr)) {
- qWarning() << Q_FUNC_INFO << tr("Unknown palette role name: %1").arg(rolestr);
- continue;
- }
- QBrush brush = parseBrush(brushstr);
- if(colorGroups.count()) {
- foreach(QPalette::ColorGroup group, colorGroups)
- _palette.setBrush(group, _paletteColorRoles.value(rolestr), brush);
+ if(_paletteColorRoles.contains(rolestr)) {
+ QBrush brush = parseBrush(brushstr);
+ if(colorGroups.count()) {
+ foreach(QPalette::ColorGroup group, colorGroups)
+ _palette.setBrush(group, _paletteColorRoles.value(rolestr), brush);
+ } else
+ _palette.setBrush(_paletteColorRoles.value(rolestr), brush);
+ } else if(_uiStyleColorRoles.contains(rolestr)) {
+ _uiStylePalette[_uiStyleColorRoles.value(rolestr)] = parseBrush(brushstr);
} else
- _palette.setBrush(_paletteColorRoles.value(rolestr), brush);
+ qWarning() << Q_FUNC_INFO << tr("Unknown palette role name: %1").arg(rolestr);
}
}
qWarning() << Q_FUNC_INFO << tr("Invalid palette color role specification: %1").arg(str);
return QBrush();
}
- if(!_paletteColorRoles.contains(rx.cap(1))) {
- qWarning() << Q_FUNC_INFO << tr("Unknown palette color role: %1").arg(rx.cap(1));
- return QBrush();
- }
- return QBrush(_palette.brush(_paletteColorRoles.value(rx.cap(1))));
+ if(_paletteColorRoles.contains(rx.cap(1)))
+ return QBrush(_palette.brush(_paletteColorRoles.value(rx.cap(1))));
+ if(_uiStyleColorRoles.contains(rx.cap(1)))
+ return QBrush(_uiStylePalette.at(_uiStyleColorRoles.value(rx.cap(1))));
+ qWarning() << Q_FUNC_INFO << tr("Unknown palette color role: %1").arg(rx.cap(1));
+ return QBrush();
} else if(str.startsWith("qlineargradient")) {
static QString rxFloat("\\s*(-?\\s*[0-9]*\\.?[0-9]+)\\s*");
void processStyleSheet(QString &sheet);
inline QPalette palette() const { return _palette; }
+ inline QVector<QBrush> uiStylePalette() const { return _uiStylePalette; }
inline const QHash<quint64, QTextCharFormat>& formats() const { return _formats; }
- inline QBrush markerLineBrush() const { return _markerLineBrush; }
protected:
typedef QList<qreal> ColorTuple;
void parseFontFamily(const QString &str, QTextCharFormat *format);
QHash<QString, QPalette::ColorRole> _paletteColorRoles;
+ QHash<QString, UiStyle::ColorRole> _uiStyleColorRoles;
private:
QPalette _palette;
+ QVector<QBrush> _uiStylePalette;
QHash<quint64, QTextCharFormat> _formats;
- QBrush _markerLineBrush;
int _maxSenderHash;
};
Q_ASSERT(QVariant::nameToType("UiStyle::FormatList") != QVariant::Invalid);
}
+ _uiStylePalette = QVector<QBrush>(NumRoles, QBrush());
+
// Now initialize the mapping between FormatCodes and FormatTypes...
_formatCodes["%O"] = Base;
_formatCodes["%B"] = Bold;
QssParser parser;
parser.processStyleSheet(styleSheet);
QApplication::setPalette(parser.palette());
- _markerLineBrush = parser.markerLineBrush();
+ _uiStylePalette = parser.uiStylePalette();
QTextCharFormat baseFmt = parser.formats().value(Base);
foreach(quint64 fmtType, parser.formats().keys()) {
Selected = 0x00000004 // must be last!
};
+ enum ColorRole {
+ MarkerLine,
+ ActiveNick,
+ InactiveNick,
+ Channel,
+ InactiveChannel,
+ ActiveChannel,
+ UnreadChannel,
+ HighlightedChannel,
+ Query,
+ InactiveQuery,
+ ActiveQuery,
+ UnreadQuery,
+ HighlightedQuery,
+ NumRoles // must be last!
+ };
+
struct StyledString {
QString plainText;
FormatList formatList; // starting pos, ftypes
QFontMetricsF *fontMetrics(quint32 formatType, quint32 messageLabel = 0);
inline QFont defaultFont() const { return _defaultFont; }
- inline QBrush markerLineBrush() const { return _markerLineBrush; }
+
+ inline const QBrush &brush(ColorRole role) const { return _uiStylePalette.at((int) role); }
+ inline void setBrush(ColorRole role, const QBrush &brush) { _uiStylePalette[(int) role] = brush; }
QList<QTextLayout::FormatRange> toTextLayoutList(const FormatList &, int textLength, quint32 messageLabel = 0);
private:
QFont _defaultFont;
+ QVector<QBrush> _uiStylePalette;
QBrush _markerLineBrush;
QHash<quint64, QTextCharFormat> _formatCache;
QHash<quint64, QFontMetricsF *> _metricsCache;