Files
amnezia-client/client/ui/utils/trayIconCommon.cpp
T

68 lines
1.8 KiB
C++
Raw Normal View History

2026-05-30 10:53:44 +03:00
#include "trayIconCommon.h"
#include <QBuffer>
#include <QDebug>
#include <QPainter>
#include <QSvgRenderer>
2026-05-30 14:50:18 +03:00
namespace TrayIconCommon
{
2026-06-05 09:00:14 +03:00
QString resourcePathForState(Vpn::ConnectionState state, bool darkTheme)
2026-05-30 10:53:44 +03:00
{
switch (state) {
2026-06-05 09:00:14 +03:00
case Vpn::ConnectionState::Error:
return QString::fromLatin1(kIconError);
2026-05-30 10:53:44 +03:00
case Vpn::ConnectionState::Connected:
2026-06-05 09:00:14 +03:00
return QString::fromLatin1(darkTheme ? kIconOnWhite : kIconOnBlack);
2026-05-30 10:53:44 +03:00
case Vpn::ConnectionState::Disconnected:
case Vpn::ConnectionState::Preparing:
case Vpn::ConnectionState::Connecting:
case Vpn::ConnectionState::Disconnecting:
case Vpn::ConnectionState::Reconnecting:
case Vpn::ConnectionState::Unknown:
2026-06-05 09:00:14 +03:00
default:
return QString::fromLatin1(darkTheme ? kIconOffLight : kIconOffBlack);
2026-05-30 10:53:44 +03:00
}
}
2026-06-05 09:00:14 +03:00
QPixmap renderIcon(const QString &resourcePath, int size)
2026-05-30 10:53:44 +03:00
{
QSvgRenderer renderer(resourcePath);
QPixmap pixmap(size, size);
pixmap.fill(Qt::transparent);
if (!renderer.isValid()) {
2026-06-05 09:00:14 +03:00
qWarning() << "Failed to load tray icon:" << resourcePath;
2026-05-30 10:53:44 +03:00
return pixmap;
}
QPainter painter(&pixmap);
renderer.render(&painter, QRectF(0, 0, size, size));
return pixmap;
}
2026-06-05 09:00:14 +03:00
QPixmap buildPixmap(int size, Vpn::ConnectionState state, bool darkTheme)
2026-05-30 10:53:44 +03:00
{
2026-06-05 09:00:14 +03:00
return renderIcon(resourcePathForState(state, darkTheme), size);
2026-05-30 10:53:44 +03:00
}
2026-06-05 09:00:14 +03:00
QIcon buildIcon(Vpn::ConnectionState state, bool darkTheme)
2026-05-30 10:53:44 +03:00
{
QIcon icon;
2026-06-05 09:00:14 +03:00
icon.addPixmap(buildPixmap(kDefaultTrayIconSize, state, darkTheme));
2026-05-30 10:53:44 +03:00
return icon;
}
2026-06-05 09:00:14 +03:00
QByteArray buildTemplatePng(Vpn::ConnectionState state)
2026-05-30 10:53:44 +03:00
{
2026-06-05 09:00:14 +03:00
const QPixmap pixmap = renderIcon(resourcePathForState(state, /*darkTheme*/ true), kDefaultTrayIconSize);
2026-05-30 10:53:44 +03:00
QByteArray bytes;
QBuffer buffer(&bytes);
buffer.open(QIODevice::WriteOnly);
pixmap.save(&buffer, "PNG");
return bytes;
}
} // namespace TrayIconCommon