From 1cf2a336b703a8e7ad96a8290cc748f7a65bffdf Mon Sep 17 00:00:00 2001 From: RadRussianRus Date: Sun, 8 Mar 2020 04:20:24 +0300 Subject: [PATCH] Custom tray and taskbar icon --- Telegram/SourceFiles/mainwindow.cpp | 29 ++++++++++++++----- .../platform/linux/main_window_linux.cpp | 6 +++- .../platform/mac/main_window_mac.mm | 20 +++++++++++-- .../platform/win/main_window_win.cpp | 8 ++++- 4 files changed, 51 insertions(+), 12 deletions(-) diff --git a/Telegram/SourceFiles/mainwindow.cpp b/Telegram/SourceFiles/mainwindow.cpp index 2e29a566f..c2aab91ae 100644 --- a/Telegram/SourceFiles/mainwindow.cpp +++ b/Telegram/SourceFiles/mainwindow.cpp @@ -78,15 +78,28 @@ void FeedLangTestingKey(int key) { MainWindow::MainWindow(not_null controller) : Platform::MainWindow(controller) { - auto logo = Core::App().logo(); - icon16 = logo.scaledToWidth(16, Qt::SmoothTransformation); - icon32 = logo.scaledToWidth(32, Qt::SmoothTransformation); - icon64 = logo.scaledToWidth(64, Qt::SmoothTransformation); + QString iconFilename(cWorkingDir() + "tdata/icon.png"); + auto iconImage = App::readImage(iconFilename, nullptr, false); - auto logoNoMargin = Core::App().logoNoMargin(); - iconbig16 = logoNoMargin.scaledToWidth(16, Qt::SmoothTransformation); - iconbig32 = logoNoMargin.scaledToWidth(32, Qt::SmoothTransformation); - iconbig64 = logoNoMargin.scaledToWidth(64, Qt::SmoothTransformation); + if (iconImage.isNull()) { + auto logo = Core::App().logo(); + icon16 = logo.scaledToWidth(16, Qt::SmoothTransformation); + icon32 = logo.scaledToWidth(32, Qt::SmoothTransformation); + icon64 = logo.scaledToWidth(64, Qt::SmoothTransformation); + + auto logoNoMargin = Core::App().logoNoMargin(); + iconbig16 = logoNoMargin.scaledToWidth(16, Qt::SmoothTransformation); + iconbig32 = logoNoMargin.scaledToWidth(32, Qt::SmoothTransformation); + iconbig64 = logoNoMargin.scaledToWidth(64, Qt::SmoothTransformation); + } else { + icon16 = iconImage.scaledToWidth(16, Qt::SmoothTransformation); + icon32 = iconImage.scaledToWidth(32, Qt::SmoothTransformation); + icon64 = iconImage.scaledToWidth(64, Qt::SmoothTransformation); + + iconbig16 = iconImage.scaledToWidth(16, Qt::SmoothTransformation); + iconbig32 = iconImage.scaledToWidth(32, Qt::SmoothTransformation); + iconbig64 = iconImage.scaledToWidth(64, Qt::SmoothTransformation); + } resize(st::windowDefaultWidth, st::windowDefaultHeight); diff --git a/Telegram/SourceFiles/platform/linux/main_window_linux.cpp b/Telegram/SourceFiles/platform/linux/main_window_linux.cpp index 4043235de..513b22df3 100644 --- a/Telegram/SourceFiles/platform/linux/main_window_linux.cpp +++ b/Telegram/SourceFiles/platform/linux/main_window_linux.cpp @@ -143,7 +143,11 @@ QIcon TrayIconGen() { .toImage(); } } else { - currentImageBack = Core::App().logo(); + QString iconFilename(cWorkingDir() + "tdata/icon.png"); + currentImageBack = App::readImage(iconFilename, nullptr, false); + if (currentImageBack.isNull()) { + currentImageBack = Core::App().logo(); + } } if (currentImageBack.size() != desiredSize) { diff --git a/Telegram/SourceFiles/platform/mac/main_window_mac.mm b/Telegram/SourceFiles/platform/mac/main_window_mac.mm index 4ccfc5ee1..73381e515 100644 --- a/Telegram/SourceFiles/platform/mac/main_window_mac.mm +++ b/Telegram/SourceFiles/platform/mac/main_window_mac.mm @@ -563,9 +563,25 @@ void MainWindow::psTrayMenuUpdated() { void MainWindow::psSetupTrayIcon() { if (!trayIcon) { trayIcon = new QSystemTrayIcon(this); + QIcon icon; + QString iconFilename(cWorkingDir() + "tdata/icon.png"); + QString iconFilenameSelected(cWorkingDir() + "tdata/icon_selected.png"); - QIcon icon(QPixmap::fromImage(psTrayIcon(), Qt::ColorOnly)); - icon.addPixmap(QPixmap::fromImage(psTrayIcon(true), Qt::ColorOnly), QIcon::Selected); + auto iconImage = App::readImage(iconFilename, nullptr, false); + + if (iconImage.isNull()) { + iconImage = psTrayIcon(); + } + + icon = QIcon(QPixmap::fromImage(iconImage, Qt::ColorOnly)); + + auto iconImageSelected = App::readImage(iconFilenameSelected, nullptr, false); + + if (iconImageSelected.isNull()) { + iconImageSelected = psTrayIcon(true); + } + + icon.addPixmap(QPixmap::fromImage(iconImageSelected, Qt::ColorOnly), QIcon::Selected); trayIcon->setIcon(icon); attachToTrayIcon(trayIcon); diff --git a/Telegram/SourceFiles/platform/win/main_window_win.cpp b/Telegram/SourceFiles/platform/win/main_window_win.cpp index b9688624a..3a6ef1869 100644 --- a/Telegram/SourceFiles/platform/win/main_window_win.cpp +++ b/Telegram/SourceFiles/platform/win/main_window_win.cpp @@ -684,8 +684,14 @@ void MainWindow::psTrayMenuUpdated() { void MainWindow::psSetupTrayIcon() { if (!trayIcon) { trayIcon = new QSystemTrayIcon(this); + QString iconFilename(cWorkingDir() + "tdata/icon.png"); + auto iconImage = App::readImage(iconFilename, nullptr, false); - auto icon = QIcon(App::pixmapFromImageInPlace(Core::App().logoNoMargin())); + if (iconImage.isNull()) { + iconImage = Core::App().logoNoMargin(); + } + + auto icon = QIcon(App::pixmapFromImageInPlace(std::move(iconImage))); trayIcon->setIcon(icon); connect(trayIcon, SIGNAL(messageClicked()), this, SLOT(showFromTray()));