X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fuisupport%2Fqssparser.cpp;h=166648f174239c452f027d79c57d7abaecbee1c8;hp=24032fbfa0139ef8007cdaef18fe3a9e20b9ed1f;hb=c27d5bfbe80bfeb583a25404f4ccee4b70b010e0;hpb=ac7a58dd970833da2336f6ce035ec55515bac0f1 diff --git a/src/uisupport/qssparser.cpp b/src/uisupport/qssparser.cpp index 24032fbf..166648f1 100644 --- a/src/uisupport/qssparser.cpp +++ b/src/uisupport/qssparser.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-2016 by the Quassel Project * + * Copyright (C) 2005-2018 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -322,8 +322,8 @@ std::pair QssParser::parseFormatType fmtType |= FormatType::Italic; else if (condValue == "underline") fmtType |= FormatType::Underline; - else if (condValue == "reverse") - fmtType |= FormatType::Reverse; + else if (condValue == "strikethrough") + fmtType |= FormatType::Strikethrough; else { qWarning() << Q_FUNC_INFO << tr("Invalid format name: %1").arg(condValue); return invalid; @@ -451,6 +451,20 @@ QTextCharFormat QssParser::parseFormat(const QString &qss) else if (property == "foreground" || property == "color") format.setForeground(parseBrush(value)); + // Color code overrides + else if (property == "allow-foreground-override") { + bool ok; + bool v = parseBoolean(value, &ok); + if (ok) + format.setProperty(static_cast(UiStyle::FormatProperty::AllowForegroundOverride), v); + } + else if (property == "allow-background-override") { + bool ok; + bool v = parseBoolean(value, &ok); + if (ok) + format.setProperty(static_cast(UiStyle::FormatProperty::AllowBackgroundOverride), v); + } + // font-related properties else if (property.startsWith("font")) { if (property == "font") @@ -477,6 +491,23 @@ QTextCharFormat QssParser::parseFormat(const QString &qss) return format; } +/******** Boolean value ********/ + +bool QssParser::parseBoolean(const QString &str, bool *ok) const +{ + if (ok) + *ok = true; + + if (str == "true") + return true; + if (str == "false") + return false; + + qWarning() << Q_FUNC_INFO << tr("Invalid boolean value: %1").arg(str); + if (ok) + *ok = false; + return false; +} /******** Brush ********/ @@ -684,7 +715,7 @@ QGradientStops QssParser::parseGradientStops(const QString &str_) void QssParser::parseFont(const QString &value, QTextCharFormat *format) { - static const QRegExp rx("((?:(?:normal|italic|oblique|underline|bold|100|200|300|400|500|600|700|800|900) ){0,2}) ?(\\d+)(pt|px)? \"(.*)\""); + static const QRegExp rx("((?:(?:normal|italic|oblique|underline|strikethrough|bold|100|200|300|400|500|600|700|800|900) ){0,2}) ?(\\d+)(pt|px)? \"(.*)\""); if (!rx.exactMatch(value)) { qWarning() << Q_FUNC_INFO << tr("Invalid font specification: %1").arg(value); return; @@ -697,8 +728,9 @@ void QssParser::parseFont(const QString &value, QTextCharFormat *format) format->setFontItalic(true); else if (prop == "underline") format->setFontUnderline(true); - //else if(prop == "oblique") - // format->setStyle(QFont::StyleOblique); + else if(prop == "oblique") + // Oblique is not a property supported by QTextCharFormat + format->setFontItalic(true); else if (prop == "bold") format->setFontWeight(QFont::Bold); else { // number @@ -724,8 +756,11 @@ void QssParser::parseFontStyle(const QString &value, QTextCharFormat *format) format->setFontItalic(true); else if (value == "underline") format->setFontUnderline(true); - //else if(value == "oblique") - // format->setStyle(QFont::StyleOblique); + else if (value == "strikethrough") + format->setFontStrikeOut(true); + else if(value == "oblique") + // Oblique is not a property supported by QTextCharFormat + format->setFontItalic(true); else { qWarning() << Q_FUNC_INFO << tr("Invalid font style specification: %1").arg(value); }