From b1a882f178d71d1462b5ee7e7ffde142928b5086 Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Fri, 7 Feb 2014 16:52:00 +0100 Subject: Fix drawCachedGlyphs on RGBA8888 drawCachedGlyphs draws with the wrong color on RGBA8888. The issue is that the draw routines bitmapblit_quint32 and alphamapblit_quint32 while safe to use on rgba formats, needs to have the input color converted. This patch adds small wrapper functions for bitmapblit and alphamapblit that converts the formats. Two tests are extended to ensure we have test coverage. Change-Id: I5f99f3795eba46a69d4df5b167e6099024e9a060 Reviewed-by: Gunnar Sletta --- .../auto/gui/text/qstatictext/tst_qstatictext.cpp | 28 ++++++++++++++++------ 1 file changed, 21 insertions(+), 7 deletions(-) (limited to 'tests/auto') diff --git a/tests/auto/gui/text/qstatictext/tst_qstatictext.cpp b/tests/auto/gui/text/qstatictext/tst_qstatictext.cpp index 46f97840af..4ae70fe137 100644 --- a/tests/auto/gui/text/qstatictext/tst_qstatictext.cpp +++ b/tests/auto/gui/text/qstatictext/tst_qstatictext.cpp @@ -87,6 +87,7 @@ private slots: void plainTextVsRichText(); + void setPenPlainText_data(); void setPenPlainText(); void setPenRichText(); void richTextOverridesPen(); @@ -106,6 +107,8 @@ private: QImage const m_whiteSquare; }; +Q_DECLARE_METATYPE(QImage::Format); + void tst_QStaticText::initTestCase() { // a "blank" square; we compare against in our testfunctions to verify @@ -615,30 +618,41 @@ void tst_QStaticText::plainTextVsRichText() QCOMPARE(imagePlainText, imageRichText); } +void tst_QStaticText::setPenPlainText_data() +{ + QTest::addColumn("format"); + + QTest::newRow("argb32pm") << QImage::Format_ARGB32_Premultiplied; + QTest::newRow("rgb32") << QImage::Format_RGB32; + QTest::newRow("rgba8888pm") << QImage::Format_RGBA8888_Premultiplied; + QTest::newRow("rgbx8888") << QImage::Format_RGBX8888; +} + void tst_QStaticText::setPenPlainText() { + QFETCH(QImage::Format, format); + QFont font = QGuiApplication::font(); font.setStyleStrategy(QFont::NoAntialias); QFontMetricsF fm(font); - QPixmap image(qCeil(fm.width("XXXXX")), qCeil(fm.height())); + QImage image(qCeil(fm.width("XXXXX")), qCeil(fm.height()), format); image.fill(Qt::white); { QPainter p(&image); p.setFont(font); - p.setPen(Qt::green); + p.setPen(Qt::yellow); QStaticText staticText("XXXXX"); staticText.setTextFormat(Qt::PlainText); p.drawStaticText(0, 0, staticText); } - QImage img = image.toImage(); - for (int x=0; x Date: Tue, 25 Feb 2014 14:35:46 +0100 Subject: CSS parser: fix the pseudo-classes array length The pseudoclass array is declared with length "NumPseudos - 1", but the declaration has actually 44 elements, not 45. This caused a zero-initialized last element to be silently appended to the array. The zero-initialized element broke the sorting of the array, which in turn broke std::lower_bound usage (although of course the problem was there from before switching to the standard library algorithms). Task-number: QTBUG-36933 Change-Id: I8a02891fc36761b6ae72d15a0a8d6c6a96813947 Reviewed-by: Olivier Goffart --- .../qstylesheetstyle/tst_qstylesheetstyle.cpp | 32 ++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to 'tests/auto') diff --git a/tests/auto/widgets/styles/qstylesheetstyle/tst_qstylesheetstyle.cpp b/tests/auto/widgets/styles/qstylesheetstyle/tst_qstylesheetstyle.cpp index 24e3ac2c99..5a36ffc671 100644 --- a/tests/auto/widgets/styles/qstylesheetstyle/tst_qstylesheetstyle.cpp +++ b/tests/auto/widgets/styles/qstylesheetstyle/tst_qstylesheetstyle.cpp @@ -99,6 +99,7 @@ private slots: void task232085_spinBoxLineEditBg(); void changeStyleInChangeEvent(); void QTBUG15910_crashNullWidget(); + void QTBUG36933_brokenPseudoClassLookup(); //at the end because it mess with the style. void widgetStyle(); @@ -1656,6 +1657,37 @@ void tst_QStyleSheetStyle::QTBUG15910_crashNullWidget() QVERIFY(QTest::qWaitForWindowExposed(&w)); } +void tst_QStyleSheetStyle::QTBUG36933_brokenPseudoClassLookup() +{ + const int rowCount = 10; + const int columnCount = 10; + + QTableWidget widget(rowCount, columnCount); + + for (int row = 0; row < rowCount; ++row) { + for (int column = 0; column < columnCount; ++column) + widget.setItem(row, column, new QTableWidgetItem(QStringLiteral("row %1 column %2").arg(row + 1).arg(column + 1))); + + // put no visible text for the vertical headers, but still put some text or they will collapse + widget.setVerticalHeaderItem(row, new QTableWidgetItem(QStringLiteral(" "))); + } + + // parsing of this stylesheet must not crash, and it must be correctly applied + widget.setStyleSheet(QStringLiteral("QHeaderView::section:vertical { background-color: #FF0000 }")); + + widget.show(); + QVERIFY(QTest::qWaitForWindowExposed(&widget)); + + widget.activateWindow(); + QApplication::setActiveWindow(&widget); + QVERIFY(QTest::qWaitForWindowActive(&widget)); + + QHeaderView *verticalHeader = widget.verticalHeader(); + QImage image(verticalHeader->size(), QImage::Format_ARGB32); + verticalHeader->render(&image); + QVERIFY(testForColors(image, QColor(0xFF, 0x00, 0x00))); +} + QTEST_MAIN(tst_QStyleSheetStyle) #include "tst_qstylesheetstyle.moc" -- cgit v1.2.3