Add monitor sorting to prevent odd gaps between monitors
This commit is contained in:
parent
b6f903d05d
commit
f980d0bf2b
|
|
@ -542,7 +542,6 @@ export const VirtualDisplaysActor = GObject.registerClass({
|
||||||
notifyToFunction('show-banner', this._handle_banner_update);
|
notifyToFunction('show-banner', this._handle_banner_update);
|
||||||
notifyToFunction('custom-banner-enabled', this._handle_banner_update);
|
notifyToFunction('custom-banner-enabled', this._handle_banner_update);
|
||||||
notifyToFunction('framerate-cap', this._handle_frame_rate_cap_change);
|
notifyToFunction('framerate-cap', this._handle_frame_rate_cap_change);
|
||||||
this._update_monitor_placements();
|
|
||||||
this._handle_display_distance_properties_change();
|
this._handle_display_distance_properties_change();
|
||||||
this._handle_frame_rate_cap_change();
|
this._handle_frame_rate_cap_change();
|
||||||
|
|
||||||
|
|
@ -659,7 +658,7 @@ export const VirtualDisplaysActor = GObject.registerClass({
|
||||||
this.focused_monitor_index,
|
this.focused_monitor_index,
|
||||||
this.display_distance / this._display_distance_default(),
|
this.display_distance / this._display_distance_default(),
|
||||||
this._fov_details(),
|
this._fov_details(),
|
||||||
this._all_monitors
|
this._sorted_monitors
|
||||||
);
|
);
|
||||||
|
|
||||||
if (this.focused_monitor_index !== focusedMonitorIndex) {
|
if (this.focused_monitor_index !== focusedMonitorIndex) {
|
||||||
|
|
@ -712,6 +711,28 @@ export const VirtualDisplaysActor = GObject.registerClass({
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_horizontal_monitor_sort() {
|
||||||
|
return [...this._all_monitors].sort((a, b) => {
|
||||||
|
// First compare by y-coordinate to form rows (top to bottom)
|
||||||
|
if (a.y !== b.y) {
|
||||||
|
return a.y - b.y;
|
||||||
|
}
|
||||||
|
// Then compare by x-coordinate within the same row (left to right)
|
||||||
|
return a.x - b.x;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
_vertical_monitor_sort() {
|
||||||
|
return [...this._all_monitors].sort((a, b) => {
|
||||||
|
// First compare by x-coordinate to form columns (left to right)
|
||||||
|
if (a.x !== b.x) {
|
||||||
|
return a.x - b.x;
|
||||||
|
}
|
||||||
|
// Then compare by y-coordinate within the same column (top to bottom)
|
||||||
|
return a.y - b.y;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
_update_monitor_placements() {
|
_update_monitor_placements() {
|
||||||
// collect minimum and maximum x and y values of monitors
|
// collect minimum and maximum x and y values of monitors
|
||||||
let actualWrapScheme = this.monitor_wrapping_scheme;
|
let actualWrapScheme = this.monitor_wrapping_scheme;
|
||||||
|
|
@ -728,6 +749,11 @@ export const VirtualDisplaysActor = GObject.registerClass({
|
||||||
actualWrapScheme = 'vertical';
|
actualWrapScheme = 'vertical';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// use horizontal in all cases but vertical wrapping
|
||||||
|
this._sorted_monitors = actualWrapScheme === 'vertical' ?
|
||||||
|
this._vertical_monitor_sort() :
|
||||||
|
this._horizontal_monitor_sort();
|
||||||
|
|
||||||
const fovDetails = this._fov_details();
|
const fovDetails = this._fov_details();
|
||||||
this.lens_vector = [0.0, 0.0, -fovDetails.lensDistance];
|
this.lens_vector = [0.0, 0.0, -fovDetails.lensDistance];
|
||||||
|
|
@ -735,7 +761,7 @@ export const VirtualDisplaysActor = GObject.registerClass({
|
||||||
fovDetails,
|
fovDetails,
|
||||||
|
|
||||||
// shift all monitors so they center around the target monitor, then adjusted by the offsets
|
// shift all monitors so they center around the target monitor, then adjusted by the offsets
|
||||||
this._all_monitors.map(monitor => ({
|
this._sorted_monitors.map(monitor => ({
|
||||||
x: monitor.x - this.target_monitor.x - this.viewport_offset_x * this.target_monitor.width,
|
x: monitor.x - this.target_monitor.x - this.viewport_offset_x * this.target_monitor.width,
|
||||||
y: monitor.y - this.target_monitor.y + this.viewport_offset_y * this.target_monitor.height,
|
y: monitor.y - this.target_monitor.y + this.viewport_offset_y * this.target_monitor.height,
|
||||||
width: monitor.width,
|
width: monitor.width,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue