summaryrefslogtreecommitdiffstats
path: root/tests/auto/gui
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@digia.com>2014-02-07 14:38:47 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-02-10 23:02:47 +0100
commit15f3191981908b786b93e1e0dd7d6828e2bf18f9 (patch)
treeff036b4423ea84a49a8b0849ba000d9eae2c559c /tests/auto/gui
parent2a3f6359537f0c975d9bb90bba208236bcecca8b (diff)
Fix drawing vertical gradients in RGBA8888 formats
The RGBA8888 formats was incorrectly using the qt_gradient_quint32 which is argb specific. This caused vertical gradients but only vertical gradients to be drawn incorrectly. This changes the RGBA8888 formats formats to use the generic gradient method and renames qt_gradient_quint32 to qt_gradient_argb32 to indicate its limitation. Change-Id: Ia1cd48ca7f4f78b64f31d6263e81cd8ac3b0954e Reviewed-by: Gunnar Sletta <gunnar.sletta@jollamobile.com>
Diffstat (limited to 'tests/auto/gui')
-rw-r--r--tests/auto/gui/painting/qpainter/tst_qpainter.cpp46
1 files changed, 46 insertions, 0 deletions
diff --git a/tests/auto/gui/painting/qpainter/tst_qpainter.cpp b/tests/auto/gui/painting/qpainter/tst_qpainter.cpp
index 27c0f6e66a..4c4e46de05 100644
--- a/tests/auto/gui/painting/qpainter/tst_qpainter.cpp
+++ b/tests/auto/gui/painting/qpainter/tst_qpainter.cpp
@@ -201,6 +201,9 @@ private slots:
void linearGradientSymmetry();
void gradientInterpolation();
+ void gradientPixelFormat_data();
+ void gradientPixelFormat();
+
void fpe_pixmapTransform();
void fpe_zeroLengthLines();
void fpe_divByZero();
@@ -3723,6 +3726,49 @@ void tst_QPainter::linearGradientSymmetry()
QCOMPARE(a, b);
}
+void tst_QPainter::gradientPixelFormat_data()
+{
+ QTest::addColumn<QImage::Format>("format");
+
+ QTest::newRow("argb32") << QImage::Format_ARGB32;
+ QTest::newRow("rgb32") << QImage::Format_RGB32;
+ QTest::newRow("rgb888") << QImage::Format_RGB888;
+ QTest::newRow("rgbx8888") << QImage::Format_RGBX8888;
+ QTest::newRow("rgba8888") << QImage::Format_RGBA8888;
+ QTest::newRow("rgba8888_pm") << QImage::Format_RGBA8888_Premultiplied;
+}
+
+void tst_QPainter::gradientPixelFormat()
+{
+ QFETCH(QImage::Format, format);
+
+ QImage a(8, 64, QImage::Format_ARGB32_Premultiplied);
+ QImage b(8, 64, format);
+
+
+ QGradientStops stops;
+ stops << qMakePair(qreal(0.0), QColor(Qt::blue));
+ stops << qMakePair(qreal(0.3), QColor(Qt::red));
+ stops << qMakePair(qreal(0.6), QColor(Qt::green));
+ stops << qMakePair(qreal(1.0), QColor(Qt::black));
+
+ a.fill(0);
+ b.fill(0);
+
+ QLinearGradient gradient(QRectF(b.rect()).topLeft(), QRectF(b.rect()).bottomLeft());
+ gradient.setStops(stops);
+
+ QPainter pa(&a);
+ pa.fillRect(a.rect(), gradient);
+ pa.end();
+
+ QPainter pb(&b);
+ pb.fillRect(b.rect(), gradient);
+ pb.end();
+
+ QCOMPARE(a, b.convertToFormat(QImage::Format_ARGB32_Premultiplied));
+}
+
void tst_QPainter::gradientInterpolation()
{
QImage image(256, 8, QImage::Format_ARGB32_Premultiplied);