summaryrefslogtreecommitdiffstats
path: root/tests/auto/gui/image/qicoimageformat/tst_qicoimageformat.cpp
diff options
context:
space:
mode:
authorJohn Chadwick <john@jchw.io>2023-07-08 02:52:03 -0400
committerJohn Chadwick <john@jchw.io>2023-07-11 18:35:41 +0000
commit1079b537396fcf5cd6c50cc8af19b078a50cf547 (patch)
treea09581a1683c5f44d82b26223521ce04c87d54e5 /tests/auto/gui/image/qicoimageformat/tst_qicoimageformat.cpp
parent417878904b39b444632df18f7dd37bcb073c0467 (diff)
Fix transparency in 16 bit and 24 bit ico files
As a result of the fix for QTBUG-75214, Qt inadvertently no longer reads the AND mask that specifies transparency for 16-bit and 24-bit ico files. This is because it tries to detect 32-bit icons by checking icoAttrib.depth == 32, but icoAttrib.depth is set to the depth of the QImage, not the depth of the icon, and 32-bit QImage is used for all of the non-indexed cases (16-bit, 24-bit and 32-bit.) This commit instead uses icoAttrib.nbits, which should reliably determine whether or not the icon is 32-bit. This makes the behavior consistent with other ico reading software, including Windows. Also, adds a unit test that verifies correct behavior of icon masks, checking for both QTBUG-75214 and QTBUG-113319. Amends 1d128ed1dfbcf49453ada922e54381c37264fde5. Fixes: QTBUG-113319 Change-Id: I89ac86ff16054c8925fff6afc8c530fa737f8385 Pick-to: 6.6 6.5 6.2 5.15 Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
Diffstat (limited to 'tests/auto/gui/image/qicoimageformat/tst_qicoimageformat.cpp')
-rw-r--r--tests/auto/gui/image/qicoimageformat/tst_qicoimageformat.cpp29
1 files changed, 29 insertions, 0 deletions
diff --git a/tests/auto/gui/image/qicoimageformat/tst_qicoimageformat.cpp b/tests/auto/gui/image/qicoimageformat/tst_qicoimageformat.cpp
index 47bfb5bca5..c420489e3c 100644
--- a/tests/auto/gui/image/qicoimageformat/tst_qicoimageformat.cpp
+++ b/tests/auto/gui/image/qicoimageformat/tst_qicoimageformat.cpp
@@ -27,6 +27,8 @@ private slots:
void pngCompression();
void write_data();
void write();
+ void icoMask_data();
+ void icoMask();
private:
QString m_IconPath;
@@ -319,6 +321,33 @@ void tst_QIcoImageFormat::write()
}
}
+void tst_QIcoImageFormat::icoMask_data()
+{
+ QTest::addColumn<QString>("inFile");
+ QTest::addColumn<QString>("outFile");
+
+ QTest::newRow("24bpp") << "masked/24bpp.ico" << "masked/24bpp.png";
+ QTest::newRow("32bpp") << "masked/32bpp.ico" << "masked/32bpp.png";
+}
+
+void tst_QIcoImageFormat::icoMask()
+{
+ QFETCH(QString, inFile);
+ QFETCH(QString, outFile);
+
+ QImage inImage;
+ QImageReader inReader(m_IconPath + QLatin1Char('/') + inFile);
+ inReader.read(&inImage);
+
+ QImage outImage;
+ QImageReader outReader(m_IconPath + QLatin1Char('/') + outFile);
+ outReader.read(&outImage);
+ outImage.setColorSpace(inImage.colorSpace());
+ outImage = outImage.convertToFormat(inImage.format());
+
+ QCOMPARE(inImage, outImage);
+}
+
QTEST_MAIN(tst_QIcoImageFormat)
#include "tst_qicoimageformat.moc"