diff --git a/src/gui/text/qtexthtmlparser.cpp b/src/gui/text/qtexthtmlparser.cpp index 54c291b82ea..95f882be22b 100644 --- a/src/gui/text/qtexthtmlparser.cpp +++ b/src/gui/text/qtexthtmlparser.cpp @@ -1213,7 +1213,13 @@ void QTextHtmlParserNode::applyCssDeclarations(const QList &d identifier = static_cast(decl.d->values.constFirst().variant.toInt()); switch (decl.d->propertyId) { - case QCss::BorderColor: borderBrush = QBrush(decl.colorValue()); break; + case QCss::BorderColor: { + QBrush bordersBrush[4]; + decl.brushValues(bordersBrush); + if (bordersBrush[0].color().isValid()) + borderBrush = bordersBrush[0]; + break; + } case QCss::BorderStyles: if (decl.styleValue() != QCss::BorderStyle_Unknown && decl.styleValue() != QCss::BorderStyle_Native) borderStyle = static_cast(decl.styleValue() - 1); diff --git a/tests/auto/gui/text/qcssparser/tst_qcssparser.cpp b/tests/auto/gui/text/qcssparser/tst_qcssparser.cpp index 203fe003a08..2d577198840 100644 --- a/tests/auto/gui/text/qcssparser/tst_qcssparser.cpp +++ b/tests/auto/gui/text/qcssparser/tst_qcssparser.cpp @@ -60,6 +60,8 @@ private slots: void strokeLineCapValues(); void strokeLineJoinValues_data(); void strokeLineJoinValues(); + void borderColor_data(); + void borderColor(); }; void tst_QCssParser::scanner_data() @@ -1814,6 +1816,57 @@ void tst_QCssParser::strokeLineJoinValues() QCOMPARE(rule.declarations.at(0).d->values.first().toString(), value); } +void tst_QCssParser::borderColor_data() +{ + QTest::addColumn("css"); + QTest::addColumn("expectedTopColor"); + QTest::addColumn("expectedRightColor"); + QTest::addColumn("expectedBottomColor"); + QTest::addColumn("expectedLeftColor"); + + QTest::newRow("four values") << "border-color: red green blue white" << QColor("red") << QColor("green") << QColor("blue") << QColor("white"); + QTest::newRow("three values") << "border-color: red green blue" << QColor("red") << QColor("green") << QColor("blue") << QColor("green"); + QTest::newRow("two values") << "border-color: red green" << QColor("red") << QColor("green") << QColor("red") << QColor("green"); + QTest::newRow("one value") << "border-color: red" << QColor("red") << QColor("red") << QColor("red") << QColor("red"); +} + +void tst_QCssParser::borderColor() +{ + QFETCH(QString, css); + QFETCH(QColor, expectedTopColor); + QFETCH(QColor, expectedRightColor); + QFETCH(QColor, expectedBottomColor); + QFETCH(QColor, expectedLeftColor); + + css.prepend("dummy {"); + css.append(QLatin1Char('}')); + + QCss::Parser parser(css); + QCss::StyleSheet sheet; + QVERIFY(parser.parse(&sheet)); + + QCOMPARE(sheet.styleRules.size() + sheet.nameIndex.size(), 1); + QCss::StyleRule rule = (!sheet.styleRules.isEmpty()) ? + sheet.styleRules.at(0) : *sheet.nameIndex.begin(); + const QList decls = rule.declarations; + QVERIFY(decls.size() == 1); + QVERIFY(decls[0].d->propertyId == QCss::BorderColor); + + QBrush colors[4]; + + decls[0].brushValues(colors); + QCOMPARE(colors[QCss::TopEdge].color(), expectedTopColor); + QCOMPARE(colors[QCss::RightEdge].color(), expectedRightColor); + QCOMPARE(colors[QCss::BottomEdge].color(), expectedBottomColor); + QCOMPARE(colors[QCss::LeftEdge].color(), expectedLeftColor); + + //QTBUG-126381 : a second evaluation should give the same results + QCOMPARE(colors[QCss::TopEdge].color(), expectedTopColor); + QCOMPARE(colors[QCss::RightEdge].color(), expectedRightColor); + QCOMPARE(colors[QCss::BottomEdge].color(), expectedBottomColor); + QCOMPARE(colors[QCss::LeftEdge].color(), expectedLeftColor); +} + QTEST_MAIN(tst_QCssParser) #include "tst_qcssparser.moc"