summaryrefslogtreecommitdiffstats
path: root/tests/auto/gui/painting
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/gui/painting')
-rw-r--r--tests/auto/gui/painting/qcolorspace/resources/Rec. ITU-R BT.2100 PQ.iccbin0 -> 13300 bytes
-rw-r--r--tests/auto/gui/painting/qcolorspace/tst_qcolorspace.cpp96
-rw-r--r--tests/auto/gui/painting/qregion/tst_qregion.cpp24
3 files changed, 118 insertions, 2 deletions
diff --git a/tests/auto/gui/painting/qcolorspace/resources/Rec. ITU-R BT.2100 PQ.icc b/tests/auto/gui/painting/qcolorspace/resources/Rec. ITU-R BT.2100 PQ.icc
new file mode 100644
index 0000000000..e0ceaa12f8
--- /dev/null
+++ b/tests/auto/gui/painting/qcolorspace/resources/Rec. ITU-R BT.2100 PQ.icc
Binary files differ
diff --git a/tests/auto/gui/painting/qcolorspace/tst_qcolorspace.cpp b/tests/auto/gui/painting/qcolorspace/tst_qcolorspace.cpp
index 7505d463ed..e23b3d21a1 100644
--- a/tests/auto/gui/painting/qcolorspace/tst_qcolorspace.cpp
+++ b/tests/auto/gui/painting/qcolorspace/tst_qcolorspace.cpp
@@ -7,6 +7,7 @@
#include <qcolorspace.h>
#include <qimage.h>
#include <qimagereader.h>
+#include <qrgbafloat.h>
#include <private/qcolorspace_p.h>
@@ -71,6 +72,9 @@ private slots:
void setWhitePoint();
void grayColorSpace();
void grayColorSpaceEffectivelySRgb();
+
+ void scaleAlphaValue();
+ void hdrColorSpaces();
};
tst_QColorSpace::tst_QColorSpace()
@@ -121,6 +125,15 @@ void tst_QColorSpace::namedColorSpaces_data()
QTest::newRow("ProPhoto RGB") << QColorSpace::ProPhotoRgb << true
<< QColorSpace::Primaries::ProPhotoRgb
<< QColorSpace::TransferFunction::ProPhotoRgb;
+ QTest::newRow("BT.2020") << QColorSpace::Bt2020 << true
+ << QColorSpace::Primaries::Bt2020
+ << QColorSpace::TransferFunction::Bt2020;
+ QTest::newRow("BT.2100 PQ") << QColorSpace::Bt2100Pq << true
+ << QColorSpace::Primaries::Bt2020
+ << QColorSpace::TransferFunction::St2084;
+ QTest::newRow("BT.2100 HLG") << QColorSpace::Bt2100Hlg << true
+ << QColorSpace::Primaries::Bt2020
+ << QColorSpace::TransferFunction::Hlg;
QTest::newRow("0") << QColorSpace::NamedColorSpace(0)
<< false
<< QColorSpace::Primaries::Custom
@@ -223,6 +236,11 @@ void tst_QColorSpace::fromIccProfile_data()
<< QColorSpace::TransferFunction::Custom
<< QColorSpace::TransformModel::ElementListProcessing
<< QColorSpace::ColorModel::Cmyk << QString("uCMY");
+ // BT.2100 PQ profile
+ QTest::newRow("BT.2100 PQ") << prefix + "Rec. ITU-R BT.2100 PQ.icc" << QColorSpace::Bt2100Pq
+ << QColorSpace::TransferFunction::St2084
+ << QColorSpace::TransformModel::ThreeComponentMatrix
+ << QColorSpace::ColorModel::Rgb << QString("Rec. ITU-R BT.2100 PQ");
}
void tst_QColorSpace::fromIccProfile()
@@ -252,6 +270,15 @@ void tst_QColorSpace::fromIccProfile()
QCOMPARE(iccProfile, iccProfile2);
QColorSpace fileColorSpace2 = QColorSpace::fromIccProfile(iccProfile2);
QCOMPARE(fileColorSpace2, fileColorSpace);
+
+ // Change description to force generation of new icc profile data.
+ fileColorSpace2.setDescription("Hello my QTest description");
+ iccProfile2 = fileColorSpace2.iccProfile();
+ QCOMPARE_NE(iccProfile, iccProfile2);
+ fileColorSpace2 = QColorSpace::fromIccProfile(iccProfile2);
+ QVERIFY(fileColorSpace2.isValid());
+ // Note, we do not currently compare description in color space equality
+ QCOMPARE(fileColorSpace2, fileColorSpace);
}
void tst_QColorSpace::imageConversion_data()
@@ -1030,5 +1057,74 @@ void tst_QColorSpace::grayColorSpaceEffectivelySRgb()
QCOMPARE(rgbImage1, rgbImage2);
}
+void tst_QColorSpace::scaleAlphaValue()
+{
+ QImage image(1, 1, QImage::Format_ARGB32);
+ image.setPixel(0, 0, qRgba(255, 255, 255, 125));
+ image.setColorSpace(QColorSpace::SRgb);
+ image.convertToColorSpace(QColorSpace::SRgbLinear, QImage::Format_RGBA64);
+ QCOMPARE(reinterpret_cast<const QRgba64 *>(image.constBits())->alpha(), 257 * 125);
+}
+
+void tst_QColorSpace::hdrColorSpaces()
+{
+ QColorSpace bt2020linear(QColorSpace::Primaries::Bt2020, QColorSpace::TransferFunction::Linear);
+ QColorTransform pqToLinear = QColorSpace(QColorSpace::Bt2100Pq).transformationToColorSpace(bt2020linear);
+ QColorTransform hlgToLinear = QColorSpace(QColorSpace::Bt2100Hlg).transformationToColorSpace(bt2020linear);
+
+ QColor maxWhite = QColor::fromRgbF(1.0f, 1.0f, 1.0f);
+ QColor hlgWhite = QColor::fromRgbF(0.5f, 0.5f, 0.5f);
+ QCOMPARE(hlgToLinear.map(maxWhite).redF(), 12.f);
+ QCOMPARE(hlgToLinear.map(maxWhite).greenF(), 12.f);
+ QCOMPARE(hlgToLinear.map(maxWhite).blueF(), 12.f);
+ QCOMPARE(hlgToLinear.map(hlgWhite).redF(), 1.f);
+ QCOMPARE(hlgToLinear.map(hlgWhite).greenF(), 1.f);
+ QCOMPARE(hlgToLinear.map(hlgWhite).blueF(), 1.f);
+ QCOMPARE(pqToLinear.map(maxWhite).redF(), 64.f);
+ QCOMPARE(pqToLinear.map(maxWhite).greenF(), 64.f);
+ QCOMPARE(pqToLinear.map(maxWhite).blueF(), 64.f);
+
+ {
+ QImage image(1, 1, QImage::Format_RGBA32FPx4);
+ image.setPixel(0, 0, qRgba(255, 255, 255, 255));
+ image.setColorSpace(QColorSpace::Bt2100Pq);
+ QImage image2 = image.convertedToColorSpace(bt2020linear);
+ QCOMPARE(image2.pixelColor(0, 0).redF(), 64.f);
+ image.setColorSpace(QColorSpace::Bt2100Hlg);
+ image2 = image.convertedToColorSpace(bt2020linear);
+ QCOMPARE(image2.pixelColor(0, 0).redF(), 12.f);
+ }
+ {
+ QImage image(1, 1, QImage::Format_RGBA32FPx4_Premultiplied);
+ image.setPixel(0, 0, qRgba(255, 255, 255, 255));
+ image.setColorSpace(QColorSpace::Bt2100Pq);
+ QImage image2 = image.convertedToColorSpace(bt2020linear);
+ QCOMPARE(image2.pixelColor(0, 0).redF(), 64.f);
+ image.setColorSpace(QColorSpace::Bt2100Hlg);
+ image2 = image.convertedToColorSpace(bt2020linear);
+ QCOMPARE(image2.pixelColor(0, 0).redF(), 12.f);
+ }
+ {
+ QImage image(1, 1, QImage::Format_ARGB32);
+ image.setPixel(0, 0, qRgba(255, 255, 255, 255));
+ image.setColorSpace(QColorSpace::Bt2100Pq);
+ QImage image2 = image.convertedToColorSpace(bt2020linear, QImage::Format_RGBA32FPx4);
+ QCOMPARE(image2.pixelColor(0, 0).redF(), 64.f);
+ image.setColorSpace(QColorSpace::Bt2100Hlg);
+ image2 = image.convertedToColorSpace(bt2020linear, QImage::Format_RGBA32FPx4);
+ QCOMPARE(image2.pixelColor(0, 0).redF(), 12.f);
+ }
+ {
+ QImage image(1, 1, QImage::Format_ARGB32_Premultiplied);
+ image.setPixel(0, 0, qRgba(255, 255, 255, 255));
+ image.setColorSpace(QColorSpace::Bt2100Pq);
+ QImage image2 = image.convertedToColorSpace(bt2020linear, QImage::Format_RGBA32FPx4);
+ QCOMPARE(image2.pixelColor(0, 0).redF(), 64.f);
+ image.setColorSpace(QColorSpace::Bt2100Hlg);
+ image2 = image.convertedToColorSpace(bt2020linear, QImage::Format_RGBA32FPx4);
+ QCOMPARE(image2.pixelColor(0, 0).redF(), 12.f);
+ }
+}
+
QTEST_MAIN(tst_QColorSpace)
#include "tst_qcolorspace.moc"
diff --git a/tests/auto/gui/painting/qregion/tst_qregion.cpp b/tests/auto/gui/painting/qregion/tst_qregion.cpp
index 3d60e62fc1..934725844a 100644
--- a/tests/auto/gui/painting/qregion/tst_qregion.cpp
+++ b/tests/auto/gui/painting/qregion/tst_qregion.cpp
@@ -138,12 +138,15 @@ void tst_QRegion::rects()
QRegion region(rect);
QVERIFY(region.isEmpty());
QCOMPARE(region.begin(), region.end());
+ QVERIFY(region.rects().isEmpty());
}
{
QRect rect(10, -20, 30, 40);
QRegion region(rect);
QCOMPARE(region.end(), region.begin() + 1);
QCOMPARE(*region.begin(), rect);
+ QCOMPARE(region.rects().size(), 1);
+ QCOMPARE(region.rects()[0], rect);
}
{
QRect r(QPoint(10, 10), QPoint(40, 40));
@@ -190,6 +193,7 @@ void tst_QRegion::setRects()
QCOMPARE(region, QRegion());
QCOMPARE(region.begin(), region.end());
QVERIFY(!region.boundingRect().isValid());
+ QVERIFY(region.rects().isEmpty());
}
{
QRegion region;
@@ -197,12 +201,15 @@ void tst_QRegion::setRects()
region.setRects(&rect, 1);
QCOMPARE(region.begin(), region.end());
QVERIFY(!region.boundingRect().isValid());
+ QVERIFY(region.rects().isEmpty());
}
{
QRegion region;
QRect rect(10, -20, 30, 40);
region.setRects(&rect, 1);
QCOMPARE(region.end(), region.begin() + 1);
+ QCOMPARE(region.rects().size(), 1);
+ QCOMPARE(region.rects()[0], rect);
QCOMPARE(*region.begin(), rect);
}
}
@@ -316,10 +323,12 @@ void tst_QRegion::emptyPolygonRegion()
QRegion r(pa);
QTEST(r.isEmpty(), "isEmpty");
QTEST(int(std::distance(r.begin(), r.end())), "numRects");
- QList<QRect> rects;
- std::copy(r.begin(), r.end(), std::back_inserter(rects));
+ QList<QRect> rects{r.begin(), r.end()};
QTEST(int(rects.size()), "numRects");
QTEST(rects, "rects");
+ const auto span = r.rects();
+ rects.assign(span.begin(), span.end());
+ QTEST(rects, "rects");
}
@@ -862,6 +871,7 @@ void tst_QRegion::isEmpty()
QCOMPARE(region, QRegion());
QCOMPARE(region.rectCount(), 0);
QCOMPARE(region.boundingRect(), QRect());
+ QVERIFY(region.rects().isEmpty());
}
void tst_QRegion::regionFromPath()
@@ -877,6 +887,10 @@ void tst_QRegion::regionFromPath()
QCOMPARE(rgn.begin()[0], QRect(0, 0, 10, 10));
QCOMPARE(rgn.begin()[1], QRect(0, 100, 100, 1000));
+ QCOMPARE(rgn.rects().size(), 2);
+ QCOMPARE(rgn.rects()[0], QRect(0, 0, 10, 10));
+ QCOMPARE(rgn.rects()[1], QRect(0, 100, 100, 1000));
+
QCOMPARE(rgn.boundingRect(), QRect(0, 0, 100, 1100));
}
@@ -893,6 +907,12 @@ void tst_QRegion::regionFromPath()
QCOMPARE(rgn.begin()[2], QRect(90, 10, 10, 80));
QCOMPARE(rgn.begin()[3], QRect(0, 90, 100, 10));
+ QCOMPARE(rgn.rects().size(), 4);
+ QCOMPARE(rgn.rects()[0], QRect(0, 0, 100, 10));
+ QCOMPARE(rgn.rects()[1], QRect(0, 10, 10, 80));
+ QCOMPARE(rgn.rects()[2], QRect(90, 10, 10, 80));
+ QCOMPARE(rgn.rects()[3], QRect(0, 90, 100, 10));
+
QCOMPARE(rgn.boundingRect(), QRect(0, 0, 100, 100));
}
}