diff --git a/frame/CMakeLists.txt b/frame/CMakeLists.txt index e36c3412f..2686b89b8 100644 --- a/frame/CMakeLists.txt +++ b/frame/CMakeLists.txt @@ -13,6 +13,7 @@ find_package(Qt5Widgets REQUIRED) find_package(Qt5Concurrent REQUIRED) find_package(Qt5X11Extras REQUIRED) find_package(Qt5DBus REQUIRED) +find_package(Qt5Svg REQUIRED) find_package(DtkWidget REQUIRED) find_package(DtkCMake REQUIRED) @@ -30,6 +31,7 @@ target_include_directories(${BIN_NAME} PUBLIC ${DtkWidget_INCLUDE_DIRS} ${PROJECT_BINARY_DIR} ${QGSettings_INCLUDE_DIRS} ${DtkGUI_INCLUDE_DIRS} + ${Qt5Svg_INCLUDE_DIRS} ../interfaces) target_link_libraries(${BIN_NAME} PRIVATE ${XCB_EWMH_LIBRARIES} @@ -41,6 +43,7 @@ target_link_libraries(${BIN_NAME} PRIVATE ${Qt5DBus_LIBRARIES} ${QGSettings_LIBRARIES} ${DtkGUI_LIBRARIES} + ${Qt5Svg_LIBRARIES} ) if (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "sw_64") diff --git a/plugins/network/util/imageutil.cpp b/frame/util/imageutil.cpp similarity index 61% rename from plugins/network/util/imageutil.cpp rename to frame/util/imageutil.cpp index 2ff32f629..dfce183f4 100644 --- a/plugins/network/util/imageutil.cpp +++ b/frame/util/imageutil.cpp @@ -21,18 +21,28 @@ #include "imageutil.h" +#include #include -const QPixmap ImageUtil::loadSvg(const QString &path, const int size) +const QPixmap ImageUtil::loadSvg(const QString &iconName, const QString &localPath, const int size, const qreal ratio) { - QPixmap pixmap(size, size); - QSvgRenderer renderer(path); + QIcon icon = QIcon::fromTheme(iconName); + if (!icon.isNull()) { + QPixmap pixmap = icon.pixmap(int(size * ratio), int(size * ratio)); + pixmap.setDevicePixelRatio(ratio); + return pixmap; + } + + QPixmap pixmap(int(size * ratio), int(size * ratio)); + QString localIcon = QString("%1%2%3").arg(localPath).arg(iconName).arg(iconName.contains(".svg") ? "" : ".svg"); + QSvgRenderer renderer(localIcon); pixmap.fill(Qt::transparent); QPainter painter; painter.begin(&pixmap); renderer.render(&painter); painter.end(); + pixmap.setDevicePixelRatio(ratio); return pixmap; } diff --git a/plugins/network/util/imageutil.h b/frame/util/imageutil.h similarity index 88% rename from plugins/network/util/imageutil.h rename to frame/util/imageutil.h index 59c90c06d..6497f7e62 100644 --- a/plugins/network/util/imageutil.h +++ b/frame/util/imageutil.h @@ -28,7 +28,7 @@ class ImageUtil { public: - static const QPixmap loadSvg(const QString &path, const int size); + static const QPixmap loadSvg(const QString &iconName, const QString &localPath, const int size, const qreal ratio); }; #endif // IMAGEUTIL_H diff --git a/plugins/network/CMakeLists.txt b/plugins/network/CMakeLists.txt index 9c70eb237..462051480 100644 --- a/plugins/network/CMakeLists.txt +++ b/plugins/network/CMakeLists.txt @@ -4,7 +4,7 @@ set(PLUGIN_NAME "network") project(${PLUGIN_NAME}) # Sources files -file(GLOB_RECURSE SRCS "*.h" "*.cpp" "../../widgets/*.h" "../../widgets/*.cpp" "../../frame/util/utils.h") +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) diff --git a/plugins/network/item/applet/accesspointwidget.cpp b/plugins/network/item/applet/accesspointwidget.cpp index 94de3de3b..c5d6fec61 100644 --- a/plugins/network/item/applet/accesspointwidget.cpp +++ b/plugins/network/item/applet/accesspointwidget.cpp @@ -22,7 +22,7 @@ #include "accesspointwidget.h" #include "horizontalseperator.h" #include "util/utils.h" - +#include "../frame/util/imageutil.h" #include #include #include @@ -156,7 +156,7 @@ void AccessPointWidget::setStrengthIcon(const int strength) } const auto ratio = devicePixelRatioF(); - iconPix = QIcon::fromTheme(iconString, QIcon(QString(":/wireless/resources/wireless/%1").arg(iconString))).pixmap(s * ratio); + iconPix = ImageUtil::loadSvg(iconString, ":/wireless/resources/wireless/", s.width(), ratio); m_strengthLabel->setPixmap(iconPix); diff --git a/plugins/network/item/wireditem.cpp b/plugins/network/item/wireditem.cpp index a953d6912..73740ba59 100644 --- a/plugins/network/item/wireditem.cpp +++ b/plugins/network/item/wireditem.cpp @@ -23,7 +23,7 @@ #include "constants.h" #include "wireditem.h" #include "networkplugin.h" -#include "../util/imageutil.h" +#include "../frame/util/imageutil.h" #include "../widgets/tipswidget.h" #include @@ -149,9 +149,7 @@ void WiredItem::reloadIcon() const quint64 index = QDateTime::currentMSecsSinceEpoch() / 200; const int num = (index % 5) + 1; - m_icon = QIcon::fromTheme(QString("network-wired-symbolic-connecting%1.svg").arg(num), QIcon::fromTheme(QString(":/wired/resources/wired/network-wired-symbolic-connecting%1.svg").arg(num))) - .pixmap(iconSize * ratio, iconSize * ratio); - m_icon.setDevicePixelRatio(ratio); + m_icon = ImageUtil::loadSvg(QString("network-wired-symbolic-connecting%1.svg").arg(num), ":/wired/resources/wired/", iconSize, ratio); update(); return; } @@ -186,8 +184,8 @@ void WiredItem::reloadIcon() // 最小尺寸时采用深色图标 if (height() <= PLUGIN_BACKGROUND_MIN_SIZE && DGuiApplicationHelper::instance()->themeType() == DGuiApplicationHelper::LightType) iconName.append(PLUGIN_MIN_ICON_NAME); - m_icon = QIcon::fromTheme(iconName, QIcon::fromTheme(QString(":/wired/resources/wired/%1").arg(iconName))).pixmap(iconSize * ratio, iconSize * ratio); - m_icon.setDevicePixelRatio(ratio); + + m_icon = ImageUtil::loadSvg(iconName, ":/wired/resources/wired/", iconSize, ratio); update(); } diff --git a/plugins/network/item/wirelessitem.cpp b/plugins/network/item/wirelessitem.cpp index 1fbd0ff79..20874e8d5 100644 --- a/plugins/network/item/wirelessitem.cpp +++ b/plugins/network/item/wirelessitem.cpp @@ -21,7 +21,7 @@ #include "wirelessitem.h" #include "networkplugin.h" -#include "../util/imageutil.h" +#include "../frame/util/imageutil.h" #include "../widgets/tipswidget.h" #include @@ -225,7 +225,7 @@ const QPixmap WirelessItem::backgroundPix(const int size) const QPixmap WirelessItem::cachedPix(const QString &key, const int size) { if (m_reloadIcon || !m_icons.contains(key)) { - m_icons.insert(key, QIcon::fromTheme(key, QIcon(":/wireless/resources/wireless/" + key + ".svg")).pixmap(size)); + m_icons.insert(key, ImageUtil::loadSvg(key, ":/wireless/resources/wireless/", size, 1)); } return m_icons.value(key); diff --git a/plugins/sound/CMakeLists.txt b/plugins/sound/CMakeLists.txt index 5d2f00ee8..83e817054 100644 --- a/plugins/sound/CMakeLists.txt +++ b/plugins/sound/CMakeLists.txt @@ -4,7 +4,7 @@ set(PLUGIN_NAME "sound") project(${PLUGIN_NAME}) # Sources files -file(GLOB_RECURSE SRCS "*.h" "*.cpp" "../../widgets/*.h" "../../widgets/*.cpp" "../../frame/util/utils.h") +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) diff --git a/plugins/sound/resources/audio-volume-high-symbolic-dark.svg b/plugins/sound/resources/audio-volume-high-symbolic-dark.svg new file mode 100644 index 000000000..4d4091a65 --- /dev/null +++ b/plugins/sound/resources/audio-volume-high-symbolic-dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/plugins/sound/resources/audio-volume-low-symbolic-dark.svg b/plugins/sound/resources/audio-volume-low-symbolic-dark.svg new file mode 100644 index 000000000..2a1451bd7 --- /dev/null +++ b/plugins/sound/resources/audio-volume-low-symbolic-dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/plugins/sound/resources/audio-volume-medium-symbolic-dark.svg b/plugins/sound/resources/audio-volume-medium-symbolic-dark.svg new file mode 100644 index 000000000..aa30f960f --- /dev/null +++ b/plugins/sound/resources/audio-volume-medium-symbolic-dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/plugins/sound/resources/audio-volume-muted-symbolic-dark.svg b/plugins/sound/resources/audio-volume-muted-symbolic-dark.svg new file mode 100644 index 000000000..1b62397ef --- /dev/null +++ b/plugins/sound/resources/audio-volume-muted-symbolic-dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/plugins/sound/resources/sound.qrc b/plugins/sound/resources/sound.qrc index af8cc187c..a081de4e3 100644 --- a/plugins/sound/resources/sound.qrc +++ b/plugins/sound/resources/sound.qrc @@ -30,5 +30,9 @@ audio-volume-muted-symbolic.svg slider_bg.png slider_handle.svg + audio-volume-muted-symbolic-dark.svg + audio-volume-low-symbolic-dark.svg + audio-volume-medium-symbolic-dark.svg + audio-volume-high-symbolic-dark.svg diff --git a/plugins/sound/sinkinputwidget.cpp b/plugins/sound/sinkinputwidget.cpp index 259e6e6a8..95f99ddfe 100644 --- a/plugins/sound/sinkinputwidget.cpp +++ b/plugins/sound/sinkinputwidget.cpp @@ -21,6 +21,7 @@ #include "sinkinputwidget.h" #include "../widgets/tipswidget.h" +#include "../frame/util/imageutil.h" #include #include @@ -197,12 +198,10 @@ void SinkInputWidget::refreshIcon() } const auto ratio = devicePixelRatioF(); - QPixmap ret = QIcon::fromTheme(iconRight).pixmap(ICON_SIZE * ratio, ICON_SIZE * ratio); - ret.setDevicePixelRatio(ratio); + QPixmap ret = ImageUtil::loadSvg(iconRight, ":/", ICON_SIZE, ratio); m_volumeIconMax->setPixmap(ret); - ret = QIcon::fromTheme(iconLeft).pixmap(ICON_SIZE * ratio, ICON_SIZE * ratio); - ret.setDevicePixelRatio(ratio); + ret = ImageUtil::loadSvg(iconLeft, ":/", ICON_SIZE, ratio); m_volumeBtnMin->setPixmap(ret); } diff --git a/plugins/sound/soundapplet.cpp b/plugins/sound/soundapplet.cpp index 4d85eadb9..588a642cc 100644 --- a/plugins/sound/soundapplet.cpp +++ b/plugins/sound/soundapplet.cpp @@ -23,6 +23,7 @@ #include "sinkinputwidget.h" #include "componments/horizontalseparator.h" #include "../widgets/tipswidget.h" +#include "../frame/util/imageutil.h" #include "util/utils.h" #include @@ -227,11 +228,9 @@ void SoundApplet::refreshIcon() } const auto ratio = devicePixelRatioF(); - QPixmap ret = QIcon::fromTheme(iconRight).pixmap(ICON_SIZE * ratio, ICON_SIZE * ratio); - ret.setDevicePixelRatio(ratio); + QPixmap ret = ImageUtil::loadSvg(iconRight, ":/", ICON_SIZE, ratio); m_volumeIconMax->setPixmap(ret); - ret = QIcon::fromTheme(iconLeft).pixmap(ICON_SIZE * ratio, ICON_SIZE * ratio); - ret.setDevicePixelRatio(ratio); + ret = ImageUtil::loadSvg(iconLeft, ":/", ICON_SIZE, ratio); m_volumeBtn->setPixmap(ret); } diff --git a/plugins/sound/sounditem.cpp b/plugins/sound/sounditem.cpp index 6f8cbbdc7..0df73206b 100644 --- a/plugins/sound/sounditem.cpp +++ b/plugins/sound/sounditem.cpp @@ -29,6 +29,7 @@ #include #include #include "../widgets/tipswidget.h" +#include "../frame/util/imageutil.h" #include // menu actions @@ -154,7 +155,6 @@ void SoundItem::refreshIcon() const double volmue = m_applet->volumeValue(); const bool mute = m_sinkInter->mute(); -// const Dock::DisplayMode displayMode = qApp->property(PROP_DISPLAY_MODE).value(); const Dock::DisplayMode displayMode = Dock::DisplayMode::Efficient; QString iconString; @@ -188,9 +188,7 @@ void SoundItem::refreshIcon() if (height() <= PLUGIN_BACKGROUND_MIN_SIZE && DGuiApplicationHelper::instance()->themeType() == DGuiApplicationHelper::LightType) iconString.append(PLUGIN_MIN_ICON_NAME); - const QIcon icon = QIcon::fromTheme(iconString, QIcon::fromTheme(QString(":/%1").arg(iconString))); - m_iconPixmap = icon.pixmap(iconSize * ratio, iconSize * ratio); - m_iconPixmap.setDevicePixelRatio(ratio); + m_iconPixmap = ImageUtil::loadSvg(iconString, ":/", iconSize, ratio); update(); } diff --git a/plugins/tray/CMakeLists.txt b/plugins/tray/CMakeLists.txt index 16335836e..8869024b2 100644 --- a/plugins/tray/CMakeLists.txt +++ b/plugins/tray/CMakeLists.txt @@ -12,7 +12,8 @@ file(GLOB_RECURSE SRCS "*.h" "*.cpp" "../../widgets/*.h" "../../widgets/*.cpp" "../../frame/dbus/sni/*.h" "../../frame/dbus/sni/*.cpp" "../../frame/dbus/dbusmenu.h" "../../frame/dbus/dbusmenu.cpp" "../../frame/dbus/dbusmenumanager.h" "../../frame/dbus/dbusmenumanager.cpp" - "../../widgets/*.h" "../../widgets/*.cpp") + "../../widgets/*.h" "../../widgets/*.cpp" + "../../frame/util/imageutil.h" "../../frame/util/imageutil.cpp") find_package(PkgConfig REQUIRED) find_package(Qt5Widgets REQUIRED) diff --git a/plugins/tray/fashiontray/fashiontraycontrolwidget.cpp b/plugins/tray/fashiontray/fashiontraycontrolwidget.cpp index 726668944..b7edc1199 100644 --- a/plugins/tray/fashiontray/fashiontraycontrolwidget.cpp +++ b/plugins/tray/fashiontray/fashiontraycontrolwidget.cpp @@ -24,10 +24,11 @@ #include #include #include - #include #include +#include "../frame/util/imageutil.h" + DWIDGET_USE_NAMESPACE #define ExpandedKey "fashion-tray-expanded" @@ -200,8 +201,6 @@ void FashionTrayControlWidget::refreshArrowPixmap() case Dock::Right: iconPath = m_expanded ? "arrow-down" : "arrow-up"; break; - default: - break; } if (height() <= PLUGIN_BACKGROUND_MIN_SIZE && DGuiApplicationHelper::instance()->themeType() == DGuiApplicationHelper::LightType) { @@ -209,6 +208,5 @@ void FashionTrayControlWidget::refreshArrowPixmap() } const auto ratio = devicePixelRatioF(); - m_arrowPix = QIcon::fromTheme(iconPath, QIcon(QString(":/icons/resources/%1").arg(iconPath))).pixmap(QSize(PLUGIN_ICON_MAX_SIZE, PLUGIN_ICON_MAX_SIZE) * ratio); - m_arrowPix.setDevicePixelRatio(ratio); + m_arrowPix = ImageUtil::loadSvg(iconPath, ":/icons/resources/", PLUGIN_ICON_MAX_SIZE, ratio); }