diff --git a/include/TrayIcon.h b/include/TrayIcon.h index 2c9020c1..dec3063b 100644 --- a/include/TrayIcon.h +++ b/include/TrayIcon.h @@ -32,6 +32,8 @@ public: virtual void paint(QPainter *p, const QRect &rect, QIcon::Mode mode, QIcon::State state); virtual QIconEngine *clone() const; + virtual QList availableSizes(QIcon::Mode mode, QIcon::State state) const; + virtual QPixmap pixmap(const QSize& size, QIcon::Mode mode, QIcon::State state); int msgCount = 0; diff --git a/src/TrayIcon.cc b/src/TrayIcon.cc index a9e897d8..8d3dc99f 100644 --- a/src/TrayIcon.cc +++ b/src/TrayIcon.cc @@ -17,6 +17,7 @@ #include #include +#include #include "TrayIcon.h" @@ -72,6 +73,34 @@ MsgCountComposedIcon::clone() const return new MsgCountComposedIcon(*this); } +QList +MsgCountComposedIcon::availableSizes(QIcon::Mode mode, QIcon::State state) const +{ + Q_UNUSED(mode); + Q_UNUSED(state); + QList sizes; + sizes.append(QSize(24, 24)); + sizes.append(QSize(32, 32)); + sizes.append(QSize(48, 48)); + sizes.append(QSize(64, 64)); + sizes.append(QSize(128, 128)); + sizes.append(QSize(256, 256)); + return sizes; +} + +QPixmap +MsgCountComposedIcon::pixmap(const QSize& size, QIcon::Mode mode, QIcon::State state) +{ + QImage img(size, QImage::Format_ARGB32); + img.fill(qRgba(0, 0, 0, 0)); + QPixmap result = QPixmap::fromImage(img, Qt::NoFormatConversion); + { + QPainter painter(&result); + paint(&painter, QRect(QPoint(0, 0), size), mode, state); + } + return result; +} + TrayIcon::TrayIcon(const QString &filename, QWidget *parent) : QSystemTrayIcon(parent) {