From 54b3c2c6b673442d2632e8e5b243e08afee82fb4 Mon Sep 17 00:00:00 2001 From: Marco Martin Date: Tue, 22 Aug 2023 08:21:21 +0000 Subject: [PATCH] port screenedge effect to KSvg Part of https://invent.kde.org/frameworks/ksvg/-/issues/1. Port the linked usage of Plasma::Svg to KSvg::Svg, still syncing with the Plasma style. --- CMakeLists.txt | 9 ++++++-- src/plugins/screenedge/CMakeLists.txt | 3 ++- src/plugins/screenedge/screenedgeeffect.cpp | 23 +++++++++++++++++++-- src/plugins/screenedge/screenedgeeffect.h | 7 +++++-- 4 files changed, 35 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 08a14f0fb5..ca3bfc1d35 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -82,7 +82,6 @@ find_package(KF6 ${KF6_MIN_VERSION} REQUIRED COMPONENTS I18n IdleTime Package - Plasma Service Svg WidgetsAddons @@ -136,7 +135,13 @@ add_feature_info("KF6Runner" KF6Runner_FOUND "Enable building of KWin with krunn find_package(KF6Kirigami2 ${KF6_MIN_VERSION} CONFIG) set_package_properties(KF6Kirigami2 PROPERTIES DESCRIPTION "A QtQuick based components set" - PURPOSE "Required at runtime for Virtual desktop KCM" + PURPOSE "Required at runtime for several QML effects" + TYPE RUNTIME +) +find_package(KF6Plasma ${KF6_MIN_VERSION} CONFIG) +set_package_properties(KF6Plasma PROPERTIES + DESCRIPTION "A QtQuick based components set" + PURPOSE "Required at runtime for several QML effects" TYPE RUNTIME ) diff --git a/src/plugins/screenedge/CMakeLists.txt b/src/plugins/screenedge/CMakeLists.txt index 7c03160822..a83106443d 100644 --- a/src/plugins/screenedge/CMakeLists.txt +++ b/src/plugins/screenedge/CMakeLists.txt @@ -12,5 +12,6 @@ target_link_libraries(screenedge PRIVATE kwineffects kwinglutils - KF6::Plasma + KF6::Svg + KF6::ConfigCore ) diff --git a/src/plugins/screenedge/screenedgeeffect.cpp b/src/plugins/screenedge/screenedgeeffect.cpp index 998f4fc361..76d5359973 100644 --- a/src/plugins/screenedge/screenedgeeffect.cpp +++ b/src/plugins/screenedge/screenedgeeffect.cpp @@ -13,8 +13,11 @@ #include "libkwineffects/rendertarget.h" #include "libkwineffects/renderviewport.h" // KDE -#include +#include +#include +#include // Qt +#include #include #include #include @@ -45,7 +48,23 @@ ScreenEdgeEffect::~ScreenEdgeEffect() void ScreenEdgeEffect::ensureGlowSvg() { if (!m_glow) { - m_glow = new Plasma::Svg(this); + m_glow = new KSvg::Svg(this); + m_glow->imageSet()->setBasePath(QStringLiteral("plasma/desktoptheme")); + + const QString groupName = QStringLiteral("Theme"); + KSharedConfig::Ptr config = KSharedConfig::openConfig(QStringLiteral("plasmarc")); + KConfigGroup cg = KConfigGroup(config, groupName); + m_glow->imageSet()->setImageSetName(cg.readEntry("name", QStringLiteral("default"))); + + m_configWatcher = KConfigWatcher::create(config); + + connect(m_configWatcher.data(), &KConfigWatcher::configChanged, this, [this](const KConfigGroup &group, const QByteArrayList &names) { + if (group.name() != QStringLiteral("Theme") || !names.contains(QStringLiteral("name"))) { + return; + } + m_glow->imageSet()->setImageSetName(group.readEntry("name", QStringLiteral("default"))); + }); + m_glow->setImagePath(QStringLiteral("widgets/glowbar")); } } diff --git a/src/plugins/screenedge/screenedgeeffect.h b/src/plugins/screenedge/screenedgeeffect.h index 61f77a3ba2..843752c90a 100644 --- a/src/plugins/screenedge/screenedgeeffect.h +++ b/src/plugins/screenedge/screenedgeeffect.h @@ -9,8 +9,10 @@ #pragma once #include "libkwineffects/kwineffects.h" +#include + class QTimer; -namespace Plasma +namespace KSvg { class Svg; } @@ -45,7 +47,8 @@ private: QImage createCornerGlow(ElectricBorder border); QImage createEdgeGlow(ElectricBorder border, const QSize &size); QSize cornerGlowSize(ElectricBorder border); - Plasma::Svg *m_glow = nullptr; + KConfigWatcher::Ptr m_configWatcher; + KSvg::Svg *m_glow = nullptr; std::map> m_borders; QTimer *m_cleanupTimer; };