diff --git a/kwin/src/breezydesktopeffect.cpp b/kwin/src/breezydesktopeffect.cpp index 2942f73..aa2d254 100644 --- a/kwin/src/breezydesktopeffect.cpp +++ b/kwin/src/breezydesktopeffect.cpp @@ -157,9 +157,9 @@ BreezyDesktopEffect::BreezyDesktopEffect() !m_shmFileWatcher->files().contains(DataView::SHM_PATH) )) { m_shmFileWatcher->removePath(DataView::SHM_PATH); - disconnect(m_shmFileWatcher, &QFileSystemWatcher::fileChanged, this, &BreezyDesktopEffect::updatePoseOrientation); + disconnect(m_shmFileWatcher, &QFileSystemWatcher::fileChanged, this, &BreezyDesktopEffect::updatePose); m_shmFileWatcher->addPath(DataView::SHM_PATH); - connect(m_shmFileWatcher, &QFileSystemWatcher::fileChanged, this, &BreezyDesktopEffect::updatePoseOrientation); + connect(m_shmFileWatcher, &QFileSystemWatcher::fileChanged, this, &BreezyDesktopEffect::updatePose); } }; @@ -173,7 +173,7 @@ BreezyDesktopEffect::BreezyDesktopEffect() m_watchdogTimer->setInterval(1000); connect(m_watchdogTimer, &QTimer::timeout, this, [this]() { if (!m_enabled) return; - this->updatePoseOrientation(); + this->updatePose(); }); m_watchdogTimer->start(); @@ -494,7 +494,7 @@ qreal BreezyDesktopEffect::focusedDisplayDistance() const { void BreezyDesktopEffect::setFocusedDisplayDistance(qreal distance) { if (distance != m_focusedDisplayDistance) { - m_focusedDisplayDistance = std::clamp(distance, 0.2, m_allDisplaysDistance); + m_focusedDisplayDistance = std::clamp(distance, 0.1, m_allDisplaysDistance); Q_EMIT focusedDisplayDistanceChanged(); if (m_smoothFollowEnabled) updateDriverSmoothFollowSettings(); @@ -507,7 +507,7 @@ qreal BreezyDesktopEffect::allDisplaysDistance() const { void BreezyDesktopEffect::setAllDisplaysDistance(qreal distance) { if (distance != m_allDisplaysDistance) { - qreal min = m_zoomOnFocusEnabled ? m_focusedDisplayDistance : 0.2; + qreal min = m_zoomOnFocusEnabled ? m_focusedDisplayDistance : 0.1; m_allDisplaysDistance = std::clamp(distance, min, 2.5); Q_EMIT allDisplaysDistanceChanged(); } @@ -529,7 +529,7 @@ qreal BreezyDesktopEffect::displaySize() const { } void BreezyDesktopEffect::setDisplaySize(qreal size) { - const qreal clamped = std::clamp(size, 0.5, 2.0); + const qreal clamped = std::clamp(size, 0.1, 4.0); if (!qFuzzyCompare(clamped, m_displaySize)) { m_displaySize = clamped; Q_EMIT displaySizeChanged(); @@ -625,7 +625,7 @@ bool BreezyDesktopEffect::checkParityByte(const char* data) { static qint64 lastConfigUpdate = 0; static qint64 activatedAt = 0; -void BreezyDesktopEffect::updatePoseOrientation() { +void BreezyDesktopEffect::updatePose() { // Reentrancy guard: if an update is already in progress, skip bool expected = false; if (!m_poseUpdateInProgress.compare_exchange_strong(expected, true)) { diff --git a/kwin/src/breezydesktopeffect.h b/kwin/src/breezydesktopeffect.h index f3badc3..560dbb0 100644 --- a/kwin/src/breezydesktopeffect.h +++ b/kwin/src/breezydesktopeffect.h @@ -119,7 +119,7 @@ namespace KWin void disableDriver(); void toggle(); void addVirtualDisplay(QSize size); - void updatePoseOrientation(); + void updatePose(); void updateCursorImage(); void updateCursorPos(); QVariantList listVirtualDisplays() const; diff --git a/kwin/src/qml/CameraController.qml b/kwin/src/qml/CameraController.qml index 9c50100..a2820a1 100644 --- a/kwin/src/qml/CameraController.qml +++ b/kwin/src/qml/CameraController.qml @@ -31,6 +31,8 @@ Item { property real clipNear: 10.0 property real clipFar: 10000.0 + property int sampleCounter: 0 + function ratesOfChange(orientations) { const e0 = orientations[0].toEulerAngles(); const e1 = orientations[1].toEulerAngles(); @@ -60,7 +62,13 @@ Item { effect.lookAheadOverride ) ); - camera.position = position.times(fovDetails.completeScreenDistancePixels).plus(orientations[0].times(Qt.vector3d(0, 0, -fovDetails.lensDistancePixels))); + camera.position = position.times(fovDetails.fullScreenDistancePixels).plus(orientations[0].times(Qt.vector3d(0, 0, -fovDetails.lensDistancePixels))); + + sampleCounter += 1; + if (sampleCounter === 60) { + sampleCounter = 0; + console.log(`Breezy - Camera position: ${camera.position.x.toFixed(2)}, ${camera.position.y.toFixed(2)}, ${camera.position.z.toFixed(2)}; rotation: ${camera.eulerRotation.x.toFixed(2)}, ${camera.eulerRotation.y.toFixed(2)}, ${camera.eulerRotation.z.toFixed(2)}`); + } } // how far to look ahead is how old the pose data is plus a constant that is either the default for this device or an override diff --git a/kwin/src/qml/Displays.qml b/kwin/src/qml/Displays.qml index 59c108f..f331e4c 100644 --- a/kwin/src/qml/Displays.qml +++ b/kwin/src/qml/Displays.qml @@ -59,6 +59,7 @@ QtObject { } function buildFovDetails(screens, viewportWidth, viewportHeight, viewportDiagonalFOV, lensDistanceRatio, defaultDisplayDistance, wrappingChoice, distanceAdjustedSize) { + console.log(`Breezy - Building FOV details with viewport ${viewportWidth}x${viewportHeight}, diagonal FOV ${viewportDiagonalFOV} degrees, lens distance ratio ${lensDistanceRatio}, default display distance ${defaultDisplayDistance}, wrapping choice ${wrappingChoice}, distance adjusted size ${distanceAdjustedSize}`); const aspect = viewportWidth / viewportHeight; const fovLengths = diagonalToCrossFOVs(degreeToRadian(viewportDiagonalFOV), aspect); diff --git a/kwin/src/qml/main.qml b/kwin/src/qml/main.qml index a03135d..4e912ca 100644 --- a/kwin/src/qml/main.qml +++ b/kwin/src/qml/main.qml @@ -34,6 +34,7 @@ Item { property var screens: KWinComponents.Workspace.screens.filter(function(screen) { return developerMode || mirrorPhysicalDisplays || screen.name.includes("BreezyDesktop") || supportedModels.some(model => screen.model.includes(model)); }) + property real distanceAdjustedSize: (effect.allDisplaysDistance - effect.lensDistanceRatio) * effect.displaySize property var sizeAdjustedScreens: screens.map(function(screen) { const sizeComplement = (1.0 - distanceAdjustedSize) / 2.0; const sizeViewportOffsetX = sizeComplement * viewportResolution[0]; @@ -49,7 +50,6 @@ Item { model: screen.model }; }) - property real distanceAdjustedSize: (effect.allDisplaysDistance - effect.lensDistanceRatio) *effect.displaySize property var sizeAdjustedViewport: { return { width: viewportResolution[0] * distanceAdjustedSize,