From 3e26d6ca35196130657e13e7361be08542ba8195 Mon Sep 17 00:00:00 2001 From: caixr23 Date: Wed, 30 Nov 2022 16:46:54 +0800 Subject: [PATCH] fix: 修复任务栏图标模糊问题 (#729) 高分屏支持设置错误 Log: 修复任务栏图标模糊问题 Bug: https://pms.uniontech.com/bug-view-174459.html Influence: 缩放后任务栏-各插件图标,右键菜单图标 --- frame/main.cpp | 2 +- frame/util/imageutil.cpp | 6 +++--- plugins/multitasking/CMakeLists.txt | 5 ++++- plugins/multitasking/multitaskingwidget.cpp | 5 +++-- plugins/onboard/onboarditem.cpp | 3 ++- plugins/overlay-warning/overlaywarningwidget.cpp | 3 ++- plugins/power/powerstatuswidget.cpp | 3 ++- plugins/show-desktop/CMakeLists.txt | 5 ++++- plugins/show-desktop/showdesktopwidget.cpp | 5 +++-- plugins/shutdown/CMakeLists.txt | 5 ++++- plugins/shutdown/shutdownwidget.cpp | 4 +++- plugins/trash/trashwidget.cpp | 3 ++- 12 files changed, 33 insertions(+), 16 deletions(-) diff --git a/frame/main.cpp b/frame/main.cpp index 7f2e352..d45144a 100644 --- a/frame/main.cpp +++ b/frame/main.cpp @@ -172,5 +172,5 @@ int main(int argc, char *argv[]) app.loadTranslator(); app.setAttribute(Qt::AA_EnableHighDpiScaling, true); - app.setAttribute(Qt::AA_UseHighDpiPixmaps, false); + app.setAttribute(Qt::AA_UseHighDpiPixmaps, true); // 自动化标记由此开始 diff --git a/frame/util/imageutil.cpp b/frame/util/imageutil.cpp index cac4ddc..a6a21d2 100644 --- a/frame/util/imageutil.cpp +++ b/frame/util/imageutil.cpp @@ -8,5 +8,4 @@ #include #include -#include #include @@ -16,11 +15,12 @@ const QPixmap ImageUtil::loadSvg(const QString &iconName, const QString &localPa { QIcon icon = QIcon::fromTheme(iconName); + int pixmapSize = QCoreApplication::testAttribute(Qt::AA_UseHighDpiPixmaps) ? size : int(size * ratio); if (!icon.isNull()) { - QPixmap pixmap = icon.pixmap(int(size * ratio), int(size * ratio)); + QPixmap pixmap = icon.pixmap(pixmapSize); pixmap.setDevicePixelRatio(ratio); return pixmap; } - QPixmap pixmap(int(size * ratio), int(size * ratio)); + QPixmap pixmap(pixmapSize, pixmapSize); QString localIcon = QString("%1%2%3").arg(localPath).arg(iconName).arg(iconName.contains(".svg") ? "" : ".svg"); QSvgRenderer renderer(localIcon); diff --git a/plugins/multitasking/CMakeLists.txt b/plugins/multitasking/CMakeLists.txt index 618ddcd..ec4feda 100644 --- a/plugins/multitasking/CMakeLists.txt +++ b/plugins/multitasking/CMakeLists.txt @@ -5,5 +5,8 @@ project(${PLUGIN_NAME}) # Sources files -file(GLOB SRCS "*.h" "*.cpp" "../../widgets/*.h" "../../widgets/*.cpp") +file(GLOB SRCS "*.h" "*.cpp" "../../widgets/*.h" "../../widgets/*.cpp" + "../../frame/util/imageutil.h" + "../../frame/util/imageutil.cpp" + ) find_package(PkgConfig REQUIRED) diff --git a/plugins/multitasking/multitaskingwidget.cpp b/plugins/multitasking/multitaskingwidget.cpp index 143820c..577bee7 100644 --- a/plugins/multitasking/multitaskingwidget.cpp +++ b/plugins/multitasking/multitaskingwidget.cpp @@ -5,4 +5,5 @@ #include "multitaskingwidget.h" #include "multitaskingplugin.h" +#include "imageutil.h" #include @@ -30,7 +31,7 @@ void MultitaskingWidget::paintEvent(QPaintEvent *e) if (Dock::Fashion == qApp->property(PROP_DISPLAY_MODE).value()) { - icon = QIcon::fromTheme("deepin-multitasking-view", m_icon).pixmap(size() * 0.8 * ratio); + icon = ImageUtil::loadSvg("deepin-multitasking-view", QString(":/icons/"), int(size().width() * 0.8), ratio); } else { - icon = QIcon::fromTheme("deepin-multitasking-view", m_icon).pixmap(size() * 0.7 * ratio); + icon = ImageUtil::loadSvg("deepin-multitasking-view", QString(":/icons/"), int(size().width() * 0.7), ratio); } diff --git a/plugins/onboard/onboarditem.cpp b/plugins/onboard/onboarditem.cpp index 2209e3a..9bc935f 100644 --- a/plugins/onboard/onboarditem.cpp +++ b/plugins/onboard/onboarditem.cpp @@ -96,5 +96,6 @@ const QPixmap OnboardItem::loadSvg(const QString &fileName, const QSize &size) c QPixmap pixmap; - pixmap = QIcon::fromTheme(fileName, m_icon).pixmap(size * ratio); + QSize pixmapSize = QCoreApplication::testAttribute(Qt::AA_UseHighDpiPixmaps) ? size : (size * ratio); + pixmap = QIcon::fromTheme(fileName, m_icon).pixmap(pixmapSize); pixmap.setDevicePixelRatio(ratio); diff --git a/plugins/overlay-warning/overlaywarningwidget.cpp b/plugins/overlay-warning/overlaywarningwidget.cpp index c3f6953..e144407 100644 --- a/plugins/overlay-warning/overlaywarningwidget.cpp +++ b/plugins/overlay-warning/overlaywarningwidget.cpp @@ -51,5 +51,6 @@ const QPixmap OverlayWarningWidget::loadSvg(const QString &fileName, const QSize QPixmap pixmap; - pixmap = QIcon::fromTheme(fileName).pixmap(size * ratio); + QSize pixmapSize = QCoreApplication::testAttribute(Qt::AA_UseHighDpiPixmaps) ? size : (size * ratio); + pixmap = QIcon::fromTheme(fileName).pixmap(pixmapSize); pixmap.setDevicePixelRatio(ratio); diff --git a/plugins/power/powerstatuswidget.cpp b/plugins/power/powerstatuswidget.cpp index 5414367..00da85f 100644 --- a/plugins/power/powerstatuswidget.cpp +++ b/plugins/power/powerstatuswidget.cpp @@ -97,6 +97,7 @@ QPixmap PowerStatusWidget::getBatteryIcon() const auto ratio = devicePixelRatioF(); + QSize pixmapSize = QCoreApplication::testAttribute(Qt::AA_UseHighDpiPixmaps) ? QSize(20, 20) : (QSize(20, 20) * ratio); QPixmap pix = QIcon::fromTheme(iconStr, - QIcon::fromTheme(":/batteryicons/resources/batteryicons/" + iconStr + ".svg")).pixmap(QSize(20, 20) * ratio); + QIcon::fromTheme(":/batteryicons/resources/batteryicons/" + iconStr + ".svg")).pixmap(pixmapSize); pix.setDevicePixelRatio(ratio); diff --git a/plugins/show-desktop/CMakeLists.txt b/plugins/show-desktop/CMakeLists.txt index d98d5b7..3296a4c 100644 --- a/plugins/show-desktop/CMakeLists.txt +++ b/plugins/show-desktop/CMakeLists.txt @@ -5,5 +5,8 @@ project(${PLUGIN_NAME}) # Sources files -file(GLOB SRCS "*.h" "*.cpp" "../../widgets/*.h" "../../widgets/*.cpp") +file(GLOB SRCS "*.h" "*.cpp" "../../widgets/*.h" "../../widgets/*.cpp" + "../../frame/util/imageutil.h" + "../../frame/util/imageutil.cpp" + ) find_package(PkgConfig REQUIRED) diff --git a/plugins/show-desktop/showdesktopwidget.cpp b/plugins/show-desktop/showdesktopwidget.cpp index e31942f..9d796f0 100644 --- a/plugins/show-desktop/showdesktopwidget.cpp +++ b/plugins/show-desktop/showdesktopwidget.cpp @@ -5,4 +5,5 @@ #include "showdesktopwidget.h" #include "showdesktopplugin.h" +#include "imageutil.h" #include @@ -28,7 +29,7 @@ void ShowDesktopWidget::paintEvent(QPaintEvent *e) if (Dock::Fashion == qApp->property(PROP_DISPLAY_MODE).value()) { - icon = QIcon::fromTheme("deepin-toggle-desktop").pixmap(size() * 0.8 * ratio); + icon = ImageUtil::loadSvg("deepin-toggle-desktop", QString(), int(size().width() * 0.8), ratio); } else { - icon = QIcon::fromTheme("deepin-toggle-desktop").pixmap(size() * 0.7 * ratio); + icon = ImageUtil::loadSvg("deepin-toggle-desktop", QString(), int(size().width() * 0.7), ratio); } diff --git a/plugins/shutdown/CMakeLists.txt b/plugins/shutdown/CMakeLists.txt index 2f123a3..6ac0907 100644 --- a/plugins/shutdown/CMakeLists.txt +++ b/plugins/shutdown/CMakeLists.txt @@ -5,5 +5,8 @@ project(${PLUGIN_NAME}) # Sources files -file(GLOB_RECURSE SRCS "*.h" "*.cpp" "../../widgets/*.h" "../../widgets/*.cpp") +file(GLOB_RECURSE SRCS "*.h" "*.cpp" "../../widgets/*.h" "../../widgets/*.cpp" + "../../frame/util/imageutil.h" + "../../frame/util/imageutil.cpp" + ) find_package(PkgConfig REQUIRED) diff --git a/plugins/shutdown/shutdownwidget.cpp b/plugins/shutdown/shutdownwidget.cpp index 53e5864..6aa7a0a 100644 --- a/plugins/shutdown/shutdownwidget.cpp +++ b/plugins/shutdown/shutdownwidget.cpp @@ -4,4 +4,5 @@ #include "shutdownwidget.h" +#include "../frame/util/imageutil.h" #include @@ -100,5 +101,6 @@ const QPixmap ShutdownWidget::loadSvg(const QString &fileName, const QSize &size QPixmap pixmap; - pixmap = QIcon::fromTheme(fileName, m_icon).pixmap(size * ratio); + QSize pixmapSize = QCoreApplication::testAttribute(Qt::AA_UseHighDpiPixmaps) ? size : (size * ratio); + pixmap = QIcon::fromTheme(fileName, m_icon).pixmap(pixmapSize); pixmap.setDevicePixelRatio(ratio); diff --git a/plugins/trash/trashwidget.cpp b/plugins/trash/trashwidget.cpp index 9383fb2..7061658 100644 --- a/plugins/trash/trashwidget.cpp +++ b/plugins/trash/trashwidget.cpp @@ -196,5 +196,6 @@ void TrashWidget::updateIcon() const auto ratio = devicePixelRatioF(); - m_icon = icon.pixmap(size * ratio, size * ratio); + int pixmapSize = QCoreApplication::testAttribute(Qt::AA_UseHighDpiPixmaps) ? size : int(size * ratio); + m_icon = icon.pixmap(pixmapSize, pixmapSize); m_icon.setDevicePixelRatio(ratio); } -- libgit2 1.3.2