1 files changed, 5 insertions, 21 deletions
diff --git a/src/notifications/ManagerLinux.cpp b/src/notifications/ManagerLinux.cpp
index 23734789..76f290a8 100644
--- a/src/notifications/ManagerLinux.cpp
+++ b/src/notifications/ManagerLinux.cpp
@@ -289,33 +289,17 @@ operator<<(QDBusArgument &arg, const QImage &image)
return arg;
}
- QImage scaled = image.scaledToHeight(100, Qt::SmoothTransformation);
- scaled = scaled.convertToFormat(QImage::Format_ARGB32);
-
-#if Q_BYTE_ORDER == Q_LITTLE_ENDIAN
- // ABGR -> ARGB
- QImage i = scaled.rgbSwapped();
-#else
- // ABGR -> GBAR
- QImage i(scaled.size(), scaled.format());
- for (int y = 0; y < i.height(); ++y) {
- QRgb *p = (QRgb *)scaled.scanLine(y);
- QRgb *q = (QRgb *)i.scanLine(y);
- QRgb *end = p + scaled.width();
- while (p < end) {
- *q = qRgba(qGreen(*p), qBlue(*p), qAlpha(*p), qRed(*p));
- p++;
- q++;
- }
- }
-#endif
+ QImage i = image.height() > 100 || image.width() > 100
+ ? image.scaledToHeight(100, Qt::SmoothTransformation)
+ : image;
+ i = std::move(i).convertToFormat(QImage::Format_RGBA8888);
arg.beginStructure();
arg << i.width();
arg << i.height();
arg << i.bytesPerLine();
arg << i.hasAlphaChannel();
- int channels = i.isGrayscale() ? 1 : (i.hasAlphaChannel() ? 4 : 3);
+ int channels = i.hasAlphaChannel() ? 4 : 3;
arg << i.depth() / channels;
arg << channels;
arg << QByteArray(reinterpret_cast<const char *>(i.bits()), i.sizeInBytes());
|