summaryrefslogtreecommitdiffstats
path: root/src/platformsupport
diff options
context:
space:
mode:
authorShawn Rutledge <shawn.rutledge@digia.com>2015-01-19 12:58:36 +0100
committerShawn Rutledge <shawn.rutledge@digia.com>2015-01-23 05:34:29 +0100
commite20a8c69a761a9771ead99eed1abd38f4eeca38a (patch)
tree75ca2f3efd14285f0ad1460061836321cf969e69 /src/platformsupport
parent5facb0ce90008dfc7014029a81ef6d4cd2626a46 (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')
-rw-r--r--src/platformsupport/dbustray/qdbustraytypes.cpp15
-rw-r--r--src/platformsupport/dbustray/qdbustraytypes_p.h3
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;