diff --git a/kwin/src/CMakeLists.txt b/kwin/src/CMakeLists.txt index e645c19..d99e237 100644 --- a/kwin/src/CMakeLists.txt +++ b/kwin/src/CMakeLists.txt @@ -5,7 +5,7 @@ target_sources(breezy_desktop_effect PRIVATE breezydesktopeffect.cpp main.cpp ) -kconfig_add_kcfg_files(breezy_desktop_effect cubeconfig.kcfgc) +kconfig_add_kcfg_files(breezy_desktop_effect breezydesktopconfig.kcfgc) target_include_directories(breezy_desktop_effect PRIVATE /usr/include/kwin) target_link_libraries(breezy_desktop_effect @@ -23,5 +23,5 @@ target_link_libraries(breezy_desktop_effect KWin::kwin ) -install(DIRECTORY qml DESTINATION ${KDE_INSTALL_DATADIR}/kwin/effects/breezy_desktop) -install(FILES metadata.json DESTINATION ${KDE_INSTALL_DATADIR}/kwin/effects/breezy_desktop) +install(DIRECTORY qml DESTINATION ${KDE_INSTALL_DATADIR}/kwin/effects/breezy_desktop_effect) +install(FILES metadata.json DESTINATION ${KDE_INSTALL_DATADIR}/kwin/effects/breezy_desktop_effect) diff --git a/kwin/src/cubeconfig.kcfg b/kwin/src/breezydesktopconfig.kcfg similarity index 57% rename from kwin/src/cubeconfig.kcfg rename to kwin/src/breezydesktopconfig.kcfg index 57e83db..b2129c8 100644 --- a/kwin/src/cubeconfig.kcfg +++ b/kwin/src/breezydesktopconfig.kcfg @@ -4,6 +4,12 @@ xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0 http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" > - + + + 1.05 + 0.2 + 2.5 + + diff --git a/kwin/src/breezydesktopconfig.kcfgc b/kwin/src/breezydesktopconfig.kcfgc new file mode 100644 index 0000000..4f16263 --- /dev/null +++ b/kwin/src/breezydesktopconfig.kcfgc @@ -0,0 +1,4 @@ +File=breezydesktopconfig.kcfg +ClassName=BreezyDesktopConfig +Singleton=true +Mutators=true diff --git a/kwin/src/breezydesktopeffect.cpp b/kwin/src/breezydesktopeffect.cpp index d298320..6789161 100644 --- a/kwin/src/breezydesktopeffect.cpp +++ b/kwin/src/breezydesktopeffect.cpp @@ -1,5 +1,5 @@ #include "breezydesktopeffect.h" -#include "cubeconfig.h" +#include "breezydesktopconfig.h" #include "effect/effect.h" #include "effect/effecthandler.h" #include "opengl/glutils.h" @@ -64,7 +64,7 @@ BreezyDesktopEffect::BreezyDesktopEffect() : m_shutdownTimer(new QTimer(this)) { qCCritical(KWIN_XR) << "\t\t\tBreezy - constructor"; - qmlRegisterUncreatableType("org.kde.kwin.effect.breezy_desktop", 1, 0, "BreezyDesktopEffect", QStringLiteral("BreezyDesktop cannot be created in QML")); + qmlRegisterUncreatableType("org.kde.kwin.effect.breezy_desktop_effect", 1, 0, "BreezyDesktopEffect", QStringLiteral("BreezyDesktop cannot be created in QML")); const QKeySequence defaultToggleShortcut = Qt::META | Qt::Key_B; m_toggleAction = new QAction(this); @@ -86,7 +86,7 @@ BreezyDesktopEffect::BreezyDesktopEffect() updateCursorImage(); reconfigure(ReconfigureAll); - setSource(QUrl::fromLocalFile(QStandardPaths::locate(QStandardPaths::GenericDataLocation, QStringLiteral("kwin/effects/breezy_desktop/qml/main.qml")))); + setSource(QUrl::fromLocalFile(QStandardPaths::locate(QStandardPaths::GenericDataLocation, QStringLiteral("kwin/effects/breezy_desktop_effect/qml/main.qml")))); // Monitor the IMU file for changes, even if it doesn't exist at startup m_shmDirectoryWatcher = new QFileSystemWatcher(this); @@ -122,7 +122,8 @@ BreezyDesktopEffect::BreezyDesktopEffect() void BreezyDesktopEffect::reconfigure(ReconfigureFlags) { - CubeConfig::self()->read(); + BreezyDesktopConfig::self()->read(); + setDisplayDistance(BreezyDesktopConfig::displayDistance()); } QVariantMap BreezyDesktopEffect::initialProperties(Output *screen) @@ -167,14 +168,6 @@ void BreezyDesktopEffect::deactivate() disconnect(effects, &EffectsHandler::cursorShapeChanged, this, &BreezyDesktopEffect::updateCursorImage); m_cursorUpdateTimer->stop(); showCursor(); - - const QList screens = effects->screens(); - for (Output *screen : screens) { - if (QuickSceneView *view = viewForScreen(screen)) { - QMetaObject::invokeMethod(view->rootItem(), "stop"); - } - } - realDeactivate(); } @@ -184,27 +177,6 @@ void BreezyDesktopEffect::realDeactivate() setRunning(false); } -int BreezyDesktopEffect::animationDuration() const -{ - return 200; -} - -qreal BreezyDesktopEffect::faceDisplacement() const { - return 100; -} - -qreal BreezyDesktopEffect::distanceFactor() const { - return 1.5; -} - -BreezyDesktopEffect::BackgroundMode BreezyDesktopEffect::backgroundMode() const { - return BackgroundMode::Color; -} - -QColor BreezyDesktopEffect::backgroundColor() const { - return QColor(Qt::black); -} - bool BreezyDesktopEffect::isEnabled() const { return m_enabled; } @@ -233,6 +205,17 @@ QList BreezyDesktopEffect::displayResolution() const { return m_displayResolution; } +qreal BreezyDesktopEffect::displayDistance() const { + return m_displayDistance; +} + +void BreezyDesktopEffect::setDisplayDistance(qreal distance) { + if (distance != m_displayDistance) { + m_displayDistance = std::clamp(distance, 0.2, 2.5); + Q_EMIT displayDistanceChanged(); + } +} + qreal BreezyDesktopEffect::diagonalFOV() const { return m_diagonalFOV; } diff --git a/kwin/src/breezydesktopeffect.h b/kwin/src/breezydesktopeffect.h index cb5ab79..d77df4d 100644 --- a/kwin/src/breezydesktopeffect.h +++ b/kwin/src/breezydesktopeffect.h @@ -13,11 +13,6 @@ namespace KWin class BreezyDesktopEffect : public QuickSceneEffect { Q_OBJECT - Q_PROPERTY(int animationDuration READ animationDuration NOTIFY animationDurationChanged) - Q_PROPERTY(qreal faceDisplacement READ faceDisplacement NOTIFY faceDisplacementChanged) - Q_PROPERTY(qreal distanceFactor READ distanceFactor NOTIFY distanceFactorChanged) - Q_PROPERTY(BackgroundMode backgroundMode READ backgroundMode NOTIFY backgroundModeChanged) - Q_PROPERTY(QColor backgroundColor READ backgroundColor NOTIFY backgroundColorChanged) Q_PROPERTY(bool isEnabled READ isEnabled NOTIFY enabledStateChanged) Q_PROPERTY(bool imuResetState READ imuResetState NOTIFY imuRotationsChanged) Q_PROPERTY(QList imuRotations READ imuRotations NOTIFY imuRotationsChanged) @@ -27,18 +22,13 @@ namespace KWin Q_PROPERTY(QPointF cursorPos READ cursorPos NOTIFY cursorPosChanged) Q_PROPERTY(QList lookAheadConfig READ lookAheadConfig NOTIFY devicePropertiesChanged) Q_PROPERTY(QList displayResolution READ displayResolution NOTIFY devicePropertiesChanged) + Q_PROPERTY(qreal displayDistance READ displayDistance NOTIFY displayDistanceChanged) Q_PROPERTY(qreal diagonalFOV READ diagonalFOV NOTIFY devicePropertiesChanged) Q_PROPERTY(qreal lensDistanceRatio READ lensDistanceRatio NOTIFY devicePropertiesChanged) Q_PROPERTY(bool sbsEnabled READ sbsEnabled NOTIFY devicePropertiesChanged) Q_PROPERTY(bool customBannerEnabled READ customBannerEnabled NOTIFY devicePropertiesChanged) public: - enum class BackgroundMode - { - Color, - Skybox, - }; - Q_ENUM(BackgroundMode) BreezyDesktopEffect(); @@ -46,11 +36,6 @@ namespace KWin int requestedEffectChainPosition() const override; - int animationDuration() const; - qreal faceDisplacement() const; - qreal distanceFactor() const; - BackgroundMode backgroundMode() const; - QColor backgroundColor() const; QString cursorImageSource() const; QPointF cursorPos() const; @@ -61,6 +46,8 @@ namespace KWin bool imuResetState() const; QList lookAheadConfig() const; QList displayResolution() const; + qreal displayDistance() const; + void setDisplayDistance(qreal distance); qreal diagonalFOV() const; qreal lensDistanceRatio() const; bool sbsEnabled() const; @@ -78,12 +65,7 @@ namespace KWin void updateCursorPos(); Q_SIGNALS: - void faceDisplacementChanged(); - void distanceFactorChanged(); - void animationDurationChanged(); - void skyboxChanged(); - void backgroundModeChanged(); - void backgroundColorChanged(); + void displayDistanceChanged(); void enabledStateChanged(); void imuRotationsChanged(); void cursorImageChanged(); @@ -119,6 +101,7 @@ namespace KWin QFileSystemWatcher *m_shmDirectoryWatcher = nullptr; QPointF m_cursorPos; QTimer *m_cursorUpdateTimer = nullptr; + qreal m_displayDistance = 1.05; }; } // namespace KWin diff --git a/kwin/src/cubeconfig.kcfgc b/kwin/src/cubeconfig.kcfgc deleted file mode 100644 index 4c28cf9..0000000 --- a/kwin/src/cubeconfig.kcfgc +++ /dev/null @@ -1,4 +0,0 @@ -File=cubeconfig.kcfg -ClassName=CubeConfig -Singleton=true -Mutators=true diff --git a/kwin/src/kcm/CMakeLists.txt b/kwin/src/kcm/CMakeLists.txt index 9a6df2a..5a0913b 100644 --- a/kwin/src/kcm/CMakeLists.txt +++ b/kwin/src/kcm/CMakeLists.txt @@ -2,12 +2,12 @@ # # SPDX-License-Identifier: BSD-3-Clause -set(breezy_desktop_config_SOURCES cubeeffectkcm.cpp) -ki18n_wrap_ui(breezy_desktop_config_SOURCES cubeeffectkcm.ui) +set(breezy_desktop_config_SOURCES breezydesktopeffectkcm.cpp) +ki18n_wrap_ui(breezy_desktop_config_SOURCES breezydesktopeffectkcm.ui) qt_add_dbus_interface(breezy_desktop_config_SOURCES ${KWIN_EFFECTS_INTERFACE} kwineffects_interface) kcoreaddons_add_plugin(breezy_desktop_config INSTALL_NAMESPACE "kwin/effects/configs" SOURCES ${breezy_desktop_config_SOURCES}) -kconfig_add_kcfg_files(breezy_desktop_config ../cubeconfig.kcfgc) +kconfig_add_kcfg_files(breezy_desktop_config ../breezydesktopconfig.kcfgc) target_link_libraries(breezy_desktop_config KF6::ConfigCore KF6::ConfigGui diff --git a/kwin/src/kcm/breezydesktopeffectkcm.cpp b/kwin/src/kcm/breezydesktopeffectkcm.cpp new file mode 100644 index 0000000..23e47fb --- /dev/null +++ b/kwin/src/kcm/breezydesktopeffectkcm.cpp @@ -0,0 +1,74 @@ +/* + SPDX-FileCopyrightText: 2022 Vlad Zahorodnii + + SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL +*/ + +#include "breezydesktopeffectkcm.h" +#include "breezydesktopconfig.h" + +#include + +#include +#include +#include +#include + +#include +#include + +K_PLUGIN_CLASS(BreezyDesktopEffectConfig) + +BreezyDesktopEffectConfig::BreezyDesktopEffectConfig(QObject *parent, const KPluginMetaData &data, const QVariantList &args) + : KCModule(parent, data) +{ + ui.setupUi(widget()); + addConfig(BreezyDesktopConfig::self(), widget()); +} + +BreezyDesktopEffectConfig::~BreezyDesktopEffectConfig() +{ +} + +void BreezyDesktopEffectConfig::load() +{ + KCModule::load(); + updateUiFromConfig(); + updateUnmanagedState(); +} + +void BreezyDesktopEffectConfig::save() +{ + updateConfigFromUi(); + BreezyDesktopConfig::self()->save(); + KCModule::save(); + updateUnmanagedState(); + + OrgKdeKwinEffectsInterface interface(QStringLiteral("org.kde.KWin"), QStringLiteral("/Effects"), QDBusConnection::sessionBus()); + interface.reconfigureEffect(QStringLiteral("breezy_desktop_effect")); +} + +void BreezyDesktopEffectConfig::defaults() +{ + KCModule::defaults(); + updateUiFromDefaultConfig(); + updateUnmanagedState(); +} + +void BreezyDesktopEffectConfig::updateConfigFromUi() +{ +} + +void BreezyDesktopEffectConfig::updateUiFromConfig() +{ +} + +void BreezyDesktopEffectConfig::updateUiFromDefaultConfig() +{ +} + +void BreezyDesktopEffectConfig::updateUnmanagedState() +{ +} + +#include "breezydesktopeffectkcm.moc" diff --git a/kwin/src/kcm/cubeeffectkcm.h b/kwin/src/kcm/breezydesktopeffectkcm.h similarity index 63% rename from kwin/src/kcm/cubeeffectkcm.h rename to kwin/src/kcm/breezydesktopeffectkcm.h index efe0521..fa3b5e6 100644 --- a/kwin/src/kcm/cubeeffectkcm.h +++ b/kwin/src/kcm/breezydesktopeffectkcm.h @@ -8,15 +8,15 @@ #include -#include "ui_cubeeffectkcm.h" +#include "ui_breezydesktopeffectkcm.h" -class CubeEffectConfig : public KCModule +class BreezyDesktopEffectConfig : public KCModule { Q_OBJECT public: - CubeEffectConfig(QObject *parent, const KPluginMetaData &data, const QVariantList &args); - ~CubeEffectConfig() override; + BreezyDesktopEffectConfig(QObject *parent, const KPluginMetaData &data, const QVariantList &args); + ~BreezyDesktopEffectConfig() override; public Q_SLOTS: void load() override; @@ -29,5 +29,5 @@ private: void updateConfigFromUi(); void updateUnmanagedState(); - ::Ui::CubeEffectConfig ui; + ::Ui::BreezyDesktopEffectConfig ui; }; diff --git a/kwin/src/kcm/cubeeffectkcm.ui b/kwin/src/kcm/breezydesktopeffectkcm.ui similarity index 57% rename from kwin/src/kcm/cubeeffectkcm.ui rename to kwin/src/kcm/breezydesktopeffectkcm.ui index cb2d34f..f134c1e 100644 --- a/kwin/src/kcm/cubeeffectkcm.ui +++ b/kwin/src/kcm/breezydesktopeffectkcm.ui @@ -5,8 +5,8 @@ SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL --> - CubeEffectConfig - + BreezyDesktopEffectConfig + 0 @@ -23,9 +23,22 @@ - + - Cube face displacement: + Display Distance: + + + + + + + 0.2 + + + 2.5 + + + 0.01 diff --git a/kwin/src/kcm/cubeeffectkcm.cpp b/kwin/src/kcm/cubeeffectkcm.cpp deleted file mode 100644 index c61dfa1..0000000 --- a/kwin/src/kcm/cubeeffectkcm.cpp +++ /dev/null @@ -1,74 +0,0 @@ -/* - SPDX-FileCopyrightText: 2022 Vlad Zahorodnii - - SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL -*/ - -#include "cubeeffectkcm.h" -#include "cubeconfig.h" - -#include - -#include -#include -#include -#include - -#include -#include - -K_PLUGIN_CLASS(CubeEffectConfig) - -CubeEffectConfig::CubeEffectConfig(QObject *parent, const KPluginMetaData &data, const QVariantList &args) - : KCModule(parent, data) -{ - ui.setupUi(widget()); - addConfig(CubeConfig::self(), widget()); -} - -CubeEffectConfig::~CubeEffectConfig() -{ -} - -void CubeEffectConfig::load() -{ - KCModule::load(); - updateUiFromConfig(); - updateUnmanagedState(); -} - -void CubeEffectConfig::save() -{ - updateConfigFromUi(); - CubeConfig::self()->save(); - KCModule::save(); - updateUnmanagedState(); - - OrgKdeKwinEffectsInterface interface(QStringLiteral("org.kde.KWin"), QStringLiteral("/Effects"), QDBusConnection::sessionBus()); - interface.reconfigureEffect(QStringLiteral("cube")); -} - -void CubeEffectConfig::defaults() -{ - KCModule::defaults(); - updateUiFromDefaultConfig(); - updateUnmanagedState(); -} - -void CubeEffectConfig::updateConfigFromUi() -{ -} - -void CubeEffectConfig::updateUiFromConfig() -{ -} - -void CubeEffectConfig::updateUiFromDefaultConfig() -{ -} - -void CubeEffectConfig::updateUnmanagedState() -{ -} - -#include "cubeeffectkcm.moc" diff --git a/kwin/src/metadata.json b/kwin/src/metadata.json index 41b4103..7bf93f5 100644 --- a/kwin/src/metadata.json +++ b/kwin/src/metadata.json @@ -10,6 +10,7 @@ "Category": "Tools", "Description": "Breezy Desktop XR Effect", "EnabledByDefault": true, + "Id": "breezy_desktop_effect", "License": "GPL", "Name": "Breezy Desktop XR", "ServiceTypes": [ diff --git a/kwin/src/qml/Displays.qml b/kwin/src/qml/Displays.qml index 27861fd..95ddde8 100644 --- a/kwin/src/qml/Displays.qml +++ b/kwin/src/qml/Displays.qml @@ -1,6 +1,8 @@ import QtQuick QtObject { + property real displayDistance: effect.displayDistance + // Converts degrees to radians function degreeToRadian(degree) { return degree * Math.PI / 180; @@ -23,7 +25,7 @@ QtObject { } function displayDistanceDefault() { - return 1.0; + return displayDistance; } function actualWrapScheme(screens, viewportWidth, viewportHeight) { diff --git a/kwin/src/qml/main.qml b/kwin/src/qml/main.qml index b22cf5a..468af61 100644 --- a/kwin/src/qml/main.qml +++ b/kwin/src/qml/main.qml @@ -1,7 +1,7 @@ import QtQuick import QtQuick3D import org.kde.kwin as KWinComponents -import org.kde.kwin.effect.breezy_desktop +import org.kde.kwin.effect.breezy_desktop_effect Item { id: root