Add automatic wrap scheme detection

This commit is contained in:
wheaney 2025-07-29 22:22:11 -07:00
parent 5bfba85557
commit c266e3cbd3
2 changed files with 16 additions and 3 deletions

View File

@ -56,7 +56,7 @@ Node {
}
property var monitorPlacements: {
const fovDetails = displays.fovDetails(viewportResolution[0], viewportResolution[1], viewportDiagonalFOVDegrees, effect.lensDistanceRatio);
const fovDetails = displays.fovDetails(screens, viewportResolution[0], viewportResolution[1], viewportDiagonalFOVDegrees, effect.lensDistanceRatio);
const monitorSpacing = 0.0;
return displays.monitorsToPlacements(fovDetails, screens.map(screen => screen.geometry), monitorSpacing);
}

View File

@ -26,7 +26,20 @@ QtObject {
return 1.0;
}
function fovDetails(viewportWidth, viewportHeight, viewportDiagonalFOV, lensDistanceRatio) {
function actualWrapScheme(screens, viewportWidth, viewportHeight) {
const minX = Math.min(...screens.map(screen => screen.geometry.x));
const maxX = Math.max(...screens.map(screen => screen.geometry.x + screen.geometry.width));
const minY = Math.min(...screens.map(screen => screen.geometry.y));
const maxY = Math.max(...screens.map(screen => screen.geometry.y + screen.geometry.height));
if ((maxX - minX) / viewportWidth >= (maxY - minY) / viewportHeight) {
return 'horizontal';
} else {
return 'vertical';
}
}
function fovDetails(screens, viewportWidth, viewportHeight, viewportDiagonalFOV, lensDistanceRatio) {
const aspect = viewportWidth / viewportHeight;
const fovRadians = diagonalToCrossFOVs(degreeToRadian(viewportDiagonalFOV), aspect);
const defaultDistanceVerticalRadians = 2 * Math.atan(Math.tan(fovRadians.vertical / 2) / displayDistanceDefault());
@ -47,7 +60,7 @@ QtObject {
defaultDistanceHorizontalRadians,
lensDistancePixels,
completeScreenDistancePixels,
monitorWrappingScheme: 'horizontal', // or 'vertical' or 'none'
monitorWrappingScheme: actualWrapScheme(screens, viewportWidth, viewportHeight),
curvedDisplay: false // or true
};
}