From 0af1b89a4f6514a5b11e239ca1c1767c26f7ff57 Mon Sep 17 00:00:00 2001 From: wheaney <42350981+wheaney@users.noreply.github.com> Date: Fri, 29 Aug 2025 16:18:47 -0700 Subject: [PATCH] Add display spacing control --- kwin/src/breezydesktopconfig.kcfg | 7 +++++++ kwin/src/breezydesktopeffect.cpp | 12 ++++++++++++ kwin/src/breezydesktopeffect.h | 5 +++++ kwin/src/kcm/breezydesktopeffectkcm.cpp | 2 ++ kwin/src/kcm/breezydesktopeffectkcm.ui | 19 ++++++++++++++++++- kwin/src/qml/main.qml | 3 +-- 6 files changed, 45 insertions(+), 3 deletions(-) diff --git a/kwin/src/breezydesktopconfig.kcfg b/kwin/src/breezydesktopconfig.kcfg index 86e805a..8d0824d 100644 --- a/kwin/src/breezydesktopconfig.kcfg +++ b/kwin/src/breezydesktopconfig.kcfg @@ -22,5 +22,12 @@ Enable zooming in on the focused display. + + 0 + 0 + 100 + + How far apart the displays are visually (not logically) + diff --git a/kwin/src/breezydesktopeffect.cpp b/kwin/src/breezydesktopeffect.cpp index 8f50393..2b30abd 100644 --- a/kwin/src/breezydesktopeffect.cpp +++ b/kwin/src/breezydesktopeffect.cpp @@ -149,6 +149,7 @@ void BreezyDesktopEffect::reconfigure(ReconfigureFlags) BreezyDesktopConfig::self()->read(); setFocusedDisplayDistance(BreezyDesktopConfig::focusedDisplayDistance() / 100.0f); setAllDisplaysDistance(BreezyDesktopConfig::allDisplaysDistance() / 100.0f); + setDisplaySpacing(BreezyDesktopConfig::displaySpacing() / 1000.0f); setZoomOnFocusEnabled(BreezyDesktopConfig::zoomOnFocusEnabled()); } @@ -312,6 +313,17 @@ void BreezyDesktopEffect::setAllDisplaysDistance(qreal distance) { } } +qreal BreezyDesktopEffect::displaySpacing() const { + return m_displaySpacing; +} + +void BreezyDesktopEffect::setDisplaySpacing(qreal spacing) { + if (spacing != m_displaySpacing) { + m_displaySpacing = spacing; + Q_EMIT displaySpacingChanged(); + } +} + qreal BreezyDesktopEffect::diagonalFOV() const { return m_diagonalFOV; } diff --git a/kwin/src/breezydesktopeffect.h b/kwin/src/breezydesktopeffect.h index 77db59a..eb6470a 100644 --- a/kwin/src/breezydesktopeffect.h +++ b/kwin/src/breezydesktopeffect.h @@ -26,6 +26,7 @@ namespace KWin Q_PROPERTY(QList displayResolution READ displayResolution NOTIFY devicePropertiesChanged) Q_PROPERTY(qreal focusedDisplayDistance READ focusedDisplayDistance NOTIFY displayDistanceChanged) Q_PROPERTY(qreal allDisplaysDistance READ allDisplaysDistance NOTIFY displayDistanceChanged) + Q_PROPERTY(qreal displaySpacing READ displaySpacing NOTIFY displaySpacingChanged) Q_PROPERTY(qreal diagonalFOV READ diagonalFOV NOTIFY devicePropertiesChanged) Q_PROPERTY(qreal lensDistanceRatio READ lensDistanceRatio NOTIFY devicePropertiesChanged) Q_PROPERTY(bool sbsEnabled READ sbsEnabled NOTIFY devicePropertiesChanged) @@ -55,6 +56,8 @@ namespace KWin void setFocusedDisplayDistance(qreal distance); qreal allDisplaysDistance() const; void setAllDisplaysDistance(qreal distance); + qreal displaySpacing() const; + void setDisplaySpacing(qreal spacing); qreal diagonalFOV() const; qreal lensDistanceRatio() const; bool sbsEnabled() const; @@ -75,6 +78,7 @@ namespace KWin Q_SIGNALS: void displayDistanceChanged(); + void displaySpacingChanged(); void enabledStateChanged(); void zoomOnFocusChanged(); void imuRotationsChanged(); @@ -112,6 +116,7 @@ namespace KWin QTimer *m_cursorUpdateTimer = nullptr; qreal m_focusedDisplayDistance = 0.85; qreal m_allDisplaysDistance = 1.05; + qreal m_displaySpacing = 0.0; QList m_virtualOutputs; }; diff --git a/kwin/src/kcm/breezydesktopeffectkcm.cpp b/kwin/src/kcm/breezydesktopeffectkcm.cpp index c7060c6..67dd94f 100644 --- a/kwin/src/kcm/breezydesktopeffectkcm.cpp +++ b/kwin/src/kcm/breezydesktopeffectkcm.cpp @@ -65,6 +65,7 @@ BreezyDesktopEffectConfig::BreezyDesktopEffectConfig(QObject *parent, const KPlu connect(ui.shortcutsEditor, &KShortcutsEditor::keyChange, this, &BreezyDesktopEffectConfig::markAsChanged); connect(ui.kcfg_FocusedDisplayDistance, &QSlider::valueChanged, this, &BreezyDesktopEffectConfig::save); connect(ui.kcfg_AllDisplaysDistance, &QSlider::valueChanged, this, &BreezyDesktopEffectConfig::save); + connect(ui.kcfg_DisplaySpacing, &QSlider::valueChanged, this, &BreezyDesktopEffectConfig::save); } BreezyDesktopEffectConfig::~BreezyDesktopEffectConfig() @@ -108,6 +109,7 @@ void BreezyDesktopEffectConfig::updateUiFromConfig() { ui.kcfg_FocusedDisplayDistance->setValue(BreezyDesktopConfig::self()->focusedDisplayDistance()); ui.kcfg_AllDisplaysDistance->setValue(BreezyDesktopConfig::self()->allDisplaysDistance()); + ui.kcfg_DisplaySpacing->setValue(BreezyDesktopConfig::self()->displaySpacing()); ui.kcfg_ZoomOnFocusEnabled->setChecked(BreezyDesktopConfig::self()->zoomOnFocusEnabled()); } diff --git a/kwin/src/kcm/breezydesktopeffectkcm.ui b/kwin/src/kcm/breezydesktopeffectkcm.ui index b64171b..1274eb8 100644 --- a/kwin/src/kcm/breezydesktopeffectkcm.ui +++ b/kwin/src/kcm/breezydesktopeffectkcm.ui @@ -79,7 +79,24 @@ - + + + + Display Spacing: + + + + + + + Qt::Horizontal + + + true + + + + diff --git a/kwin/src/qml/main.qml b/kwin/src/qml/main.qml index 2b1a241..d2ad25a 100644 --- a/kwin/src/qml/main.qml +++ b/kwin/src/qml/main.qml @@ -64,7 +64,6 @@ Item { property var fovDetails: displays.fovDetails(screens, viewportResolution[0], viewportResolution[1], viewportDiagonalFOVDegrees, effect.lensDistanceRatio) property var monitorPlacements: { - const monitorSpacing = 0.0; const adjustedGeometries = screens.map(screen => { const g = screen.geometry; return { @@ -74,7 +73,7 @@ Item { height: g.height }; }); - return displays.monitorsToPlacements(fovDetails, adjustedGeometries, monitorSpacing); + return displays.monitorsToPlacements(fovDetails, adjustedGeometries, effect.displaySpacing); } Component {