diff options
author | Robin Burchell <robin+qt@viroteck.net> | 2014-05-31 11:51:44 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-06-05 19:10:58 +0200 |
commit | 9e01483cdfff068517e29c674e0332818e76cb21 (patch) | |
tree | a843f62d0bd1f2ceb23f3715ded6867e71b234ea /src/plugins/imageformats/ico | |
parent | 3b00497d50a022a359cce59696195dce43615b00 (diff) |
Make the ICO image handler capable of reading CUR files too.
This simple patch was an unfortunate victim of the Gitorious to
Gerrit transition. (https://qt.gitorious.org/qt/qt/merge_requests/1179)
As noted in the Gitorious review, a small bug in readHeader is also fixed: ||
instead of &&.
Done-with: Pali Rohár
Task-number: QTBUG-12684
Change-Id: I1fe16359b9b68c10e518904c6a5c58b00fb7379b
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
Diffstat (limited to 'src/plugins/imageformats/ico')
-rw-r--r-- | src/plugins/imageformats/ico/ico.json | 2 | ||||
-rw-r--r-- | src/plugins/imageformats/ico/main.cpp | 2 | ||||
-rw-r--r-- | src/plugins/imageformats/ico/qicohandler.cpp | 10 |
3 files changed, 7 insertions, 7 deletions
diff --git a/src/plugins/imageformats/ico/ico.json b/src/plugins/imageformats/ico/ico.json index bd46e07e54..14093ee471 100644 --- a/src/plugins/imageformats/ico/ico.json +++ b/src/plugins/imageformats/ico/ico.json @@ -1,4 +1,4 @@ { - "Keys": [ "ico" ], + "Keys": [ "ico", "cur" ], "MimeTypes": [ "image/vnd.microsoft.icon" ] } diff --git a/src/plugins/imageformats/ico/main.cpp b/src/plugins/imageformats/ico/main.cpp index 05e6e1885c..2ff2f36fdc 100644 --- a/src/plugins/imageformats/ico/main.cpp +++ b/src/plugins/imageformats/ico/main.cpp @@ -47,7 +47,7 @@ QT_BEGIN_NAMESPACE QImageIOPlugin::Capabilities QICOPlugin::capabilities(QIODevice *device, const QByteArray &format) const { - if (format == "ico") + if (format == "ico" || format == "cur") return Capabilities(CanRead | CanWrite); if (!format.isEmpty()) return 0; diff --git a/src/plugins/imageformats/ico/qicohandler.cpp b/src/plugins/imageformats/ico/qicohandler.cpp index 77bb727a51..b65bcdfacb 100644 --- a/src/plugins/imageformats/ico/qicohandler.cpp +++ b/src/plugins/imageformats/ico/qicohandler.cpp @@ -75,7 +75,7 @@ typedef struct typedef struct { quint16 idReserved; // Reserved - quint16 idType; // resource type (1 for icons) + quint16 idType; // resource type (1 for icons, 2 for cursors) quint16 idCount; // how many images? ICONDIRENTRY idEntries[1]; // the entries for each image } ICONDIR, *LPICONDIR; @@ -275,10 +275,10 @@ bool ICOReader::canRead(QIODevice *iodev) readBytes += ICONDIRENTRY_SIZE; // ICO format does not have a magic identifier, so we read 6 different values, which will hopefully be enough to identify the file. if ( ikonDir.idReserved == 0 - && ikonDir.idType == 1 + && (ikonDir.idType == 1 || ikonDir.idType == 2) && ikonDir.idEntries[0].bReserved == 0 - && ikonDir.idEntries[0].wPlanes <= 1 - && ikonDir.idEntries[0].wBitCount <= 32 // Bits per pixel + && (ikonDir.idEntries[0].wPlanes <= 1 || ikonDir.idType == 2) + && (ikonDir.idEntries[0].wBitCount <= 32 || ikonDir.idType == 2) // Bits per pixel && ikonDir.idEntries[0].dwBytesInRes >= 40 // Must be over 40, since sizeof (infoheader) == 40 ) { isProbablyICO = true; @@ -339,7 +339,7 @@ bool ICOReader::readHeader() if (iod && !headerRead) { startpos = iod->pos(); if (readIconDir(iod, &iconDir)) { - if (iconDir.idReserved == 0 || iconDir.idType == 1) + if (iconDir.idReserved == 0 && (iconDir.idType == 1 || iconDir.idType == 2)) headerRead = true; } } |