fix: 修复高分辨率快捷面板显示异常的问题

1、高缩放率下,图标尺寸需要除以缩放率
2、拖动快捷面板图标到任务栏的时候,设置拖动图标

Log: 修复高分辨率快捷面板显示异常的问题
Influence: 高分辨率,任务栏快捷面板,观察全局搜索图标显示
Bug: https://pms.uniontech.com/bug-view-176421.html
Change-Id: Iddd5dfc6851a9d8a3f35be10cdfa780c11862a4c
This commit is contained in:
donghualin 2022-12-15 11:59:19 +08:00
parent ef7d532008
commit 7a8016abe5
4 changed files with 13 additions and 6 deletions

View File

@ -9,6 +9,7 @@
#include <QDebug>
#include <QCoreApplication>
#include <QDragEnterEvent>
#include <QGuiApplication>
QuickPluginMimeData::QuickPluginMimeData(PluginsItemInterface *item, QDrag *drag)
: QMimeData()
@ -46,7 +47,7 @@ QuickIconDrag::QuickIconDrag(QObject *dragSource, const QPixmap &pixmap)
connect(m_timer, &QTimer::timeout, this, &QuickIconDrag::onDragMove);
m_timer->start();
m_imageWidget->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowDoesNotAcceptFocus);
m_imageWidget->setWindowFlags(Qt::FramelessWindowHint | Qt::Tool | Qt::WindowDoesNotAcceptFocus);
m_imageWidget->setAttribute(Qt::WA_TransparentForMouseEvents);
m_imageWidget->installEventFilter(this);
useSourcePixmap();
@ -64,7 +65,7 @@ void QuickIconDrag::updatePixmap(QPixmap pixmap)
m_pixmap = pixmap;
m_useSourcePixmap = false;
m_imageWidget->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowDoesNotAcceptFocus | Qt::WindowStaysOnTopHint | Qt::X11BypassWindowManagerHint);
m_imageWidget->setWindowFlags(Qt::FramelessWindowHint | Qt::Tool | Qt::WindowDoesNotAcceptFocus | Qt::WindowStaysOnTopHint | Qt::X11BypassWindowManagerHint);
m_imageWidget->setFixedSize(pixmap.size());
m_imageWidget->show();
m_imageWidget->raise();
@ -74,7 +75,7 @@ void QuickIconDrag::updatePixmap(QPixmap pixmap)
void QuickIconDrag::useSourcePixmap()
{
m_useSourcePixmap = true;
m_imageWidget->setFixedSize(m_sourcePixmap.size());
m_imageWidget->setFixedSize(m_sourcePixmap.size() / qApp->devicePixelRatio());
m_imageWidget->show();
m_imageWidget->raise();
m_imageWidget->update();

View File

@ -134,7 +134,7 @@ QPixmap SingleQuickItem::pixmap() const
}
}
return icon.pixmap(pixmapWidth, pixmapHeight);
return icon.pixmap(pixmapWidth / qApp->devicePixelRatio(), pixmapHeight / qApp->devicePixelRatio());
}
QLabel *SingleQuickItem::findChildLabel(QWidget *parent, const QString &childObjectName) const

View File

@ -178,7 +178,7 @@ QIcon PluginAdapter::icon(const DockPart &dockPart, DGuiApplicationHelper::Color
// 如果图标为空就使用itemWidget的截图作为它的图标这种一般是适用于老版本插件或者没有实现v23接口的插件
QSize oldSize = itemWidget->size();
itemWidget->setFixedSize(ICONWIDTH, ICONHEIGHT);
itemWidget->setFixedSize(ICONWIDTH / qApp->devicePixelRatio(), ICONHEIGHT / qApp->devicePixelRatio());
QPixmap pixmap = itemWidget->grab();
itemWidget->setFixedSize(oldSize);
return pixmap;

View File

@ -280,7 +280,13 @@ void QuickPluginWindow::dragEnterEvent(QDragEnterEvent *event)
{
m_dragEnterMimeData = const_cast<QuickPluginMimeData *>(qobject_cast<const QuickPluginMimeData *>(event->mimeData()));
if (m_dragEnterMimeData) {
QIcon icon = m_dragEnterMimeData->pluginItemInterface()->icon(DockPart::QuickShow);
PluginsItemInterface *plugin = m_dragEnterMimeData->pluginItemInterface();
QIcon icon = plugin->icon(DockPart::QuickShow);
if (icon.isNull()) {
QWidget *widget = plugin->itemWidget(QuickSettingController::instance()->itemKey(plugin));
if (widget)
icon = widget->grab();
}
QuickIconDrag *drag = qobject_cast<QuickIconDrag *>(m_dragEnterMimeData->drag());
if (drag && !icon.isNull()) {
QPixmap pixmap = icon.pixmap(QSize(16, 16));