From 50dad254429a94f217e18a6a12d49402d98067b7 Mon Sep 17 00:00:00 2001 From: caixiangrong Date: Mon, 30 Jan 2023 13:14:32 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E6=94=B9=E6=8F=92=E4=BB=B6?= =?UTF-8?q?=E5=8C=BA=E5=9F=9F=E5=87=BA=E7=8E=B0=E9=87=8D=E5=A4=8D=E7=9A=84?= =?UTF-8?q?=E7=94=B5=E6=B1=A0=E5=9B=BE=E6=A0=87=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1.修改电池图标状态刷新处理 2.将电池插件改到快捷面板内 3.快捷面板组合图标改为默认图标 Log: 修改插件区域出现重复的电池图标问题 Bug: https://pms.uniontech.com/bug-view-184085.html Influence: 任务栏-电池图标状态刷新 Change-Id: I8af36acfd9a42efa186338c115f33255af5c1fa6 --- configs/com.deepin.dde.dock.dconfig.json | 4 +- plugins/pluginmanager/iconmanager.cpp | 118 ++---------------- plugins/pluginmanager/iconmanager.h | 3 - plugins/pluginmanager/pluginmanager.cpp | 24 ---- plugins/pluginmanager/pluginmanager.h | 1 - plugins/pluginmanager/pluginmanager.qrc | 5 - .../built-in-icons/dock-control-panel.dci | Bin 0 -> 1558 bytes .../pluginmanager/resources/dock_control.dci | Bin 767 -> 0 bytes .../pluginmanager/resources/pluginmanager.qrc | 5 + plugins/power/powerplugin.cpp | 48 ++++++- plugins/power/powerplugin.h | 4 + 11 files changed, 63 insertions(+), 149 deletions(-) delete mode 100644 plugins/pluginmanager/pluginmanager.qrc create mode 100644 plugins/pluginmanager/resources/built-in-icons/dock-control-panel.dci delete mode 100644 plugins/pluginmanager/resources/dock_control.dci create mode 100644 plugins/pluginmanager/resources/pluginmanager.qrc diff --git a/configs/com.deepin.dde.dock.dconfig.json b/configs/com.deepin.dde.dock.dconfig.json index 2e68253d8..6b1f34a47 100644 --- a/configs/com.deepin.dde.dock.dconfig.json +++ b/configs/com.deepin.dde.dock.dconfig.json @@ -17,7 +17,7 @@ "visibility":"public" }, "Dock_Quick_Plugins": { - "value": ["shutdown", "trash"], + "value": ["power", "network", "shutdown", "trash"], "serial": 0, "flags": [], "name": "显示在任务栏上的快捷插件", @@ -37,4 +37,4 @@ "visibility": "private" } } -} \ No newline at end of file +} diff --git a/plugins/pluginmanager/iconmanager.cpp b/plugins/pluginmanager/iconmanager.cpp index 80ffaa81c..8d1103cd8 100644 --- a/plugins/pluginmanager/iconmanager.cpp +++ b/plugins/pluginmanager/iconmanager.cpp @@ -31,29 +31,21 @@ #include #define ITEMSPACE 6 -#define ITEMHEIGHT 16 -#define ITEMWIDTH 18 +#define IMAGESIZE 12 +#define ITEMSIZE 18 #define MINISIZE 1 #define STARTPOS 2 -static QStringList pluginNames = {"power", "sound", "network"}; - DGUI_USE_NAMESPACE IconManager::IconManager(DockPluginController *pluginController, QObject *parent) : QObject{parent} , m_pluginController(pluginController) - , m_size(QSize(ITEMWIDTH, ITEMHEIGHT)) , m_position(Dock::Position::Bottom) , m_displayMode(Dock::DisplayMode::Efficient) { } -void IconManager::updateSize(QSize size) -{ - m_size = size; -} - void IconManager::setPosition(Dock::Position position) { m_position = position; @@ -66,104 +58,14 @@ void IconManager::setDisplayMode(Dock::DisplayMode displayMode) QPixmap IconManager::pixmap(DGuiApplicationHelper::ColorType colorType) const { - QList plugins; - for (const QString &pluginName : pluginNames) { - PluginsItemInterface *plugin = findPlugin(pluginName); - if (plugin) - plugins << plugin; - } - - if (plugins.size() < 2) { - // 缺省图标 - DDciIcon::Theme theme = DGuiApplicationHelper::instance()->themeType() == DGuiApplicationHelper::DarkType ? DDciIcon::Light : DDciIcon::Dark; - DDciIcon dciIcon(QString(":/resources/dock_control.dci")); - QPixmap pixmap = dciIcon.pixmap(QCoreApplication::testAttribute(Qt::AA_UseHighDpiPixmaps) ? 1 : qApp->devicePixelRatio(), ITEMHEIGHT, theme, DDciIcon::Normal); - QColor foreColor = (colorType == DGuiApplicationHelper::ColorType::DarkType ? Qt::white : Qt::black); - foreColor.setAlphaF(0.8); - QPainter pa(&pixmap); - pa.setCompositionMode(QPainter::CompositionMode_SourceIn); - pa.fillRect(pixmap.rect(), foreColor); - 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); - if (iconHeight <= 0) - iconHeight = MINISIZE; - int iconWidth = STARTPOS; - for (PluginsItemInterface *plugin : plugins) { - QIcon icon = plugin->icon(DockPart::QuickShow); - QSize iconSize = QSize(ITEMWIDTH, ITEMHEIGHT) * qApp->devicePixelRatio(); - QList iconSizes = icon.availableSizes(); - if (iconSizes.size() > 0) - iconSize = iconSizes.first(); - iconWidth += iconSize.width(); - } - iconWidth += itemSpace * (plugins.size() - 1); - pixmap = QPixmap(iconWidth, iconHeight); - } else { - // 左右方向,高效模式下,宽度固定为30,时尚模式下,宽度随任务栏的大小变化而变化 - int iconWidth = m_displayMode == Dock::DisplayMode::Efficient ? 30 : m_size.width() - 8; - if (iconWidth <= 0) - iconWidth = MINISIZE; - int iconHeight = STARTPOS; - for (PluginsItemInterface *plugin : plugins) { - QIcon icon = plugin->icon(DockPart::QuickShow); - QSize iconSize = QSize(ITEMWIDTH, ITEMHEIGHT) * qApp->devicePixelRatio(); - QList iconSizes = icon.availableSizes(); - if (iconSizes.size() > 0) - iconSize = iconSizes.first(); - iconHeight += iconSize.height(); - } - iconHeight += itemSpace * (plugins.size() - 1); - pixmap = QPixmap(iconWidth, iconHeight); - } - - pixmap.fill(Qt::transparent); - QPainter painter(&pixmap); - painter.setRenderHints(QPainter::SmoothPixmapTransform | QPainter::Antialiasing); - if (m_position == Dock::Position::Top || m_position == Dock::Position::Bottom) { - int x = STARTPOS; - for (PluginsItemInterface *plugin : plugins) { - QIcon icon = plugin->icon(DockPart::QuickShow); - QSize iconSize = QSize(ITEMWIDTH, ITEMHEIGHT) * qApp->devicePixelRatio(); - QList iconSizes = icon.availableSizes(); - if (iconSizes.size() > 0) - iconSize = iconSizes.first(); - QPixmap pixmapDraw = icon.pixmap(iconSize); - QRect rectPixmap(QPoint(x, (pixmap.height() - iconSize.height()) / 2), iconSize); - painter.drawPixmap(rectPixmap, pixmapDraw); - x += iconSize.width() + itemSpace; - } - } else { - int y = STARTPOS; - for (PluginsItemInterface *plugin : plugins) { - QIcon icon = plugin->icon(DockPart::QuickShow); - QSize iconSize = QSize(ITEMWIDTH, ITEMHEIGHT) * qApp->devicePixelRatio(); - QList iconSizes = icon.availableSizes(); - if (iconSizes.size() > 0) - iconSize = iconSizes.first(); - QPixmap pixmapDraw = icon.pixmap(iconSize); - QRect rectPixmap(QPoint((pixmap.width() - iconSize.width()) / 2, y), iconSize); - painter.drawPixmap(rectPixmap, pixmapDraw); - y += iconSize.height() + itemSpace; - } - } - painter.end(); - return pixmap; -} - -bool IconManager::isFixedPlugin(PluginsItemInterface *plugin) const -{ - return pluginNames.contains(plugin->pluginName()); + // 缺省图标 + QPixmap pixmap = QIcon::fromTheme("dock-control-panel").pixmap(ITEMSIZE, ITEMSIZE); + QColor foreColor = (colorType == DGuiApplicationHelper::ColorType::DarkType ? Qt::white : Qt::black); + foreColor.setAlphaF(0.8); + QPainter pa(&pixmap); + pa.setCompositionMode(QPainter::CompositionMode_SourceIn); + pa.fillRect(pixmap.rect(), foreColor); + return pixmap.scaled(pixmap.size() / qApp->devicePixelRatio()); } PluginsItemInterface *IconManager::findPlugin(const QString &pluginName) const diff --git a/plugins/pluginmanager/iconmanager.h b/plugins/pluginmanager/iconmanager.h index a51c4bd72..38304a370 100644 --- a/plugins/pluginmanager/iconmanager.h +++ b/plugins/pluginmanager/iconmanager.h @@ -35,18 +35,15 @@ class IconManager : public QObject public: explicit IconManager(DockPluginController *pluginController, QObject *parent = nullptr); - void updateSize(QSize size); void setPosition(Dock::Position position); void setDisplayMode(Dock::DisplayMode displayMode); QPixmap pixmap(DGuiApplicationHelper::ColorType colorType) const; - bool isFixedPlugin(PluginsItemInterface *plugin) const; private: PluginsItemInterface *findPlugin(const QString &pluginName) const; private: DockPluginController *m_pluginController; - QSize m_size; Dock::Position m_position; Dock::DisplayMode m_displayMode; }; diff --git a/plugins/pluginmanager/pluginmanager.cpp b/plugins/pluginmanager/pluginmanager.cpp index 1d9f8338d..46660cfd7 100644 --- a/plugins/pluginmanager/pluginmanager.cpp +++ b/plugins/pluginmanager/pluginmanager.cpp @@ -54,21 +54,6 @@ void PluginManager::init(PluginProxyInterface *proxyInter) m_iconManager->setPosition(position()); m_iconManager->setDisplayMode(displayMode()); - connect(m_dockController.data(), &DockPluginController::pluginInserted, this, [ this ](PluginsItemInterface *itemInter) { - if (m_iconManager->isFixedPlugin(itemInter)) { - m_proxyInter->itemUpdate(this, pluginName()); - } - }); - connect(m_dockController.data(), &DockPluginController::pluginUpdated, this, [ this ](PluginsItemInterface *itemInter) { - if (m_iconManager->isFixedPlugin(itemInter)) { - m_proxyInter->itemUpdate(this, pluginName()); - } - }); - connect(m_dockController.data(), &DockPluginController::pluginRemoved, this, [ this ](PluginsItemInterface *itemInter) { - if (m_iconManager->isFixedPlugin(itemInter)) { - m_proxyInter->itemUpdate(this, pluginName()); - } - }); connect(m_dockController.data(), &DockPluginController::requestAppletVisible, this, [ this ](PluginsItemInterface *itemInter, const QString &itemKey, bool visible) { if (visible) { QWidget *appletWidget = itemInter->itemPopupApplet(itemKey); @@ -123,15 +108,6 @@ PluginsItemInterface::PluginSizePolicy PluginManager::pluginSizePolicy() const return PluginSizePolicy::Custom; } -bool PluginManager::eventHandler(QEvent *event) -{ - if (event->type() == QEvent::Resize) { - QResizeEvent *resizeEvent = static_cast(event); - m_iconManager->updateSize(resizeEvent->size()); - } - return PluginsItemInterface::eventHandler(event); -} - void PluginManager::positionChanged(const Dock::Position position) { m_iconManager->setPosition(position); diff --git a/plugins/pluginmanager/pluginmanager.h b/plugins/pluginmanager/pluginmanager.h index 9a48d2557..eed69c778 100644 --- a/plugins/pluginmanager/pluginmanager.h +++ b/plugins/pluginmanager/pluginmanager.h @@ -49,7 +49,6 @@ public: PluginSizePolicy pluginSizePolicy() const override; protected: - bool eventHandler(QEvent *event) override; void positionChanged(const Dock::Position position) override; void displayModeChanged(const Dock::DisplayMode displayMode) override; diff --git a/plugins/pluginmanager/pluginmanager.qrc b/plugins/pluginmanager/pluginmanager.qrc deleted file mode 100644 index 41792f803..000000000 --- a/plugins/pluginmanager/pluginmanager.qrc +++ /dev/null @@ -1,5 +0,0 @@ - - - resources/dock_control.dci - - diff --git a/plugins/pluginmanager/resources/built-in-icons/dock-control-panel.dci b/plugins/pluginmanager/resources/built-in-icons/dock-control-panel.dci new file mode 100644 index 0000000000000000000000000000000000000000..7fe619708fae0022e4e58c7efbca5efa7a0684a7 GIT binary patch literal 1558 zcmZ>9_GDmWVqjo0G-IFytOuF_0!(@NMY)MNdMSxT*$@%Z$hA=AOva??Lsy*&6<{{h zGtetfO)5ZFKqOxls!mT&ABdoy%gId7DA708hnWrYG+3NSgOQaLF+zBhdRhx=4kOHA z$d-`6egst;j>cx!bZ)S{=rp|0v)EYr4hPHc zBeSmjPG8+v@t~H;Wzx=(`$(L_P>yl{X0;yw?4opa9%)=OWM<`Ie&-s6^Dkv^^1?cGH988_s-UFA#G#OnOt;3a%sCv zqw++##SO7Lzf7=faH{IDVp{p*KXX9w!*vDxiLom_9XRsWKWMMRSB2}p8)t65Wt={D z_m}sVxVuj0aJ^!^csGry%F(xO@t3%OOJ}-nac6Z!1y(!yzUR1-vqSrg^CA6^N^9Yt P_9s6b`u(o8zC#88Xnr7& literal 0 HcmV?d00001 diff --git a/plugins/pluginmanager/resources/dock_control.dci b/plugins/pluginmanager/resources/dock_control.dci deleted file mode 100644 index 38848da3b7a9e524bdef6b868a5d74784234c883..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 767 zcmZ>9_GDmWWME)2G-IFytY?DgX3EPi%1zACOGzxsCda(BP)$t6bacE^o$aHV||#}Fi(TUNirUyxCj^lAV8_7wV>uO!W;%M zmSpk~R7a4fo7*iQJKWVNAS}Sb=PZz|uYZ7B;Jm^A&-VYbq&>4Hzqdb9?ZJ6KmXpKz zAoD^+hJzjs3Ig&i>`cst2Lmi3JSU}OmCw)p@;CpNK}B7?;NSEI+a@l0He=z>mY+U9 zDy<#QTzO_^z07#Z8BSv{i-sl{=ZqIh=ew;K6sI~Gn_bhn!S-}wv3;^$5hl2nB diff --git a/plugins/pluginmanager/resources/pluginmanager.qrc b/plugins/pluginmanager/resources/pluginmanager.qrc new file mode 100644 index 000000000..760cabc9d --- /dev/null +++ b/plugins/pluginmanager/resources/pluginmanager.qrc @@ -0,0 +1,5 @@ + + + built-in-icons/dock-control-panel.dci + + diff --git a/plugins/power/powerplugin.cpp b/plugins/power/powerplugin.cpp index 473ab772c..3c5ff341a 100644 --- a/plugins/power/powerplugin.cpp +++ b/plugins/power/powerplugin.cpp @@ -26,7 +26,9 @@ #include #include +#include +#include #include #define PLUGIN_STATE_KEY "enable" @@ -48,11 +50,13 @@ PowerPlugin::PowerPlugin(QObject *parent) , m_systemPowerInter(nullptr) , m_powerInter(nullptr) , m_preChargeTimer(new QTimer(this)) + , m_quickPanel(nullptr) { m_tipsLabel->setVisible(false); m_tipsLabel->setObjectName("power"); m_preChargeTimer->setInterval(DELAYTIME); m_preChargeTimer->setSingleShot(true); + initQuickPanel(); connect(m_preChargeTimer,&QTimer::timeout,this,&PowerPlugin::refreshTipsData); } @@ -70,6 +74,8 @@ QWidget *PowerPlugin::itemWidget(const QString &itemKey) { if (itemKey == POWER_KEY) return m_powerStatusWidget.data(); + if (itemKey == QUICK_ITEM_KEY) + return m_quickPanel; return nullptr; } @@ -99,7 +105,7 @@ void PowerPlugin::init(PluginProxyInterface *proxyInter) const QString PowerPlugin::itemCommand(const QString &itemKey) { if (itemKey == POWER_KEY) - return QString("dbus-send --print-reply --dest=org.deepin.dde.ControlCenter1 /org/deepin/dde/ControlCenter1 org.deepin.dde.ControlCenter1.ShowPage \"string:power\""); + return QString("dbus-send --print-reply --dest=org.deepin.dde.ControlCenter1 /org/deepin/dde/ControlCenter1 org.deepin.dde.ControlCenter1.ShowPage string:power"); return QString(); } @@ -143,9 +149,14 @@ void PowerPlugin::setSortKey(const QString &itemKey, const int order) QIcon PowerPlugin::icon(const DockPart &dockPart, DGuiApplicationHelper::ColorType themeType) { - // 电池插件不显示在快捷面板上,因此此处返回空图标 - static QIcon batteryIcon; const QPixmap pixmap = m_powerStatusWidget->getBatteryIcon(themeType); + // 快捷面板使用m_quickPanel + if (dockPart == DockPart::QuickPanel) { + m_imageLabel->setPixmap(pixmap); + return QIcon(); + } + + static QIcon batteryIcon; batteryIcon.detach(); batteryIcon.addPixmap(pixmap); return batteryIcon; @@ -153,11 +164,12 @@ QIcon PowerPlugin::icon(const DockPart &dockPart, DGuiApplicationHelper::ColorTy PluginFlags PowerPlugin::flags() const { - // 电池插件只在任务栏上面展示,不在快捷面板展示,并且可以拖动,可以在其前面插入其他插件,不能在控制中心设置是否显示隐藏 + // 电池插件在任务栏上面展示,在快捷面板展示,并且可以拖动,可以在其前面插入其他插件,能在控制中心设置是否显示隐藏 return PluginFlag::Type_Common | PluginFlag::Attribute_CanDrag | PluginFlag::Attribute_CanInsert - | PluginFlag::Attribute_ForceDock; + | PluginFlag::Attribute_CanSetting + | PluginFlag::Quick_Single; } void PowerPlugin::updateBatteryVisible() @@ -182,6 +194,8 @@ void PowerPlugin::loadPlugin() m_powerStatusWidget.reset(new PowerStatusWidget); connect(m_powerStatusWidget.get(), &PowerStatusWidget::iconChanged, this, [ this ] { + m_proxyInter->updateDockInfo(this, DockPart::QuickPanel); + m_proxyInter->updateDockInfo(this, DockPart::QuickShow); m_proxyInter->itemUpdate(this, POWER_KEY); }); @@ -226,7 +240,7 @@ void PowerPlugin::refreshTipsData() const uint percentage = qMin(100.0, qMax(0.0, data.value("Display"))); const QString value = QString("%1%").arg(std::round(percentage)); const int batteryState = m_powerInter->batteryState()["Display"]; - + m_labelText->setText(value); if (m_preChargeTimer->isActive() && m_showTimeToFull) { // 插入电源后,20秒内算作预充电时间,此时计算剩余充电时间是不准确的 QString tips = tr("Capacity %1 ...").arg(value); @@ -274,3 +288,25 @@ void PowerPlugin::refreshTipsData() m_tipsLabel->setText(tips); } } + +void PowerPlugin::initQuickPanel() +{ + m_quickPanel = new QWidget(); + QVBoxLayout *layout = new QVBoxLayout(m_quickPanel); + layout->setAlignment(Qt::AlignVCenter); + layout->setContentsMargins(0, 0, 0, 0); + layout->setSpacing(0); + m_imageLabel = new QLabel(m_quickPanel); + m_imageLabel->setObjectName("imageLabel"); + m_imageLabel->setFixedHeight(24); + m_imageLabel->setAlignment(Qt::AlignCenter); + + m_labelText = new QLabel(m_quickPanel); + m_labelText->setObjectName("textLabel"); + m_labelText->setFixedHeight(11); + m_labelText->setAlignment(Qt::AlignCenter); + m_labelText->setFont(Dtk::Widget::DFontSizeManager::instance()->t10()); + layout->addWidget(m_imageLabel); + layout->addSpacing(7); + layout->addWidget(m_labelText); +} diff --git a/plugins/power/powerplugin.h b/plugins/power/powerplugin.h index 9c4a106f7..088792cd7 100644 --- a/plugins/power/powerplugin.h +++ b/plugins/power/powerplugin.h @@ -62,6 +62,7 @@ private: void loadPlugin(); void onGSettingsChanged(const QString &key); void refreshTipsData(); + void initQuickPanel(); private: bool m_pluginLoaded; @@ -73,6 +74,9 @@ private: SystemPowerInter *m_systemPowerInter; DBusPower *m_powerInter; QTimer *m_preChargeTimer; + QWidget *m_quickPanel; + QLabel *m_imageLabel; + QLabel *m_labelText; }; #endif // POWERPLUGIN_H