From a41df224f66296b56f2e6b1159c8eb73ded52779 Mon Sep 17 00:00:00 2001 From: donghualin Date: Wed, 23 Nov 2022 05:27:16 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=A2=9E=E5=8A=A0=E5=AF=B9=E6=8E=A7?= =?UTF-8?q?=E5=88=B6=E4=B8=AD=E5=BF=83=E8=AE=BE=E7=BD=AE=E4=B8=8D=E5=90=8C?= =?UTF-8?q?=E4=B8=BB=E9=A2=98=E4=B8=8B=E5=9B=BE=E6=A0=87=E7=9A=84=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1、任务栏插件接口中增加根据主题来获取不同图标的接口 2、声音、蓝牙、电源、虚拟键盘、回收站等插件完善控制中心的接口 3、任务栏图标的显示根据不同的主题来获取 Log: 完善对控制中心设置不同主题的接口 Influence: 在控制中心切换主题,观察图标是否发生变化 Bug: https://pms.uniontech.com/bug-view-172365.html Change-Id: Ia02193c9ebcf10559195c6fb8fe6227f581e165b --- frame/controller/quicksettingcontroller.cpp | 9 ++-- frame/dbus/dbusdockadaptors.cpp | 36 +++++++++------ frame/dbus/dbusdockadaptors.h | 5 ++- frame/util/abstractpluginscontroller.cpp | 7 +++ frame/util/abstractpluginscontroller.h | 2 + frame/window/quickpluginwindow.cpp | 3 +- interfaces/pluginsiteminterface.h | 6 +++ plugins/bluetooth/bluetoothplugin.cpp | 12 +++++ plugins/bluetooth/bluetoothplugin.h | 1 + plugins/onboard/icon/dcc_keyboard.svg | 7 +++ plugins/onboard/onboard.qrc | 1 + plugins/onboard/onboardplugin.cpp | 3 ++ .../shutdown/resources/icons/dcc_shutdown.svg | 7 +++ plugins/shutdown/shutdown.qrc | 1 + plugins/shutdown/shutdownplugin.cpp | 5 ++- plugins/sound/sounditem.cpp | 44 +++++++++++++++++++ plugins/sound/sounditem.h | 1 + plugins/sound/soundplugin.cpp | 5 +++ plugins/sound/soundplugin.h | 1 + plugins/trash/icons/dcc_trash.svg | 9 ++++ plugins/trash/resource.qrc | 1 + plugins/trash/trashplugin.cpp | 8 ++++ plugins/trash/trashplugin.h | 1 + 23 files changed, 153 insertions(+), 22 deletions(-) create mode 100644 plugins/onboard/icon/dcc_keyboard.svg create mode 100644 plugins/shutdown/resources/icons/dcc_shutdown.svg create mode 100644 plugins/trash/icons/dcc_trash.svg diff --git a/frame/controller/quicksettingcontroller.cpp b/frame/controller/quicksettingcontroller.cpp index 0a4717869..ab4d3186a 100644 --- a/frame/controller/quicksettingcontroller.cpp +++ b/frame/controller/quicksettingcontroller.cpp @@ -156,14 +156,15 @@ QList QuickSettingController::pluginInSettings() { QList settingPlugins; // 用于在控制中心显示可改变位置的插件,这里只提供 - QMap> &plugins = ProxyPluginController::instance(PluginType::QuickPlugin)->pluginsMap(); - QList allPlugins = plugins.keys(); + QList allPlugins = ProxyPluginController::instance(PluginType::QuickPlugin)->pluginCurrent(); for (PluginsItemInterface *plugin : allPlugins) { + if (plugin->pluginDisplayName().isEmpty()) + continue; + PluginAttribute pluginAttr = pluginAttribute(plugin); if (pluginAttr == QuickSettingController::PluginAttribute::Quick || pluginAttr == QuickSettingController::PluginAttribute::System - || pluginAttr == QuickSettingController::PluginAttribute::Tool - || pluginAttr == QuickSettingController::PluginAttribute::Tray) + || pluginAttr == QuickSettingController::PluginAttribute::Tool) settingPlugins << plugin; } diff --git a/frame/dbus/dbusdockadaptors.cpp b/frame/dbus/dbusdockadaptors.cpp index e45e87c2e..d22e17c1c 100644 --- a/frame/dbus/dbusdockadaptors.cpp +++ b/frame/dbus/dbusdockadaptors.cpp @@ -28,6 +28,8 @@ #include "pluginsitem.h" #include "settingconfig.h" +#include + #include #include #include @@ -39,14 +41,14 @@ QDebug operator<<(QDebug argument, const DockItemInfo &info) { argument << "name:" << info.name << ", displayName:" << info.displayName << "itemKey:" << info.itemKey << "SettingKey:" << info.settingKey - << "icon:" << info.icon << "visible:" << info.visible; + << "icon_light:" << info.iconLight << "icon_dark:" << info.iconDark << "visible:" << info.visible; return argument; } QDBusArgument &operator<<(QDBusArgument &arg, const DockItemInfo &info) { arg.beginStructure(); - arg << info.name << info.displayName << info.itemKey << info.settingKey << info.icon << info.visible; + arg << info.name << info.displayName << info.itemKey << info.settingKey << info.iconLight << info.iconDark << info.visible; arg.endStructure(); return arg; } @@ -54,7 +56,7 @@ QDBusArgument &operator<<(QDBusArgument &arg, const DockItemInfo &info) const QDBusArgument &operator>>(const QDBusArgument &arg, DockItemInfo &info) { arg.beginStructure(); - arg >> info.name >> info.displayName >> info.itemKey >> info.settingKey >> info.icon >> info.visible; + arg >> info.name >> info.displayName >> info.itemKey >> info.settingKey >> info.iconLight >> info.iconDark >> info.visible; arg.endStructure(); return arg; } @@ -180,12 +182,20 @@ DockItemInfos DBusDockAdaptors::plugins() info.settingKey = "Dock_Quick_Plugin_Name"; info.visible = quickSettingKeys.contains(info.itemKey); QSize pixmapSize; - QIcon icon = getSettingIcon(plugin, pixmapSize); - if (!icon.isNull()) { - QBuffer buffer(&info.icon); + QIcon lightIcon = getSettingIcon(plugin, pixmapSize, DGuiApplicationHelper::ColorType::LightType); + if (!lightIcon.isNull()) { + QBuffer buffer(&info.iconLight); if (buffer.open(QIODevice::WriteOnly)) { - QPixmap pixmap = icon.pixmap(pixmapSize); - pixmap.save(&buffer, "bmp"); + QPixmap pixmap = lightIcon.pixmap(pixmapSize); + pixmap.save(&buffer, "png"); + } + } + QIcon darkIcon = getSettingIcon(plugin, pixmapSize, DGuiApplicationHelper::ColorType::DarkType); + if (!darkIcon.isNull()) { + QBuffer buffer(&info.iconDark); + if (buffer.open(QIODevice::WriteOnly)) { + QPixmap pixmap = darkIcon.pixmap(pixmapSize); + pixmap.save(&buffer, "png"); } } pluginInfos << info; @@ -311,7 +321,7 @@ QList DBusDockAdaptors::localPlugins() const return QuickSettingController::instance()->pluginInSettings(); } -QIcon DBusDockAdaptors::getSettingIcon(PluginsItemInterface *plugin, QSize &pixmapSize) const +QIcon DBusDockAdaptors::getSettingIcon(PluginsItemInterface *plugin, QSize &pixmapSize, int colorType) const { auto iconSize = [](const QIcon &icon) { QList iconSizes = icon.availableSizes(); @@ -321,7 +331,7 @@ QIcon DBusDockAdaptors::getSettingIcon(PluginsItemInterface *plugin, QSize &pixm return defaultIconSize; }; // 先获取控制中心的设置图标 - QIcon icon = plugin->icon(DockPart::DCCSetting); + QIcon icon = plugin->icon(DockPart::DCCSetting, colorType); if (!icon.isNull()) { pixmapSize = iconSize(icon); return icon; @@ -331,7 +341,7 @@ QIcon DBusDockAdaptors::getSettingIcon(PluginsItemInterface *plugin, QSize &pixm QuickSettingController::PluginAttribute pluginAttr = QuickSettingController::instance()->pluginAttribute(plugin); switch(pluginAttr) { case QuickSettingController::PluginAttribute::System: { - icon = plugin->icon(DockPart::SystemPanel); + icon = plugin->icon(DockPart::SystemPanel, colorType); pixmapSize = defaultIconSize; QList iconSizes = icon.availableSizes(); if (iconSizes.size() > 0) @@ -339,9 +349,9 @@ QIcon DBusDockAdaptors::getSettingIcon(PluginsItemInterface *plugin, QSize &pixm break; } case QuickSettingController::PluginAttribute::Quick: { - icon = plugin->icon(DockPart::QuickShow); + icon = plugin->icon(DockPart::QuickShow, colorType); if (icon.isNull()) - icon = plugin->icon(DockPart::QuickPanel); + icon = plugin->icon(DockPart::QuickPanel, colorType); pixmapSize = defaultIconSize; QList iconSizes = icon.availableSizes(); if (iconSizes.size() > 0) diff --git a/frame/dbus/dbusdockadaptors.h b/frame/dbus/dbusdockadaptors.h index 1cb2faf91..9a443a87b 100644 --- a/frame/dbus/dbusdockadaptors.h +++ b/frame/dbus/dbusdockadaptors.h @@ -40,7 +40,8 @@ struct DockItemInfo QString displayName; QString itemKey; QString settingKey; - QByteArray icon; + QByteArray iconLight; + QByteArray iconDark; bool visible; }; @@ -135,7 +136,7 @@ signals: private: bool isPluginValid(const QString &name); QList localPlugins() const; - QIcon getSettingIcon(PluginsItemInterface *plugin, QSize &pixmapSize) const; + QIcon getSettingIcon(PluginsItemInterface *plugin, QSize &pixmapSize, int colorType) const; private: QGSettings *m_gsettings; diff --git a/frame/util/abstractpluginscontroller.cpp b/frame/util/abstractpluginscontroller.cpp index 82e39a555..b1fde6484 100644 --- a/frame/util/abstractpluginscontroller.cpp +++ b/frame/util/abstractpluginscontroller.cpp @@ -63,6 +63,11 @@ AbstractPluginsController::~AbstractPluginsController() } } +QList AbstractPluginsController::pluginCurrent() const +{ + return m_pluginExists; +} + void AbstractPluginsController::saveValue(PluginsItemInterface *const itemInter, const QString &key, const QVariant &value) { savePluginValue(getPluginInterface(itemInter), key, value); @@ -85,6 +90,7 @@ void AbstractPluginsController::itemAdded(PluginsItemInterface * const itemInter if (pluginAdapter) pluginAdapter->setItemKey(itemKey); + m_pluginExists << pluginItem; pluginItemAdded(pluginItem, itemKey); } @@ -95,6 +101,7 @@ void AbstractPluginsController::itemUpdate(PluginsItemInterface * const itemInte void AbstractPluginsController::itemRemoved(PluginsItemInterface * const itemInter, const QString &itemKey) { + m_pluginExists.removeOne(itemInter); pluginItemRemoved(getPluginInterface(itemInter), itemKey); } diff --git a/frame/util/abstractpluginscontroller.h b/frame/util/abstractpluginscontroller.h index b53d15815..a366c0426 100644 --- a/frame/util/abstractpluginscontroller.h +++ b/frame/util/abstractpluginscontroller.h @@ -43,6 +43,7 @@ public: ~ AbstractPluginsController() override; void updateDockInfo(PluginsItemInterface *const, const DockPart &) override {} + virtual QList pluginCurrent() const; virtual bool needLoad(PluginsItemInterface *) { return true; } QMap> &pluginsMap(); @@ -101,6 +102,7 @@ private: // filepath, interface, loaded QMap, bool> m_pluginLoadMap; + QList m_pluginExists; QJsonObject m_pluginSettingsObject; QMap m_pluginAdapterMap; diff --git a/frame/window/quickpluginwindow.cpp b/frame/window/quickpluginwindow.cpp index 7dc66c0cd..25787babd 100644 --- a/frame/window/quickpluginwindow.cpp +++ b/frame/window/quickpluginwindow.cpp @@ -29,6 +29,7 @@ #include #include +#include #include #include @@ -655,7 +656,7 @@ void QuickDockItem::leaveEvent(QEvent *event) QPixmap QuickDockItem::iconPixmap() const { int pixmapSize = static_cast(ICONHEIGHT * qApp->devicePixelRatio()); - QIcon icon = m_pluginItem->icon(DockPart::QuickShow); + QIcon icon = m_pluginItem->icon(DockPart::QuickShow, DGuiApplicationHelper::instance()->themeType()); if (!icon.isNull()) return icon.pixmap(pixmapSize, pixmapSize); diff --git a/interfaces/pluginsiteminterface.h b/interfaces/pluginsiteminterface.h index be7cd0a51..7aa1dd28d 100644 --- a/interfaces/pluginsiteminterface.h +++ b/interfaces/pluginsiteminterface.h @@ -278,6 +278,12 @@ public: /// virtual QString description() const { return QString(); } + /// + /// the icon for the plugin + /// themeType {0:UnknownType 1:LightType 2:DarkType} + /// + virtual QIcon icon(const DockPart &dockPart, int themeType) { return icon(dockPart); } + protected: /// /// \brief m_proxyInter diff --git a/plugins/bluetooth/bluetoothplugin.cpp b/plugins/bluetooth/bluetoothplugin.cpp index 7b70444fa..ca3ea7917 100644 --- a/plugins/bluetooth/bluetoothplugin.cpp +++ b/plugins/bluetooth/bluetoothplugin.cpp @@ -24,8 +24,12 @@ #include "bluetoothwidget.h" #include "adaptersmanager.h" +#include + #define STATE_KEY "enable" +DGUI_USE_NAMESPACE + BluetoothPlugin::BluetoothPlugin(QObject *parent) : QObject(parent) , m_adapterManager(new AdaptersManager(this)) @@ -150,6 +154,14 @@ QIcon BluetoothPlugin::icon(const DockPart &) return icon; } +QIcon BluetoothPlugin::icon(const DockPart &dockPart, int themeType) +{ + if (themeType == DGuiApplicationHelper::ColorType::DarkType) + return QIcon(":/bluetooth-active-symbolic.svg"); + + return QIcon(":/bluetooth-active-symbolic-dark.svg"); +} + PluginsItemInterface::PluginStatus BluetoothPlugin::status() const { if (m_bluetoothItem.data()->isPowered()) diff --git a/plugins/bluetooth/bluetoothplugin.h b/plugins/bluetooth/bluetoothplugin.h index 567c5fc2d..35e1bdb21 100644 --- a/plugins/bluetooth/bluetoothplugin.h +++ b/plugins/bluetooth/bluetoothplugin.h @@ -56,6 +56,7 @@ public: void pluginSettingsChanged() override; QIcon icon(const DockPart &) override; + QIcon icon(const DockPart &dockPart, int themeType) override; PluginStatus status() const override; QString description() const override; diff --git a/plugins/onboard/icon/dcc_keyboard.svg b/plugins/onboard/icon/dcc_keyboard.svg new file mode 100644 index 000000000..d9c5718b2 --- /dev/null +++ b/plugins/onboard/icon/dcc_keyboard.svg @@ -0,0 +1,7 @@ + + + icon/dock/keyboard + + + + \ No newline at end of file diff --git a/plugins/onboard/onboard.qrc b/plugins/onboard/onboard.qrc index 12c16ed6b..a067f2ebe 100644 --- a/plugins/onboard/onboard.qrc +++ b/plugins/onboard/onboard.qrc @@ -1,5 +1,6 @@ icon/deepin-virtualkeyboard.svg + icon/dcc_keyboard.svg diff --git a/plugins/onboard/onboardplugin.cpp b/plugins/onboard/onboardplugin.cpp index c1c5b51e6..f0cbb04c3 100644 --- a/plugins/onboard/onboardplugin.cpp +++ b/plugins/onboard/onboardplugin.cpp @@ -167,6 +167,9 @@ void OnboardPlugin::pluginSettingsChanged() QIcon OnboardPlugin::icon(const DockPart &dockPart) { + if (dockPart == DockPart::DCCSetting) + return QIcon(":/icons/icon/dcc_keyboard.svg"); + if (dockPart == DockPart::QuickPanel) return m_onboardItem->iconPixmap(24); diff --git a/plugins/shutdown/resources/icons/dcc_shutdown.svg b/plugins/shutdown/resources/icons/dcc_shutdown.svg new file mode 100644 index 000000000..66aea8e7c --- /dev/null +++ b/plugins/shutdown/resources/icons/dcc_shutdown.svg @@ -0,0 +1,7 @@ + + + icon/dock-set/power + + + + \ No newline at end of file diff --git a/plugins/shutdown/shutdown.qrc b/plugins/shutdown/shutdown.qrc index c1dc1f493..b82e12964 100644 --- a/plugins/shutdown/shutdown.qrc +++ b/plugins/shutdown/shutdown.qrc @@ -3,5 +3,6 @@ resources/icons/fashion.svg resources/icons/normal.svg resources/icons/system-shutdown.svg + resources/icons/dcc_shutdown.svg diff --git a/plugins/shutdown/shutdownplugin.cpp b/plugins/shutdown/shutdownplugin.cpp index 3461c244b..f1c0e2ab4 100644 --- a/plugins/shutdown/shutdownplugin.cpp +++ b/plugins/shutdown/shutdownplugin.cpp @@ -60,7 +60,7 @@ const QString ShutdownPlugin::pluginName() const const QString ShutdownPlugin::pluginDisplayName() const { - return tr("Power"); + return tr("shutdown"); } QWidget *ShutdownPlugin::itemWidget(const QString &itemKey) @@ -304,7 +304,8 @@ void ShutdownPlugin::pluginSettingsChanged() QIcon ShutdownPlugin::icon(const DockPart &dockPart) { - Q_UNUSED(dockPart); + if (dockPart == DockPart::DCCSetting) + return QIcon(":/icons/resources/icons/dcc_shutdown.svg"); QIcon shutdownIcon; shutdownIcon.addPixmap(m_shutdownWidget->loadPixmap()); diff --git a/plugins/sound/sounditem.cpp b/plugins/sound/sounditem.cpp index 2b046ac28..cede35e59 100644 --- a/plugins/sound/sounditem.cpp +++ b/plugins/sound/sounditem.cpp @@ -254,6 +254,50 @@ QPixmap SoundItem::pixmap() const return m_iconPixmap; } +QPixmap SoundItem::pixmap(int colorType) const +{ + const Dock::DisplayMode displayMode = Dock::DisplayMode::Efficient; + + const double volmue = m_applet->volumeValue(); + const double maxVolmue = m_applet->maxVolumeValue(); + const bool mute = m_applet->existActiveOutputDevice() ? m_sinkInter->mute() : true; + + QString iconString; + if (displayMode == Dock::Fashion) { + QString volumeString; + if (volmue >= 1000) + volumeString = "100"; + else + volumeString = QString("0") + ('0' + int(volmue / 100)) + "0"; + + iconString = "audio-volume-" + volumeString; + + if (mute) + iconString += "-muted"; + } else { + QString volumeString; + if (mute) + volumeString = "muted"; + else if (int(volmue) == 0) + volumeString = "off"; + else if (volmue / maxVolmue > double(2) / 3) + volumeString = "high"; + else if (volmue / maxVolmue > double(1) / 3) + volumeString = "medium"; + else + volumeString = "low"; + + iconString = QString("audio-volume-%1-symbolic").arg(volumeString); + } + + const auto ratio = devicePixelRatioF(); + int iconSize = PLUGIN_ICON_MAX_SIZE; + if (colorType == DGuiApplicationHelper::LightType) + iconString.append(PLUGIN_MIN_ICON_NAME); + + return ImageUtil::loadSvg(iconString, ":/", iconSize, ratio); +} + void SoundItem::sinkChanged(DBusSink *sink) { m_sinkInter = sink; diff --git a/plugins/sound/sounditem.h b/plugins/sound/sounditem.h index d06b2d2e9..b1fdb79c2 100644 --- a/plugins/sound/sounditem.h +++ b/plugins/sound/sounditem.h @@ -51,6 +51,7 @@ public: void refreshIcon(); void refreshTips(const int volume, const bool force = false); QPixmap pixmap() const; + QPixmap pixmap(int colorType) const; signals: void requestContextMenu() const; diff --git a/plugins/sound/soundplugin.cpp b/plugins/sound/soundplugin.cpp index 38f8b712b..969bd9407 100644 --- a/plugins/sound/soundplugin.cpp +++ b/plugins/sound/soundplugin.cpp @@ -148,6 +148,11 @@ QIcon SoundPlugin::icon(const DockPart &) return m_soundItem->pixmap(); } +QIcon SoundPlugin::icon(const DockPart &dockPart, int themeType) +{ + return m_soundItem->pixmap(themeType); +} + PluginsItemInterface::PluginStatus SoundPlugin::status() const { return SoundPlugin::Active; diff --git a/plugins/sound/soundplugin.h b/plugins/sound/soundplugin.h index 29c1ad3e4..ca3202862 100644 --- a/plugins/sound/soundplugin.h +++ b/plugins/sound/soundplugin.h @@ -52,6 +52,7 @@ public: void refreshIcon(const QString &itemKey) override; void pluginSettingsChanged() override; QIcon icon(const DockPart &) override; + QIcon icon(const DockPart &dockPart, int themeType) override; PluginStatus status() const override; private: diff --git a/plugins/trash/icons/dcc_trash.svg b/plugins/trash/icons/dcc_trash.svg new file mode 100644 index 000000000..05ce6decf --- /dev/null +++ b/plugins/trash/icons/dcc_trash.svg @@ -0,0 +1,9 @@ + + + icon/dock/trash + + + + + + \ No newline at end of file diff --git a/plugins/trash/resource.qrc b/plugins/trash/resource.qrc index 063a18597..8168ace5e 100644 --- a/plugins/trash/resource.qrc +++ b/plugins/trash/resource.qrc @@ -1,5 +1,6 @@ + icons/dcc_trash.svg icons/user-trash.svg diff --git a/plugins/trash/trashplugin.cpp b/plugins/trash/trashplugin.cpp index 9b547cf57..a87e14f47 100644 --- a/plugins/trash/trashplugin.cpp +++ b/plugins/trash/trashplugin.cpp @@ -188,6 +188,14 @@ void TrashPlugin::pluginSettingsChanged() refreshPluginItemsVisible(); } +QIcon TrashPlugin::icon(const DockPart &dockPart, int themeType) +{ + if (dockPart == DockPart::DCCSetting) + return QIcon(":/icons/dcc_trash.svg"); + + return QIcon(); +} + void TrashPlugin::refreshPluginItemsVisible() { if (pluginIsDisable()) { diff --git a/plugins/trash/trashplugin.h b/plugins/trash/trashplugin.h index 0e4902be5..0ac09d8e4 100644 --- a/plugins/trash/trashplugin.h +++ b/plugins/trash/trashplugin.h @@ -62,6 +62,7 @@ public: void setSortKey(const QString &itemKey, const int order) override; void displayModeChanged(const Dock::DisplayMode displayMode) override; void pluginSettingsChanged() override; + QIcon icon(const DockPart &dockPart, int themeType) override; private: void refreshPluginItemsVisible();