diff options
author | Shawn Rutledge <shawn.rutledge@digia.com> | 2015-01-19 12:58:36 +0100 |
---|---|---|
committer | Shawn Rutledge <shawn.rutledge@digia.com> | 2015-01-23 05:34:29 +0100 |
commit | e20a8c69a761a9771ead99eed1abd38f4eeca38a (patch) | |
tree | 75ca2f3efd14285f0ad1460061836321cf969e69 /src/platformsupport/dbustray | |
parent | 5facb0ce90008dfc7014029a81ef6d4cd2626a46 (diff) |
D-Bus tray icons: make endian conversion work again
Endian conversion needs to be done on aligned data, but the data is
stored unaligned in the QByteArray. So the new qFromUnaligned()
function is needed.
Change-Id: I12f9e52cea81d06129b306709bb9d2cd004f04e1
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/platformsupport/dbustray')
-rw-r--r-- | src/platformsupport/dbustray/qdbustraytypes.cpp | 15 | ||||
-rw-r--r-- | src/platformsupport/dbustray/qdbustraytypes_p.h | 3 |
2 files changed, 10 insertions, 8 deletions
diff --git a/src/platformsupport/dbustray/qdbustraytypes.cpp b/src/platformsupport/dbustray/qdbustraytypes.cpp index de0c3c30a6..b954ffe412 100644 --- a/src/platformsupport/dbustray/qdbustraytypes.cpp +++ b/src/platformsupport/dbustray/qdbustraytypes.cpp @@ -93,14 +93,13 @@ QXdgDBusImageVector iconToQXdgDBusImageVector(const QIcon &icon) painter.drawImage((maxSize - im.width()) / 2, (maxSize - im.height()) / 2, im); im = padded; } - QXdgDBusImageStruct kim; - kim.width = im.width(); - kim.height = im.height(); - kim.data = QByteArray(reinterpret_cast<const char*>(im.constBits()), im.byteCount()); - if (QSysInfo::ByteOrder == QSysInfo::LittleEndian) { - for (char *ptr = kim.data.begin(); ptr < kim.data.end(); ptr += 4) - qToUnaligned(qToBigEndian<quint32>(*ptr), reinterpret_cast<uchar *>(ptr)); - } + // copy and endian-convert + QXdgDBusImageStruct kim(im.width(), im.height()); + const uchar *end = im.constBits() + im.byteCount(); + uchar *dest = reinterpret_cast<uchar *>(kim.data.data()); + for (const uchar *src = im.constBits(); src < end; src += 4, dest += 4) + qToUnaligned(qToBigEndian<quint32>(qFromUnaligned<quint32>(src)), dest); + ret << kim; } return ret; diff --git a/src/platformsupport/dbustray/qdbustraytypes_p.h b/src/platformsupport/dbustray/qdbustraytypes_p.h index 2e1421eccd..c7f8ec0c30 100644 --- a/src/platformsupport/dbustray/qdbustraytypes_p.h +++ b/src/platformsupport/dbustray/qdbustraytypes_p.h @@ -49,6 +49,9 @@ QT_BEGIN_NAMESPACE // Custom message type to send icons across D-Bus struct QXdgDBusImageStruct { + QXdgDBusImageStruct() { } + QXdgDBusImageStruct(int w, int h) + : width(w), height(h), data(width * height * 4, 0) { } int width; int height; QByteArray data; |