fix: 修复任务栏图标模糊问题 (#729)

高分屏支持设置错误

Log: 修复任务栏图标模糊问题
Bug: https://pms.uniontech.com/bug-view-174459.html
Influence: 缩放后任务栏-各插件图标,右键菜单图标
This commit is contained in:
caixr23 2022-11-30 16:46:54 +08:00 committed by GitHub
parent 4dc7185e7c
commit 3e26d6ca35
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 33 additions and 16 deletions

View File

@ -171,7 +171,7 @@ int main(int argc, char *argv[])
app.setApplicationVersion("2.0");
app.loadTranslator();
app.setAttribute(Qt::AA_EnableHighDpiScaling, true);
app.setAttribute(Qt::AA_UseHighDpiPixmaps, false);
app.setAttribute(Qt::AA_UseHighDpiPixmaps, true);
// 自动化标记由此开始
QAccessible::installFactory(accessibleFactory);

View File

@ -7,7 +7,6 @@
#include <QIcon>
#include <QPainter>
#include <QCursor>
#include <QGSettings>
#include <QDebug>
#include <X11/Xcursor/Xcursor.h>
@ -15,13 +14,14 @@
const QPixmap ImageUtil::loadSvg(const QString &iconName, const QString &localPath, const int size, const qreal ratio)
{
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);
pixmap.fill(Qt::transparent);

View File

@ -4,7 +4,10 @@ set(PLUGIN_NAME "multitasking")
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)
find_package(Qt5Widgets REQUIRED)

View File

@ -4,6 +4,7 @@
#include "multitaskingwidget.h"
#include "multitaskingplugin.h"
#include "imageutil.h"
#include <QPainter>
#include <QIcon>
@ -29,9 +30,9 @@ void MultitaskingWidget::paintEvent(QPaintEvent *e)
QPixmap icon;
if (Dock::Fashion == qApp->property(PROP_DISPLAY_MODE).value<Dock::DisplayMode>()) {
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);
}
icon.setDevicePixelRatio(ratio);

View File

@ -95,7 +95,8 @@ const QPixmap OnboardItem::loadSvg(const QString &fileName, const QSize &size) c
const auto ratio = devicePixelRatioF();
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);
return pixmap;

View File

@ -50,7 +50,8 @@ const QPixmap OverlayWarningWidget::loadSvg(const QString &fileName, const QSize
const auto ratio = devicePixelRatioF();
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);
return pixmap;

View File

@ -96,8 +96,9 @@ QPixmap PowerStatusWidget::getBatteryIcon()
iconStr.append(PLUGIN_MIN_ICON_NAME);
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);
return pix;

View File

@ -4,7 +4,10 @@ set(PLUGIN_NAME "show-desktop")
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)
find_package(Qt5Widgets REQUIRED)

View File

@ -4,6 +4,7 @@
#include "showdesktopwidget.h"
#include "showdesktopplugin.h"
#include "imageutil.h"
#include <QPainter>
#include <QIcon>
@ -27,9 +28,9 @@ void ShowDesktopWidget::paintEvent(QPaintEvent *e)
QPixmap icon;
if (Dock::Fashion == qApp->property(PROP_DISPLAY_MODE).value<Dock::DisplayMode>()) {
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);
}
icon.setDevicePixelRatio(ratio);

View File

@ -4,7 +4,10 @@ set(PLUGIN_NAME "shutdown")
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)
find_package(Qt5Widgets REQUIRED)

View File

@ -3,6 +3,7 @@
// SPDX-License-Identifier: LGPL-3.0-or-later
#include "shutdownwidget.h"
#include "../frame/util/imageutil.h"
#include <QSvgRenderer>
#include <QPainter>
@ -99,7 +100,8 @@ const QPixmap ShutdownWidget::loadSvg(const QString &fileName, const QSize &size
const auto ratio = devicePixelRatioF();
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);
return pixmap;

View File

@ -195,7 +195,8 @@ void TrashWidget::updateIcon()
QIcon icon = QIcon::fromTheme(iconString, m_defaulticon);
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);
}