Use the shared buildFovDetails function
This commit is contained in:
parent
851d972da5
commit
00ec9ed593
|
|
@ -1 +1 @@
|
||||||
Subproject commit 6cc1d97ece687b2d71dfdb51c94eaf11c82c7fe5
|
Subproject commit 65376ad92e0cecfc0bf77ced15ed0d32e33c6f82
|
||||||
|
|
@ -7,8 +7,8 @@ import Shell from 'gi://Shell';
|
||||||
import St from 'gi://St';
|
import St from 'gi://St';
|
||||||
|
|
||||||
import { VirtualDisplayEffect, SMOOTH_FOLLOW_SLERP_TIMELINE_MS } from './virtualdisplayeffect.js';
|
import { VirtualDisplayEffect, SMOOTH_FOLLOW_SLERP_TIMELINE_MS } from './virtualdisplayeffect.js';
|
||||||
import { degreeToRadian, diagonalToCrossFOVs, fovConversionFns } from './shared/math.js';
|
import { degreeToRadian } from './shared/math.js';
|
||||||
import { findFocusedMonitor, monitorsToPlacements } from './shared/displayPlacement.js';
|
import { buildFovDetails, findFocusedMonitor, monitorsToPlacements } from './shared/displayPlacement.js';
|
||||||
|
|
||||||
import * as Main from 'resource:///org/gnome/shell/ui/main.js';
|
import * as Main from 'resource:///org/gnome/shell/ui/main.js';
|
||||||
|
|
||||||
|
|
@ -487,54 +487,19 @@ export const VirtualDisplaysActor = GObject.registerClass({
|
||||||
}
|
}
|
||||||
|
|
||||||
_fov_details() {
|
_fov_details() {
|
||||||
const aspect = this.target_monitor.width / this.target_monitor.height;
|
|
||||||
const fovLengths = diagonalToCrossFOVs(degreeToRadian(Globals.data_stream.device_data.displayFov), aspect);
|
|
||||||
const monitorWrappingScheme = this._actual_wrap_scheme();
|
const monitorWrappingScheme = this._actual_wrap_scheme();
|
||||||
const defaultDistance = this._display_distance_default();
|
const defaultDistance = this._display_distance_default();
|
||||||
const lensDistanceComplement = 1.0 - Globals.data_stream.device_data.lensDistanceRatio;
|
const fovDetails = buildFovDetails(
|
||||||
const lensDistanceFactor = (1.0 / lensDistanceComplement) - 1.0;
|
this.target_monitor.width, this.target_monitor.height,
|
||||||
const horizontalConversions = this.curved_display && monitorWrappingScheme === 'horizontal' ? fovConversionFns.curved : fovConversionFns.flat;
|
degreeToRadian(Globals.data_stream.device_data.displayFov),
|
||||||
const verticalConversions = this.curved_display && monitorWrappingScheme === 'vertical' ? fovConversionFns.curved : fovConversionFns.flat;
|
Globals.data_stream.device_data.lensDistanceRatio,
|
||||||
|
defaultDistance,
|
||||||
// adjust FOV to a new focal point distance while keeping screens the same size
|
monitorWrappingScheme, this.curved_display
|
||||||
// i.e. focus from pivot point to new screen distance, adjusted from lens at unit distance
|
|
||||||
const defaultDistanceVerticalRadians = verticalConversions.fovRadiansAtDistance(
|
|
||||||
fovLengths.verticalRadians,
|
|
||||||
fovLengths.heightUnitDistance,
|
|
||||||
defaultDistance
|
|
||||||
);
|
);
|
||||||
const defaultDistanceHorizontalRadians = horizontalConversions.fovRadiansAtDistance(
|
fovDetails.distanceAdjustedSize = this._distance_adjusted_size;
|
||||||
fovLengths.horizontalRadians,
|
fovDetails.sizeAdjustedWidthPixels = this.target_monitor.width * this._distance_adjusted_size;
|
||||||
fovLengths.widthUnitDistance,
|
fovDetails.sizeAdjustedHeightPixels = this.target_monitor.height * this._distance_adjusted_size;
|
||||||
defaultDistance
|
return fovDetails;
|
||||||
);
|
|
||||||
|
|
||||||
// distance needed for the FOV-sized monitor to fill up the screen, as measured from the lenses
|
|
||||||
const lensToUnitDistancePixels = this.target_monitor.width / fovLengths.widthUnitDistance;
|
|
||||||
|
|
||||||
// distance from pivot point to lens
|
|
||||||
const lensDistancePixels = lensToUnitDistancePixels * lensDistanceFactor;
|
|
||||||
|
|
||||||
// distance from pivot point to full screen (monitor at unit distance from lens)
|
|
||||||
const fullScreenDistancePixels = lensToUnitDistancePixels + lensDistancePixels;
|
|
||||||
|
|
||||||
// distance of a display at the default (most zoomed out) distance from the pivot point
|
|
||||||
const completeScreenDistancePixels = fullScreenDistancePixels * defaultDistance;
|
|
||||||
|
|
||||||
return {
|
|
||||||
widthPixels: this.target_monitor.width,
|
|
||||||
distanceAdjustedSize: this._distance_adjusted_size,
|
|
||||||
sizeAdjustedWidthPixels: this.target_monitor.width * this._distance_adjusted_size,
|
|
||||||
heightPixels: this.target_monitor.height,
|
|
||||||
sizeAdjustedHeightPixels: this.target_monitor.height * this._distance_adjusted_size,
|
|
||||||
defaultDistanceVerticalRadians,
|
|
||||||
defaultDistanceHorizontalRadians,
|
|
||||||
lensDistancePixels,
|
|
||||||
fullScreenDistancePixels,
|
|
||||||
completeScreenDistancePixels,
|
|
||||||
monitorWrappingScheme,
|
|
||||||
curvedDisplay: this.curved_display
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_actual_wrap_scheme() {
|
_actual_wrap_scheme() {
|
||||||
|
|
|
||||||
|
|
@ -55,49 +55,22 @@ QtObject {
|
||||||
}
|
}
|
||||||
|
|
||||||
function buildFovDetails(screens, viewportWidth, viewportHeight, viewportDiagonalFOV, lensDistanceRatio, defaultDisplayDistance, wrappingChoice, distanceAdjustedSize) {
|
function buildFovDetails(screens, viewportWidth, viewportHeight, viewportDiagonalFOV, lensDistanceRatio, defaultDisplayDistance, wrappingChoice, distanceAdjustedSize) {
|
||||||
const aspect = viewportWidth / viewportHeight;
|
|
||||||
const fovLengths = SharedMath.diagonalToCrossFOVs(SharedMath.degreeToRadian(viewportDiagonalFOV), aspect);
|
|
||||||
|
|
||||||
let monitorWrappingScheme = actualWrapScheme(screens, viewportWidth, viewportHeight);
|
let monitorWrappingScheme = actualWrapScheme(screens, viewportWidth, viewportHeight);
|
||||||
if (wrappingChoice === 1) monitorWrappingScheme = 'horizontal';
|
if (wrappingChoice === 1) monitorWrappingScheme = 'horizontal';
|
||||||
else if (wrappingChoice === 2) monitorWrappingScheme = 'vertical';
|
else if (wrappingChoice === 2) monitorWrappingScheme = 'vertical';
|
||||||
else if (wrappingChoice === 3) monitorWrappingScheme = 'flat';
|
else if (wrappingChoice === 3) monitorWrappingScheme = 'flat';
|
||||||
|
|
||||||
const lensDistanceComplement = 1.0 - lensDistanceRatio;
|
const fovDetails = SharedPlacement.buildFovDetails(
|
||||||
const lensDistanceFactor = (1.0 / lensDistanceComplement) - 1.0;
|
viewportWidth, viewportHeight,
|
||||||
const horizontalConversions = effect.curvedDisplay && monitorWrappingScheme === 'horizontal' ? SharedMath.fovConversionFns.curved : SharedMath.fovConversionFns.flat;
|
SharedMath.degreeToRadian(viewportDiagonalFOV),
|
||||||
const verticalConversions = effect.curvedDisplay && monitorWrappingScheme === 'vertical' ? SharedMath.fovConversionFns.curved : SharedMath.fovConversionFns.flat;
|
lensDistanceRatio, defaultDisplayDistance,
|
||||||
|
monitorWrappingScheme, effect.curvedDisplay
|
||||||
const defaultDistanceVerticalRadians = verticalConversions.fovRadiansAtDistance(
|
|
||||||
fovLengths.verticalRadians,
|
|
||||||
fovLengths.heightUnitDistance,
|
|
||||||
defaultDisplayDistance
|
|
||||||
);
|
|
||||||
const defaultDistanceHorizontalRadians = horizontalConversions.fovRadiansAtDistance(
|
|
||||||
fovLengths.horizontalRadians,
|
|
||||||
fovLengths.widthUnitDistance,
|
|
||||||
defaultDisplayDistance
|
|
||||||
);
|
);
|
||||||
|
|
||||||
const lensToUnitDistancePixels = viewportWidth / fovLengths.widthUnitDistance;
|
fovDetails.distanceAdjustedSize = distanceAdjustedSize;
|
||||||
const lensDistancePixels = lensToUnitDistancePixels * lensDistanceFactor;
|
fovDetails.sizeAdjustedWidthPixels = viewportWidth * distanceAdjustedSize;
|
||||||
const fullScreenDistancePixels = lensToUnitDistancePixels + lensDistancePixels;
|
fovDetails.sizeAdjustedHeightPixels = viewportHeight * distanceAdjustedSize;
|
||||||
const completeScreenDistancePixels = fullScreenDistancePixels * defaultDisplayDistance;
|
return fovDetails;
|
||||||
|
|
||||||
return {
|
|
||||||
widthPixels: viewportWidth,
|
|
||||||
distanceAdjustedSize,
|
|
||||||
sizeAdjustedWidthPixels: viewportWidth * distanceAdjustedSize,
|
|
||||||
heightPixels: viewportHeight,
|
|
||||||
sizeAdjustedHeightPixels: viewportHeight * distanceAdjustedSize,
|
|
||||||
defaultDistanceVerticalRadians,
|
|
||||||
defaultDistanceHorizontalRadians,
|
|
||||||
lensDistancePixels,
|
|
||||||
fullScreenDistancePixels,
|
|
||||||
completeScreenDistancePixels,
|
|
||||||
monitorWrappingScheme,
|
|
||||||
curvedDisplay: effect.curvedDisplay
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Wraps SharedPlacement.monitorsToPlacements, converting plain-array vectors to Qt.vector3d.
|
// Wraps SharedPlacement.monitorsToPlacements, converting plain-array vectors to Qt.vector3d.
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
Subproject commit 6cc1d97ece687b2d71dfdb51c94eaf11c82c7fe5
|
Subproject commit 65376ad92e0cecfc0bf77ced15ed0d32e33c6f82
|
||||||
Loading…
Reference in New Issue