Add display spacing control

This commit is contained in:
wheaney 2025-08-29 16:18:47 -07:00
parent 23b9f6a445
commit 0af1b89a4f
6 changed files with 45 additions and 3 deletions

View File

@ -22,5 +22,12 @@
<label>Zoom on Focus Enabled</label>
<description>Enable zooming in on the focused display.</description>
</entry>
<entry name="DisplaySpacing" type="Int">
<default>0</default>
<min>0</min>
<max>100</max>
<label>Display Spacing</label>
<description>How far apart the displays are visually (not logically)</description>
</entry>
</group>
</kcfg>

View File

@ -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;
}

View File

@ -26,6 +26,7 @@ namespace KWin
Q_PROPERTY(QList<quint32> 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<Output *> m_virtualOutputs;
};

View File

@ -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());
}

View File

@ -79,7 +79,24 @@
</property>
</widget>
</item>
<item row="3" column="0" colspan="2">
<item row="3" column="0">
<widget class="QLabel" name="labelDisplaySpacing">
<property name="text">
<string>Display Spacing:</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QSlider" name="kcfg_DisplaySpacing">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="tracking">
<bool>true</bool>
</property>
</widget>
</item>
<item row="4" column="0" colspan="2">
<widget class="KShortcutsEditor" name="shortcutsEditor" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">

View File

@ -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 {