From ce4e697667ef52e28d6ca8f034c0c8f6b109309a Mon Sep 17 00:00:00 2001 From: outfoxxed Date: Sun, 21 Apr 2024 00:16:22 -0700 Subject: [PATCH] service/tray: use bilinear scaling for tray icons Apparently some programs think it is a good idea to send 1000x+ images. --- src/services/status_notifier/item.cpp | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/src/services/status_notifier/item.cpp b/src/services/status_notifier/item.cpp index 0bc05e41..713d455c 100644 --- a/src/services/status_notifier/item.cpp +++ b/src/services/status_notifier/item.cpp @@ -6,6 +6,7 @@ #include #include #include +#include #include #include #include @@ -123,7 +124,13 @@ QPixmap StatusNotifierItem::createPixmap(const QSize& size) const { pixmap = icon.pixmap(size.width(), size.height()); } else { const auto* icon = closestPixmap(size, this->attentionIconPixmaps.get()); - if (icon != nullptr) pixmap = QPixmap::fromImage(icon->createImage()); + + if (icon != nullptr) { + const auto image = + icon->createImage().scaled(size, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); + + pixmap = QPixmap::fromImage(image); + } } } else { if (!this->iconName.get().isEmpty()) { @@ -131,7 +138,13 @@ QPixmap StatusNotifierItem::createPixmap(const QSize& size) const { pixmap = icon.pixmap(size.width(), size.height()); } else { const auto* icon = closestPixmap(size, this->iconPixmaps.get()); - if (icon != nullptr) pixmap = QPixmap::fromImage(icon->createImage()); + + if (icon != nullptr) { + const auto image = + icon->createImage().scaled(size, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); + + pixmap = QPixmap::fromImage(image); + } } QPixmap overlay; @@ -140,7 +153,13 @@ QPixmap StatusNotifierItem::createPixmap(const QSize& size) const { overlay = icon.pixmap(pixmap.width(), pixmap.height()); } else { const auto* icon = closestPixmap(pixmap.size(), this->overlayIconPixmaps.get()); - if (icon != nullptr) overlay = QPixmap::fromImage(icon->createImage()); + + if (icon != nullptr) { + const auto image = + icon->createImage().scaled(size, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); + + overlay = QPixmap::fromImage(image); + } } if (!overlay.isNull()) {