From 1b5f9554d108574532da7ad7bf52a1217ba23a2b Mon Sep 17 00:00:00 2001 From: zsien Date: Thu, 27 Apr 2023 13:55:47 +0800 Subject: [PATCH] fix: fcitx5 keyboard tray icon blur Choose the pixmap that fits best in size. Fixes linuxdeepin/developer-center#4185 --- .../window/tray/widgets/snitrayitemwidget.cpp | 23 +++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/frame/window/tray/widgets/snitrayitemwidget.cpp b/frame/window/tray/widgets/snitrayitemwidget.cpp index 9acefdd25..26eb3282d 100644 --- a/frame/window/tray/widgets/snitrayitemwidget.cpp +++ b/frame/window/tray/widgets/snitrayitemwidget.cpp @@ -476,21 +476,30 @@ QPixmap SNITrayItemWidget::newIconPixmap(IconType iconType) do { // load icon from sni dbus if (!dbusImageList.isEmpty() && !dbusImageList.first().pixels.isEmpty()) { - for (DBusImage dbusImage : dbusImageList) { - char *image_data = dbusImage.pixels.data(); + auto best = dbusImageList.begin(); + for (auto i = dbusImageList.begin() + 1; i < dbusImageList.end(); i++) { + auto &dbusImage = *i; + if (dbusImage.width > best->width) { + best = i; + } + + if (best->width >= iconSizeScaled) { + break; + } + } + + if (best != dbusImageList.end()) { + char *image_data = best->pixels.data(); if (QSysInfo::ByteOrder == QSysInfo::LittleEndian) { - for (int i = 0; i < dbusImage.pixels.size(); i += 4) { + for (int i = 0; i < best->pixels.size(); i += 4) { *(qint32 *)(image_data + i) = qFromBigEndian(*(qint32 *)(image_data + i)); } } - QImage image((const uchar *)dbusImage.pixels.constData(), dbusImage.width, dbusImage.height, QImage::Format_ARGB32); + QImage image((const uchar *)best->pixels.constData(), best->width, best->height, QImage::Format_ARGB32); pixmap = QPixmap::fromImage(image.scaled(iconSizeScaled, iconSizeScaled, Qt::KeepAspectRatio, Qt::SmoothTransformation)); pixmap.setDevicePixelRatio(ratio); - if (!pixmap.isNull()) { - break; - } } }