From 9b6d09ffabed98dd78c1d88b2cc1aebc9ad9f843 Mon Sep 17 00:00:00 2001 From: donghualin Date: Sat, 14 Jan 2023 16:41:35 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=9B=BE=E6=A0=87?= =?UTF-8?q?=E5=BC=82=E5=B8=B8=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1、修复拖动过程中组合图标尺寸显示异常的问题 2、修复从控制中心设置插件显示隐藏引起的异常问题 3、修复高缩放率下的组合图标显示异常问题 4、修复蓝牙面板在不同的主题下颜色的显示的问题 5、社区版键盘布局默认在任务栏显示 Log: 修复图标显示的问题 Influence: 高缩放率下,观察组合图标显示是否正常 Bug: https://pms.uniontech.com/bug-view-181723.html Change-Id: Id351063095a2290731876ce896c2cd05a32d4ec0 --- configs/com.deepin.dde.dock.dconfig.json | 2 +- frame/window/quickpluginwindow.cpp | 8 +--- plugins/bluetooth/bluetoothmainwidget.cpp | 21 ++++++-- plugins/bluetooth/bluetoothmainwidget.h | 1 + .../pluginmanager/dockplugincontroller.cpp | 14 ++++-- plugins/pluginmanager/dockplugincontroller.h | 1 + plugins/pluginmanager/iconmanager.cpp | 48 +++++++++++-------- 7 files changed, 60 insertions(+), 35 deletions(-) diff --git a/configs/com.deepin.dde.dock.dconfig.json b/configs/com.deepin.dde.dock.dconfig.json index cc0b41ee0..2e68253d8 100644 --- a/configs/com.deepin.dde.dock.dconfig.json +++ b/configs/com.deepin.dde.dock.dconfig.json @@ -27,7 +27,7 @@ "visibility": "private" }, "Dock_Quick_Tray_Name": { - "value": ["fcitx"], + "value": ["fcitx", "indicator:keybord_layout"], "serial": 0, "flags": [], "name": "显示在任务栏上的托盘图标", diff --git a/frame/window/quickpluginwindow.cpp b/frame/window/quickpluginwindow.cpp index 5ce16691b..0016b5df7 100644 --- a/frame/window/quickpluginwindow.cpp +++ b/frame/window/quickpluginwindow.cpp @@ -837,14 +837,10 @@ void QuickDockItem::paintEvent(QPaintEvent *event) if (pixmap.isNull()) return QWidget::paintEvent(event); - QSize size = pixmap.size(); - QRect pixmapRect = QRect(QPoint((rect().width() - size.width()) / 2, (rect().height() - size.height()) / 2), pixmap.size()); pixmap.setDevicePixelRatio(qApp->devicePixelRatio()); - if (m_pluginItem->pluginSizePolicy() == PluginsItemInterface::PluginSizePolicy::System) { - size = QCoreApplication::testAttribute(Qt::AA_UseHighDpiPixmaps) ? size / qApp->devicePixelRatio(): size; - pixmapRect = QRect(QPoint((rect().width() - size.width()) / 2, (rect().height() - size.height()) / 2), size); - } + QSize size = QCoreApplication::testAttribute(Qt::AA_UseHighDpiPixmaps) ? pixmap.size() / qApp->devicePixelRatio(): pixmap.size(); + QRect pixmapRect = QRect(QPoint((rect().width() - size.width()) / 2, (rect().height() - size.height()) / 2), size); painter.drawPixmap(pixmapRect, pixmap); } diff --git a/plugins/bluetooth/bluetoothmainwidget.cpp b/plugins/bluetooth/bluetoothmainwidget.cpp index eff4cff24..d7782b1ae 100644 --- a/plugins/bluetooth/bluetoothmainwidget.cpp +++ b/plugins/bluetooth/bluetoothmainwidget.cpp @@ -42,6 +42,7 @@ BluetoothMainWidget::BluetoothMainWidget(AdaptersManager *adapterManager, QWidge , m_nameLabel(new QLabel(this)) , m_stateLabel(new QLabel(this)) , m_expandLabel(new QLabel(this)) + , m_mouseEnter(false) { initUi(); initConnection(); @@ -66,8 +67,11 @@ bool BluetoothMainWidget::eventFilter(QObject *watcher, QEvent *event) QPainterPath path; path.addEllipse(ptCenter, size / 2 - 1, size / 2 - 1); // 设置黑色背景色 - QColor backColor(Qt::black); - backColor.setAlphaF(0.1); + QColor backColor = (DGuiApplicationHelper::instance()->themeType() == DGuiApplicationHelper::ColorType::LightType ? Qt::black : Qt::white); + if (DGuiApplicationHelper::instance()->themeType() == DGuiApplicationHelper::ColorType::LightType) + backColor.setAlphaF(m_mouseEnter ? 0.2 : 0.1); + else + backColor.setAlphaF(m_mouseEnter ? 0.1 : 0.2); painter.setBrush(backColor); painter.fillPath(path, backColor); // 添加图标 @@ -81,6 +85,16 @@ bool BluetoothMainWidget::eventFilter(QObject *watcher, QEvent *event) painter.drawPixmap(QPoint(ptCenter.x() - pixmap.size().width() / 2, ptCenter.y() - pixmap.size().height() / 2), pixmap); return true; } + case QEvent::Enter: { + m_mouseEnter = true; + m_iconWidget->update(); + break; + } + case QEvent::Leave: { + m_mouseEnter = false; + m_iconWidget->update(); + break; + } case QEvent::MouseButtonRelease: { bool status = !(isOpen()); for (const Adapter *adapter : m_adapterManager->adapters()) @@ -115,10 +129,7 @@ void BluetoothMainWidget::initUi() QFont nameFont = DFontSizeManager::instance()->t6(); nameFont.setBold(true); - QPalette pe; - pe.setColor(QPalette::WindowText, Qt::black); m_nameLabel->setParent(textWidget); - m_nameLabel->setPalette(pe); m_nameLabel->setFont(nameFont); m_stateLabel->setParent(textWidget); diff --git a/plugins/bluetooth/bluetoothmainwidget.h b/plugins/bluetooth/bluetoothmainwidget.h index 083fcc275..8cd7f9dbd 100644 --- a/plugins/bluetooth/bluetoothmainwidget.h +++ b/plugins/bluetooth/bluetoothmainwidget.h @@ -59,6 +59,7 @@ private: QLabel *m_nameLabel; QLabel *m_stateLabel; QLabel *m_expandLabel; + bool m_mouseEnter; }; #endif // BLUETOOTHMAINWIDGET_H diff --git a/plugins/pluginmanager/dockplugincontroller.cpp b/plugins/pluginmanager/dockplugincontroller.cpp index 24a51ca23..d3e6f2396 100644 --- a/plugins/pluginmanager/dockplugincontroller.cpp +++ b/plugins/pluginmanager/dockplugincontroller.cpp @@ -660,6 +660,12 @@ bool DockPluginController::eventFilter(QObject *object, QEvent *event) } bool DockPluginController::pluginCanDock(PluginsItemInterface *plugin) const +{ + const QStringList configPlugins = SETTINGCONFIG->value(DOCK_QUICK_PLUGINS).toStringList(); + return pluginCanDock(configPlugins, plugin); +} + +bool DockPluginController::pluginCanDock(const QStringList &config, PluginsItemInterface *plugin) const { // 1、如果插件是强制驻留任务栏,则始终显示 // 2、如果插件是托盘插件,例如U盘插件,则始终显示 @@ -668,8 +674,7 @@ bool DockPluginController::pluginCanDock(PluginsItemInterface *plugin) const return true; // 3、插件已经驻留在任务栏,则始终显示 - const QStringList configPlugins = SETTINGCONFIG->value(DOCK_QUICK_PLUGINS).toStringList(); - return configPlugins.contains(plugin->pluginName()); + return config.contains(plugin->pluginName()); } void DockPluginController::updateDockInfo(PluginsItemInterface * const itemInter, const DockPart &part) @@ -687,13 +692,14 @@ void DockPluginController::onConfigChanged(const QString &key, const QVariant &v // 这里只处理工具插件(回收站)和系统插件(电源插件) for (PluginsItemInterface *plugin : plugins()) { QString itemKey = this->itemKey(plugin); - if (!pluginNames.contains(plugin->pluginName()) && isPluginLoaded(plugin)) { + bool canDock = pluginCanDock(pluginNames, plugin); + if (!canDock && isPluginLoaded(plugin)) { // 如果当前配置中不包含当前插件,但是当前插件已经加载,那么就移除该插件 removePluginItem(plugin, itemKey); QWidget *itemWidget = plugin->itemWidget(itemKey); if (itemWidget) itemWidget->setVisible(false); - } else if (pluginNames.contains(plugin->pluginName()) && !isPluginLoaded(plugin)) { + } else if (canDock && !isPluginLoaded(plugin)) { // 如果当前配置中包含当前插件,但是当前插件并未加载,那么就加载该插件 addPluginItem(plugin, itemKey); // 只有工具插件是通过QWidget的方式进行显示的,因此,这里只处理工具插件 diff --git a/plugins/pluginmanager/dockplugincontroller.h b/plugins/pluginmanager/dockplugincontroller.h index 1aa09c1cc..7b81994ee 100644 --- a/plugins/pluginmanager/dockplugincontroller.h +++ b/plugins/pluginmanager/dockplugincontroller.h @@ -69,6 +69,7 @@ protected: bool eventFilter(QObject *object, QEvent *event) override; bool pluginCanDock(PluginsItemInterface *plugin) const; + bool pluginCanDock(const QStringList &config, PluginsItemInterface *plugin) const; void updateDockInfo(PluginsItemInterface * const itemInter, const DockPart &part) override; private: diff --git a/plugins/pluginmanager/iconmanager.cpp b/plugins/pluginmanager/iconmanager.cpp index 563534ba9..80ffaa81c 100644 --- a/plugins/pluginmanager/iconmanager.cpp +++ b/plugins/pluginmanager/iconmanager.cpp @@ -33,6 +33,8 @@ #define ITEMSPACE 6 #define ITEMHEIGHT 16 #define ITEMWIDTH 18 +#define MINISIZE 1 +#define STARTPOS 2 static QStringList pluginNames = {"power", "sound", "network"}; @@ -84,34 +86,44 @@ QPixmap IconManager::pixmap(DGuiApplicationHelper::ColorType colorType) const return pixmap; } + int itemSpace = 0; + if (m_position == Dock::Position::Top || m_position == Dock::Position::Bottom) + itemSpace = (m_displayMode == Dock::DisplayMode::Efficient ? 8 : 10); + else + itemSpace = 2; // 组合图标 QPixmap pixmap; if (m_position == Dock::Position::Top || m_position == Dock::Position::Bottom) { // 高效模式下,高度固定为30, 时尚模式下,高度随着任务栏的大小变化而变化 int iconHeight = (m_displayMode == Dock::DisplayMode::Efficient ? 30 : m_size.height() - 8); - int iconWidth = ITEMSPACE; + if (iconHeight <= 0) + iconHeight = MINISIZE; + int iconWidth = STARTPOS; for (PluginsItemInterface *plugin : plugins) { QIcon icon = plugin->icon(DockPart::QuickShow); - QSize iconSize(ITEMWIDTH, ITEMHEIGHT); + QSize iconSize = QSize(ITEMWIDTH, ITEMHEIGHT) * qApp->devicePixelRatio(); QList iconSizes = icon.availableSizes(); if (iconSizes.size() > 0) - iconSize = iconSizes.first() / qApp->devicePixelRatio(); - iconWidth += iconSize.width() + ITEMSPACE; + iconSize = iconSizes.first(); + iconWidth += iconSize.width(); } - iconWidth += ITEMSPACE; + iconWidth += itemSpace * (plugins.size() - 1); pixmap = QPixmap(iconWidth, iconHeight); } else { // 左右方向,高效模式下,宽度固定为30,时尚模式下,宽度随任务栏的大小变化而变化 int iconWidth = m_displayMode == Dock::DisplayMode::Efficient ? 30 : m_size.width() - 8; - int iconHeight = ITEMHEIGHT; + if (iconWidth <= 0) + iconWidth = MINISIZE; + int iconHeight = STARTPOS; for (PluginsItemInterface *plugin : plugins) { QIcon icon = plugin->icon(DockPart::QuickShow); - QSize iconSize(ITEMWIDTH, ITEMHEIGHT); + QSize iconSize = QSize(ITEMWIDTH, ITEMHEIGHT) * qApp->devicePixelRatio(); QList iconSizes = icon.availableSizes(); if (iconSizes.size() > 0) - iconSize = iconSizes.first() / qApp->devicePixelRatio(); - iconHeight += iconSize.height() + ITEMSPACE; + iconSize = iconSizes.first(); + iconHeight += iconSize.height(); } + iconHeight += itemSpace * (plugins.size() - 1); pixmap = QPixmap(iconWidth, iconHeight); } @@ -119,7 +131,7 @@ QPixmap IconManager::pixmap(DGuiApplicationHelper::ColorType colorType) const QPainter painter(&pixmap); painter.setRenderHints(QPainter::SmoothPixmapTransform | QPainter::Antialiasing); if (m_position == Dock::Position::Top || m_position == Dock::Position::Bottom) { - int x = ITEMSPACE; + int x = STARTPOS; for (PluginsItemInterface *plugin : plugins) { QIcon icon = plugin->icon(DockPart::QuickShow); QSize iconSize = QSize(ITEMWIDTH, ITEMHEIGHT) * qApp->devicePixelRatio(); @@ -127,24 +139,22 @@ QPixmap IconManager::pixmap(DGuiApplicationHelper::ColorType colorType) const if (iconSizes.size() > 0) iconSize = iconSizes.first(); QPixmap pixmapDraw = icon.pixmap(iconSize); - QSize realIconSize = iconSize / qApp->devicePixelRatio(); - QRect rectPixmap(QPoint(x, (pixmap.height() - realIconSize.height()) / 2), realIconSize); + QRect rectPixmap(QPoint(x, (pixmap.height() - iconSize.height()) / 2), iconSize); painter.drawPixmap(rectPixmap, pixmapDraw); - x += ITEMWIDTH + ITEMSPACE; + x += iconSize.width() + itemSpace; } } else { - int y = ITEMSPACE; + int y = STARTPOS; for (PluginsItemInterface *plugin : plugins) { QIcon icon = plugin->icon(DockPart::QuickShow); - QSize iconSize(ITEMWIDTH, ITEMHEIGHT); + QSize iconSize = QSize(ITEMWIDTH, ITEMHEIGHT) * qApp->devicePixelRatio(); QList iconSizes = icon.availableSizes(); if (iconSizes.size() > 0) - iconSize = iconSizes.first() / qApp->devicePixelRatio(); - + iconSize = iconSizes.first(); QPixmap pixmapDraw = icon.pixmap(iconSize); - QRect rectPixmap(QPoint((pixmap.width() - ITEMWIDTH) / 2, y), iconSize); + QRect rectPixmap(QPoint((pixmap.width() - iconSize.width()) / 2, y), iconSize); painter.drawPixmap(rectPixmap, pixmapDraw); - y += ITEMHEIGHT + ITEMSPACE; + y += iconSize.height() + itemSpace; } } painter.end();