From 29380121efad2355a69cb3f8110bf193baa312b4 Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Mon, 13 Apr 2015 11:28:33 +0200 Subject: Fix RGB30 painting tests Some tests were failing because the color was not read correctly from a QImage. To make it possibly to read more accurate colors a pixel accessor returing QColor has been added. Some tests also had the wrong order of arguments, confusing dest and src formats. This has been corrected, so they test what they claim to test. A test for RGB30 linear gradients is also added. Change-Id: Ic623ae1b8e0bf7383056b641c6e8230a1d7dd0dd Reviewed-by: Gunnar Sletta --- tests/auto/gui/painting/qpainter/tst_qpainter.cpp | 103 +++++++++++++++++----- 1 file changed, 81 insertions(+), 22 deletions(-) (limited to 'tests/auto/gui') diff --git a/tests/auto/gui/painting/qpainter/tst_qpainter.cpp b/tests/auto/gui/painting/qpainter/tst_qpainter.cpp index 10b79fdd0f..3c5fcba06e 100644 --- a/tests/auto/gui/painting/qpainter/tst_qpainter.cpp +++ b/tests/auto/gui/painting/qpainter/tst_qpainter.cpp @@ -203,6 +203,9 @@ private slots: void gradientPixelFormat_data(); void gradientPixelFormat(); + void gradientRgb30_data(); + void gradientRgb30(); + void fpe_pixmapTransform(); void fpe_zeroLengthLines(); void fpe_divByZero(); @@ -2451,36 +2454,50 @@ void tst_QPainter::setOpacity_data() QTest::newRow("RGBx8888 on RGBx8888") << QImage::Format_RGBX8888 << QImage::Format_RGBX8888; - QTest::newRow("RGBA8888P on ARGB32P") << QImage::Format_RGBA8888_Premultiplied + QTest::newRow("RGBA8888P on ARGB32P") << QImage::Format_ARGB32_Premultiplied + << QImage::Format_RGBA8888_Premultiplied; + + QTest::newRow("RGBx8888 on ARGB32P") << QImage::Format_ARGB32_Premultiplied + << QImage::Format_RGBX8888; + + QTest::newRow("ARGB32P on RGBA8888P") << QImage::Format_RGBA8888_Premultiplied << QImage::Format_ARGB32_Premultiplied; - QTest::newRow("RGBx8888 on ARGB32P") << QImage::Format_RGBX8888 - << QImage::Format_ARGB32_Premultiplied; + QTest::newRow("RGB32 on RGBx8888") << QImage::Format_RGBX8888 + << QImage::Format_RGB32; - QTest::newRow("ARGB32P on RGBA8888P") << QImage::Format_ARGB32_Premultiplied - << QImage::Format_RGBA8888_Premultiplied; + QTest::newRow("RGB30 on RGB32") << QImage::Format_RGB32 + << QImage::Format_BGR30; + + QTest::newRow("BGR30 on ARGB32P") << QImage::Format_ARGB32_Premultiplied + << QImage::Format_BGR30; - QTest::newRow("RGB32 on RGBx8888") << QImage::Format_RGB32 - << QImage::Format_RGBX8888; + QTest::newRow("A2RGB30P on ARGB32P") << QImage::Format_ARGB32_Premultiplied + << QImage::Format_A2BGR30_Premultiplied; QTest::newRow("A2RGB30P on A2RGB30P") << QImage::Format_A2RGB30_Premultiplied << QImage::Format_A2RGB30_Premultiplied; - QTest::newRow("ARGB32P on A2RGB30P") << QImage::Format_ARGB32_Premultiplied - << QImage::Format_A2RGB30_Premultiplied; + QTest::newRow("ARGB32P on A2RGB30P") << QImage::Format_A2RGB30_Premultiplied + << QImage::Format_ARGB32_Premultiplied; + QTest::newRow("RGB32 on A2BGR30P") << QImage::Format_A2BGR30_Premultiplied + << QImage::Format_RGB32; - QTest::newRow("RGB32 on A2BGR30P") << QImage::Format_ARGB32_Premultiplied - << QImage::Format_A2BGR30_Premultiplied; + QTest::newRow("RGB30 on A2BGR30P") << QImage::Format_A2BGR30_Premultiplied + << QImage::Format_RGB30; - QTest::newRow("A2RGB30P on A2BGR30P") << QImage::Format_A2RGB30_Premultiplied - << QImage::Format_A2BGR30_Premultiplied; + QTest::newRow("A2RGB30P on A2BGR30P") << QImage::Format_A2BGR30_Premultiplied + << QImage::Format_A2RGB30_Premultiplied; - QTest::newRow("ARGB32P on BGR30") << QImage::Format_ARGB32_Premultiplied - << QImage::Format_BGR30; + QTest::newRow("ARGB32P on BGR30") << QImage::Format_BGR30 + << QImage::Format_ARGB32_Premultiplied; - QTest::newRow("ARGB32P on RGB30") << QImage::Format_A2RGB30_Premultiplied - << QImage::Format_RGB30; + QTest::newRow("ARGB32P on RGB30") << QImage::Format_RGB30 + << QImage::Format_ARGB32_Premultiplied; + + QTest::newRow("A2RGB30P on RGB30") << QImage::Format_RGB30 + << QImage::Format_A2RGB30_Premultiplied; } @@ -2562,7 +2579,7 @@ void tst_QPainter::drawhelper_blend_untransformed() QImage expected(size - 2, size, destFormat); p.begin(&expected); p.fillRect(0, 0, expected.width(), expected.height(), - QColor(dest.pixel(1, 0))); + dest.pixelColor(1, 0)); p.end(); const QImage subDest(dest.bits() + dest.depth() / 8, @@ -2570,9 +2587,7 @@ void tst_QPainter::drawhelper_blend_untransformed() dest.bytesPerLine(), dest.format()); if (dest.format() == QImage::Format_ARGB8565_Premultiplied || - dest.format() == QImage::Format_ARGB8555_Premultiplied || - dest.format() == QImage::Format_A2BGR30_Premultiplied || - dest.format() == QImage::Format_A2RGB30_Premultiplied ) { + dest.format() == QImage::Format_ARGB8555_Premultiplied) { // Test skipped due to rounding errors... continue; } @@ -2621,7 +2636,7 @@ void tst_QPainter::drawhelper_blend_tiled_untransformed() QImage expected(size - 2, size, destFormat); p.begin(&expected); p.fillRect(0, 0, expected.width(), expected.height(), - QColor(dest.pixel(1, 0))); + dest.pixelColor(1, 0)); p.end(); const QImage subDest(dest.bits() + dest.depth() / 8, @@ -3937,6 +3952,38 @@ void tst_QPainter::gradientInterpolation() } } +void tst_QPainter::gradientRgb30_data() +{ + QTest::addColumn("stop0"); + QTest::addColumn("stop1"); + + QTest::newRow("white->black") << QColor(Qt::white) << QColor(Qt::black); + QTest::newRow("blue->black") << QColor(Qt::blue) << QColor(Qt::black); + QTest::newRow("white->red") << QColor(Qt::white) << QColor(Qt::red); +} + +void tst_QPainter::gradientRgb30() +{ + QFETCH(QColor, stop0); + QFETCH(QColor, stop1); + + QLinearGradient gradient(0, 0, 512, 1); + gradient.setColorAt(0.0, stop0); + gradient.setColorAt(1.0, stop1); + + QImage image(512, 1, QImage::Format_RGB30); + QPainter painter(&image); + painter.fillRect(image.rect(), gradient); + painter.end(); + + for (int i = 0; i < 511; ++i) { + QColor p1 = image.pixelColor(i, 0); + QColor p2 = image.pixelColor(i + 1, 0); + QVERIFY(p1 != p2); + QVERIFY(qGray(p1.rgb()) >= qGray(p2.rgb())); + } +} + void tst_QPainter::drawPolygon() { QImage img(128, 128, QImage::Format_ARGB32_Premultiplied); @@ -4800,6 +4847,18 @@ void tst_QPainter::blendARGBonRGB_data() << QPainter::CompositionMode_SourceIn << qRgba(255, 0, 0, 127) << 125; QTest::newRow("ARGB_PM source-in RGB666") << QImage::Format_RGB666 << QImage::Format_ARGB32_Premultiplied << QPainter::CompositionMode_SourceIn << qRgba(127, 0, 0, 127) << 125; + QTest::newRow("ARGB over RGB30") << QImage::Format_RGB30 << QImage::Format_ARGB32 + << QPainter::CompositionMode_SourceOver << qRgba(255, 0, 0, 127) << 127; + QTest::newRow("ARGB_PM over RGB30") << QImage::Format_RGB30 << QImage::Format_ARGB32_Premultiplied + << QPainter::CompositionMode_SourceOver << qRgba(127, 0, 0, 127) << 127; + QTest::newRow("ARGB source RGB30") << QImage::Format_RGB30 << QImage::Format_ARGB32 + << QPainter::CompositionMode_Source << qRgba(255, 0, 0, 127) << 127; + QTest::newRow("ARGB_PM source RGB30") << QImage::Format_RGB30 << QImage::Format_ARGB32_Premultiplied + << QPainter::CompositionMode_Source << qRgba(127, 0, 0, 127) << 127; + QTest::newRow("ARGB source-in RGB30") << QImage::Format_RGB30 << QImage::Format_ARGB32 + << QPainter::CompositionMode_SourceIn << qRgba(255, 0, 0, 127) << 127; + QTest::newRow("ARGB_PM source-in RGB30") << QImage::Format_RGB30 << QImage::Format_ARGB32_Premultiplied + << QPainter::CompositionMode_SourceIn << qRgba(127, 0, 0, 127) << 127; } void tst_QPainter::blendARGBonRGB() -- cgit v1.2.3