diff --git a/VERSION b/VERSION index 10bf840..703cec9 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.0.1 \ No newline at end of file +2.0.6 \ No newline at end of file diff --git a/gnome-44-max.patch b/gnome-44-max.patch index 7df90d0..0ca0ab1 100644 --- a/gnome-44-max.patch +++ b/gnome-44-max.patch @@ -101,7 +101,7 @@ index aae3706..d2e96c0 100644 'breezy-desktop-running': GObject.ParamSpec.boolean( 'breezy-desktop-running', diff --git a/gnome-44-max/src/extension.js b/gnome-44-max/src/extension.js -index ea30261..814f170 100644 +index fcf860f..1f12ec1 100644 --- a/gnome-44-max/src/extension.js +++ b/gnome-44-max/src/extension.js @@ -1,28 +1,32 @@ @@ -431,7 +431,7 @@ index 7fb013b..bb12660 100644 'monitor-index': GObject.ParamSpec.int( 'monitor-index', diff --git a/gnome-44-max/src/virtualdisplaysactor.js b/gnome-44-max/src/virtualdisplaysactor.js -index cab3c47..f69eef6 100644 +index a4b6a83..a3a4550 100644 --- a/gnome-44-max/src/virtualdisplaysactor.js +++ b/gnome-44-max/src/virtualdisplaysactor.js @@ -1,18 +1,19 @@ @@ -475,33 +475,3 @@ index cab3c47..f69eef6 100644 Properties: { 'target-monitor': GObject.ParamSpec.jsobject( 'target-monitor', -@@ -538,26 +539,19 @@ export const VirtualDisplaysActor = GObject.registerClass({ - this._all_monitors = [ - this.target_monitor, - ...this.virtual_monitors -- ] -- -- const bannerTextureClippingRect = new Mtk.Rectangle({ -- x: 0, -- y: 0, -- width: 800, -- height: 200 -- }); -+ ]; - - const calibratingBanner = GdkPixbuf.Pixbuf.new_from_file(`${Globals.extension_dir}/textures/calibrating.png`); - const calibratingImage = new Clutter.Image(); - calibratingImage.set_data(calibratingBanner.get_pixels(), Cogl.PixelFormat.RGB_888, - calibratingBanner.width, calibratingBanner.height, calibratingBanner.rowstride); -- this.bannerContent = Clutter.TextureContent.new_from_texture(calibratingImage.get_texture(), bannerTextureClippingRect); -+ this.bannerContent = Clutter.TextureContent.new_from_texture(calibratingImage.get_texture(), null); - - const customBanner = GdkPixbuf.Pixbuf.new_from_file(`${Globals.extension_dir}/textures/custom_banner.png`); - const customBannerImage = new Clutter.Image(); - customBannerImage.set_data(customBanner.get_pixels(), Cogl.PixelFormat.RGB_888, - customBanner.width, customBanner.height, customBanner.rowstride); -- this.customBannerContent = Clutter.TextureContent.new_from_texture(customBannerImage.get_texture(), bannerTextureClippingRect); -+ this.customBannerContent = Clutter.TextureContent.new_from_texture(customBannerImage.get_texture(), null); - - this.bannerActor = new Clutter.Actor({ - width: calibratingBanner.width, diff --git a/gnome/src/devicedatastream.js b/gnome/src/devicedatastream.js index d2e96c0..f047067 100644 --- a/gnome/src/devicedatastream.js +++ b/gnome/src/devicedatastream.js @@ -121,6 +121,13 @@ var DeviceDataStream = GObject.registerClass({ GObject.ParamFlags.READWRITE, false ), + 'legacy-follow-mode': GObject.ParamSpec.boolean( + 'legacy-follow-mode', + 'Legacy follow mode', + 'Whether the legacy follow mode is enabled', + GObject.ParamFlags.READWRITE, + false + ), 'debug-no-device': GObject.ParamSpec.boolean( 'debug-no-device', 'Debug without device', @@ -164,6 +171,12 @@ var DeviceDataStream = GObject.registerClass({ } } + _ipc_file_exists() { + if (!this._ipc_file_exists_cached) this._ipc_file_exists_cached = this._ipc_file.query_exists(null); + + return this._ipc_file_exists_cached; + } + // Refresh the data from the IPC file. if keepalive_only is true, we'll only check and update breezy_desktop_running if it // hasn't been checked within KEEPALIVE_REFRESH_INTERVAL_SEC. refresh_data(keepalive_only = false) { @@ -177,13 +190,20 @@ var DeviceDataStream = GObject.registerClass({ } } - if (this._ipc_file.query_exists(null) && ( + if (this._ipc_file_exists() && ( !this.device_data?.imuData || !keepalive_only || getEpochSec() - toSec(this.device_data?.imuDateMs ?? 0) > KEEPALIVE_REFRESH_INTERVAL_SEC )) { - let data = this._ipc_file.load_contents(null); - if (data[0]) { + let data; + let data_success = false; + try { + data = this._ipc_file.load_contents(null); + data_success = data[0]; + } catch (e) { + Globals.logger.log_debug(`Error loading contents from IPC file: ${e.message}\n${e.stack}`); + } + if (data_success) { let buffer = new Uint8Array(data[1]).buffer; let dataView = new DataView(buffer); if (dataView.byteLength === DATA_VIEW_LENGTH) { @@ -194,7 +214,7 @@ var DeviceDataStream = GObject.registerClass({ const version = dataViewUint8(dataView, VERSION); const enabled = dataViewUint8(dataView, ENABLED) !== 0 && version === DATA_LAYOUT_VERSION && validData; let imuData = dataViewFloatArray(dataView, IMU_QUAT_DATA); - let smoothFollowEnabled = dataViewUint8(dataView, SMOOTH_FOLLOW_ENABLED) !== 0; + let smoothFollowEnabled = !this.legacy_follow_mode && dataViewUint8(dataView, SMOOTH_FOLLOW_ENABLED) !== 0; let smoothFollowOrigin = dataViewFloatArray(dataView, SMOOTH_FOLLOW_ORIGIN_DATA); const imuResetState = enabled && validData && imuData[0] === 0.0 && imuData[1] === 0.0 && imuData[2] === 0.0 && imuData[3] === 1.0; const customBannerEnabled = dataViewUint8(dataView, CUSTOM_BANNER_ENABLED) !== 0; @@ -271,6 +291,7 @@ var DeviceDataStream = GObject.registerClass({ this.breezy_desktop_actually_running = false; } } else { + this._ipc_file_exists_cached = false; this.breezy_desktop_actually_running = false; } } diff --git a/gnome/src/extension.js b/gnome/src/extension.js index 1f12ec1..8b0a8bb 100644 --- a/gnome/src/extension.js +++ b/gnome/src/extension.js @@ -80,6 +80,7 @@ class BreezyDesktopExtension { this.settings.bind('use-optimal-monitor-config',this._monitor_manager, 'use-optimal-monitor-config', Gio.SettingsBindFlags.DEFAULT); this.settings.bind('headset-as-primary', this._monitor_manager, 'headset-as-primary', Gio.SettingsBindFlags.DEFAULT); this.settings.bind('disable-physical-displays', this._monitor_manager, 'disable-physical-displays', Gio.SettingsBindFlags.DEFAULT); + this.settings.bind('legacy-follow-mode', Globals.data_stream, 'legacy-follow-mode', Gio.SettingsBindFlags.DEFAULT); this.settings.bind('debug-no-device', Globals.data_stream, 'debug-no-device', Gio.SettingsBindFlags.DEFAULT); this._breezy_desktop_running_connection = Globals.data_stream.connect('notify::breezy-desktop-running', @@ -233,6 +234,7 @@ class BreezyDesktopExtension { virtual_monitors: virtualMonitors, monitor_wrapping_scheme: this.settings.get_string('monitor-wrapping-scheme'), monitor_spacing: this.settings.get_int('monitor-spacing'), + headset_display_as_viewport_center: this.settings.get_boolean('headset-display-as-viewport-center'), viewport_offset_x: this.settings.get_double('viewport-offset-x'), viewport_offset_y: this.settings.get_double('viewport-offset-y'), display_distance: this.settings.get_double('display-distance'), @@ -276,6 +278,7 @@ class BreezyDesktopExtension { this._effect_settings_bindings = [ 'monitor-wrapping-scheme', + 'headset-display-as-viewport-center', 'viewport-offset-x', 'viewport-offset-y', 'monitor-spacing', @@ -586,11 +589,23 @@ class BreezyDesktopExtension { Globals.logger.log('Disabling SBS mode due to disabling effect'); this._write_control('sbs_mode', 'disable'); } + + if (!for_setup && this.settings.get_boolean('remove-virtual-displays-on-disable')) { + this._remove_virtual_displays(); + } } catch (e) { Globals.logger.log(`[ERROR] BreezyDesktopExtension _effect_disable ${e.message}\n${e.stack}`); } } + _remove_virtual_displays() { + try { + GLib.spawn_command_line_sync(`pkill -f "/virtualdisplay( |$)"`); + } catch (e) { + Globals.logger.log(`[ERROR] BreezyDesktopExtension _remove_virtual_displays ${e.message}\n${e.stack}`); + } + } + disable() { try { Globals.logger.log_debug('BreezyDesktopExtension disable'); diff --git a/gnome/src/virtualdisplayeffect.js b/gnome/src/virtualdisplayeffect.js index bb12660..4ab6942 100644 --- a/gnome/src/virtualdisplayeffect.js +++ b/gnome/src/virtualdisplayeffect.js @@ -471,7 +471,7 @@ var VirtualDisplayEffect = GObject.registerClass({ cogl_tex_coord_out[0] = cogl_tex_coord_in; ` - this.add_glsl_snippet(Shell.SnippetHook.VERTEX, declarations, main, false); + this.add_glsl_snippet(Cogl.SnippetHook?.VERTEX ?? Shell.SnippetHook.VERTEX, declarations, main, false); } vfunc_paint_target(node, paintContext) { diff --git a/gnome/src/virtualdisplaysactor.js b/gnome/src/virtualdisplaysactor.js index a3a4550..2662cb6 100644 --- a/gnome/src/virtualdisplaysactor.js +++ b/gnome/src/virtualdisplaysactor.js @@ -182,6 +182,7 @@ function monitorWrap(cachedMonitorRadians, radiusPixels, monitorSpacingPixels, m * and distance to the center of the screen * @param {Object[]} monitorDetailsList - contains x, y, width, height (coordinates from top-left) * @param {string} monitorWrappingScheme - horizontal, vertical, none + * @param {number} monitorSpacing - visual spacing between monitors, as a percentage of the viewport width * @returns {Object[]} - contains NWU vectors pointing to `topLeftNoRotate` and `center` of each monitor * and a `rotation` angle for the given wrapping scheme */ @@ -199,7 +200,7 @@ function monitorsToPlacements(fovDetails, monitorDetailsList, monitorWrappingSch const monitorSpacingPixels = monitorSpacing * fovDetails.widthPixels; cachedMonitorRadians[0] = -fovDetails.defaultDistanceHorizontalRadians / 2; - monitorDetailsList.forEach(monitorDetails => { + horizontalMonitorSort(monitorDetailsList).forEach(({monitorDetails, originalIndex}) => { const monitorWrapDetails = monitorWrap(cachedMonitorRadians, sideEdgeRadius, monitorSpacingPixels, monitorDetails.x, monitorDetails.width); const monitorCenterRadius = Math.sqrt(Math.pow(sideEdgeRadius, 2) - Math.pow(monitorDetails.width / 2, 2)); const upTopPixels = monitorDetails.y + (monitorDetails.y / fovDetails.heightPixels) * monitorSpacingPixels; @@ -211,6 +212,7 @@ function monitorsToPlacements(fovDetails, monitorDetailsList, monitorWrappingSch const upCenterPixels = upTopPixels + upCenterOriginPixels; monitorPlacements.push({ + originalIndex, topLeftNoRotate: [ monitorCenterRadius, @@ -258,7 +260,7 @@ function monitorsToPlacements(fovDetails, monitorDetailsList, monitorWrappingSch const monitorSpacingPixels = monitorSpacing * fovDetails.heightPixels; cachedMonitorRadians[0] = -fovDetails.defaultDistanceVerticalRadians / 2; - monitorDetailsList.forEach(monitorDetails => { + verticalMonitorSort(monitorDetailsList).forEach(({monitorDetails, originalIndex}) => { const monitorWrapDetails = monitorWrap(cachedMonitorRadians, topEdgeRadius, monitorSpacingPixels, monitorDetails.y, monitorDetails.height); const monitorCenterRadius = Math.sqrt(Math.pow(topEdgeRadius, 2) - Math.pow(monitorDetails.height / 2, 2)); const westPixels = monitorDetails.x + (monitorDetails.x / fovDetails.widthPixels) * monitorSpacingPixels; @@ -270,6 +272,7 @@ function monitorsToPlacements(fovDetails, monitorDetailsList, monitorWrappingSch const westCenterPixels = westPixels + westCenterOriginPixels; monitorPlacements.push({ + originalIndex, topLeftNoRotate: [ monitorCenterRadius, @@ -313,7 +316,7 @@ function monitorsToPlacements(fovDetails, monitorDetailsList, monitorWrappingSch const monitorSpacingPixels = monitorSpacing * fovDetails.widthPixels; // monitors make a flat wall in front of us, no wrapping - monitorDetailsList.forEach(monitorDetails => { + monitorDetailsList.forEach((monitorDetails, index) => { const upPixels = monitorDetails.y + (monitorDetails.y / fovDetails.heightPixels) * monitorSpacingPixels; const westPixels = monitorDetails.x + (monitorDetails.x / fovDetails.widthPixels) * monitorSpacingPixels; @@ -325,6 +328,7 @@ function monitorsToPlacements(fovDetails, monitorDetailsList, monitorWrappingSch const upCenterPixels = upPixels + upCenterOriginPixels; monitorPlacements.push({ + originalIndex: index, topLeftNoRotate: [ fovDetails.completeScreenDistancePixels, westPixels, @@ -353,11 +357,44 @@ function monitorsToPlacements(fovDetails, monitorDetailsList, monitorWrappingSch }); } + // put them back in the original monitor order before returning + monitorPlacements.sort((a, b) => a.originalIndex - b.originalIndex); + Globals.logger.log_debug(`\t\t\tMonitor placements: ${JSON.stringify(monitorPlacements)}, cached values: ${JSON.stringify(cachedMonitorRadians)}`); return monitorPlacements; } +// sort monitors based on wrapping scheme before determining their placements to avoid odd gaps +function horizontalMonitorSort(monitors) { + return monitors.map((monitor, index) => ({originalIndex: index, monitorDetails: monitor})).sort((a, b) => { + const aMon = a.monitorDetails; + const bMon = b.monitorDetails; + + // First compare by y-coordinate to form rows (top to bottom) + if (aMon.y !== bMon.y) { + return aMon.y - bMon.y; + } + // Then compare by x-coordinate within the same row (left to right) + return aMon.x - bMon.x; + }); +} + +// sort monitors based on wrapping scheme before determining their placements to avoid odd gaps +function verticalMonitorSort(monitors) { + return monitors.map((monitor, index) => ({originalIndex: index, monitorDetails: monitor})).sort((a, b) => { + const aMon = a.monitorDetails; + const bMon = b.monitorDetails; + + // First compare by x-coordinate to form columns (left to right) + if (aMon.x !== bMon.x) { + return aMon.x - bMon.x; + } + // Then compare by y-coordinate within the same column (top to bottom) + return aMon.y - bMon.y; + }); +} + var VirtualDisplaysActor = GObject.registerClass({ Properties: { 'target-monitor': GObject.ParamSpec.jsobject( @@ -484,6 +521,13 @@ var VirtualDisplaysActor = GObject.registerClass({ 2.5, 1.05 ), + 'headset-display-as-viewport-center': GObject.ParamSpec.boolean( + 'headset-display-as-viewport-center', + 'Headset display as viewport center', + 'Whether to use the headset display as the reference point for the center of the viewport', + GObject.ParamFlags.READWRITE, + false + ), 'lens-vector': GObject.ParamSpec.jsobject( 'lens-vector', 'Lens Vector', @@ -587,6 +631,7 @@ var VirtualDisplaysActor = GObject.registerClass({ notifyToFunction('display-distance', this._handle_display_distance_properties_change); notifyToFunction('monitor-wrapping-scheme', this._update_monitor_placements); notifyToFunction('monitor-spacing', this._update_monitor_placements); + notifyToFunction('headset-display-as-viewport-center', this._update_monitor_placements); notifyToFunction('viewport-offset-x', this._update_monitor_placements); notifyToFunction('viewport-offset-y', this._update_monitor_placements); notifyToFunction('show-banner', this._handle_banner_update); @@ -611,7 +656,7 @@ var VirtualDisplaysActor = GObject.registerClass({ Globals.logger.log_debug(`\t\t\tActor to display ratios: ${actorToDisplayRatios}, offsets: ${actorToDisplayOffsets}`); - this._sorted_monitors.forEach(((monitor, index) => { + this._all_monitors.forEach(((monitor, index) => { Globals.logger.log_debug(`\t\t\tMonitor ${index}: ${monitor.x}, ${monitor.y}, ${monitor.width}, ${monitor.height}`); const containerActor = new Clutter.Actor({ @@ -721,13 +766,13 @@ var VirtualDisplaysActor = GObject.registerClass({ this.display_distance / this._display_distance_default(), this.smooth_follow_enabled, this._fov_details(), - this._sorted_monitors + this._all_monitors ); if (this.focused_monitor_index !== focusedMonitorIndex) { Globals.logger.log_debug(`Switching to monitor ${focusedMonitorIndex}`); this.focused_monitor_index = focusedMonitorIndex; - this.focused_monitor_details = this._sorted_monitors[focusedMonitorIndex]; + this.focused_monitor_details = this._all_monitors[focusedMonitorIndex]; } } @@ -776,72 +821,55 @@ var 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() { - // collect minimum and maximum x and y values of monitors - let actualWrapScheme = this.monitor_wrapping_scheme; - if (actualWrapScheme === 'automatic') { + try { const minX = Math.min(...this._all_monitors.map(monitor => monitor.x)); - const minY = Math.min(...this._all_monitors.map(monitor => monitor.y)); const maxX = Math.max(...this._all_monitors.map(monitor => monitor.x + monitor.width)); + const minY = Math.min(...this._all_monitors.map(monitor => monitor.y)); const maxY = Math.max(...this._all_monitors.map(monitor => monitor.y + monitor.height)); - // check if there are more monitors in the horizontal or vertical direction, prefer horizontal if equal - if ((maxX - minX) / this.target_monitor.width >= (maxY - minY) / this.target_monitor.height) { - actualWrapScheme = 'horizontal'; - } else { - actualWrapScheme = 'vertical'; + // the beginning edges of the viewport if it's centered on all displays + const allDisplaysCenterXBegin = (minX + maxX) / 2 - this.target_monitor.width / 2; + const allDisplaysCenterYBegin = (minY + maxY) / 2 - this.target_monitor.height / 2; + + const viewportXBegin = this.headset_display_as_viewport_center ? this.target_monitor.x : allDisplaysCenterXBegin; + const viewportYBegin = this.headset_display_as_viewport_center ? this.target_monitor.y : allDisplaysCenterYBegin; + + // collect minimum and maximum x and y values of monitors + let actualWrapScheme = this.monitor_wrapping_scheme; + if (actualWrapScheme === 'automatic') { + // check if there are more monitors in the horizontal or vertical direction, prefer horizontal if equal + if ((maxX - minX) / this.target_monitor.width >= (maxY - minY) / this.target_monitor.height) { + actualWrapScheme = 'horizontal'; + } else { + actualWrapScheme = 'vertical'; + } } + const fovDetails = this._fov_details(); + this.lens_vector = [0.0, 0.0, -fovDetails.lensDistancePixels]; + this.monitor_placements = monitorsToPlacements( + fovDetails, + + // shift all monitors so they center around the viewport center, then adjusted by the offsets + this._all_monitors.map(monitor => ({ + x: monitor.x - viewportXBegin - this.viewport_offset_x * this.target_monitor.width, + y: monitor.y - viewportYBegin + this.viewport_offset_y * this.target_monitor.height, + width: monitor.width, + height: monitor.height + })), + actualWrapScheme, + this.monitor_spacing / 1000.0 + ); + + // normalize the center vectors + this._monitorsAsNormalizedVectors = this.monitor_placements.map(monitorVectors => { + const vector = monitorVectors.centerLook; + const length = Math.sqrt(vector[0] * vector[0] + vector[1] * vector[1] + vector[2] * vector[2]); + return [vector[0] / length, vector[1] / length, vector[2] / length]; + }); + } catch (e) { + Globals.logger.log(`ERROR: virtualdisplaysactor.js _update_monitor_placements ${e.message}\n${e.stack}`); } - - // 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(); - this.lens_vector = [0.0, 0.0, -fovDetails.lensDistancePixels]; - this.monitor_placements = monitorsToPlacements( - fovDetails, - - // shift all monitors so they center around the target monitor, then adjusted by the offsets - this._sorted_monitors.map(monitor => ({ - 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, - width: monitor.width, - height: monitor.height - })), - actualWrapScheme, - this.monitor_spacing / 1000.0 - ); - - // normalize the center vectors - this._monitorsAsNormalizedVectors = this.monitor_placements.map(monitorVectors => { - const vector = monitorVectors.centerLook; - const length = Math.sqrt(vector[0] * vector[0] + vector[1] * vector[1] + vector[2] * vector[2]); - return [vector[0] / length, vector[1] / length, vector[2] / length]; - }); } _handle_display_distance_properties_change() { diff --git a/modules/XRLinuxDriver b/modules/XRLinuxDriver index a66c9ae..1cc7520 160000 --- a/modules/XRLinuxDriver +++ b/modules/XRLinuxDriver @@ -1 +1 @@ -Subproject commit a66c9aee82989ea7e98da5a05fde621ffb47af83 +Subproject commit 1cc7520d725df7f568ac78d9d19eb6f0881f1680 diff --git a/ui/data/com.xronlinux.BreezyDesktop.gschema.xml b/ui/data/com.xronlinux.BreezyDesktop.gschema.xml index 77ebb59..396f8d2 100644 --- a/ui/data/com.xronlinux.BreezyDesktop.gschema.xml +++ b/ui/data/com.xronlinux.BreezyDesktop.gschema.xml @@ -163,6 +163,15 @@ Automatically set the headset as the primary display upon connection + + + false + + Headset display as viewport center + + Use the headset display as the reference point for the center of the viewport + + true @@ -199,6 +208,24 @@ Disable physical displays when XR effect is enabled + + + true + + Remove virtual displays on disable + + Remove virtual displays when XR effect is disabled + + + + + false + + Legacy follow mode + + Enable legacy follow mode + + false diff --git a/ui/modules/PyXRLinuxDriverIPC b/ui/modules/PyXRLinuxDriverIPC index 5ae87f3..cfe4c91 160000 --- a/ui/modules/PyXRLinuxDriverIPC +++ b/ui/modules/PyXRLinuxDriverIPC @@ -1 +1 @@ -Subproject commit 5ae87f35970486f12d3896fb6582a0b2d5ab15b2 +Subproject commit cfe4c918e2d23b56bf77de62d0d469cc4e5a7c2c diff --git a/ui/po/breezydesktop.pot b/ui/po/breezydesktop.pot index 02f1ab7..f978b62 100644 --- a/ui/po/breezydesktop.pot +++ b/ui/po/breezydesktop.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-03-06 15:32-0800\n" +"POT-Creation-Date: 2025-03-07 20:36-0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -27,33 +27,33 @@ msgstr "" msgid "This feature is not currently supported for your device." msgstr "" -#: src/connecteddevice.py:125 +#: src/connecteddevice.py:134 msgid "Set Focused Display Distance" msgstr "" -#: src/connecteddevice.py:126 +#: src/connecteddevice.py:135 msgid "Use a closer value so the display zooms in when you look at it." msgstr "" -#: src/connecteddevice.py:133 +#: src/connecteddevice.py:142 msgid "Set All Displays Distance" msgstr "" -#: src/connecteddevice.py:134 +#: src/connecteddevice.py:143 msgid "Use a farther value so the displays are zoomed out when you look away." msgstr "" -#: src/connecteddevice.py:232 +#: src/connecteddevice.py:248 msgid "" "Unable to add virtual displays on this machine. xdg-desktop-portal is " "required." msgstr "" -#: src/connecteddevice.py:266 +#: src/connecteddevice.py:282 msgid "Focused display" msgstr "" -#: src/connecteddevice.py:272 +#: src/connecteddevice.py:288 msgid "All displays" msgstr "" @@ -308,9 +308,7 @@ msgid "Viewport horizontal offset" msgstr "" #: src/gtk/connected-device.ui:293 -msgid "" -"By default, the viewport will center on the primary display. Use this slider " -"to move the viewport to the left or right." +msgid "Move the viewport to the left or right of its default position." msgstr "" #: src/gtk/connected-device.ui:322 @@ -318,9 +316,7 @@ msgid "Viewport vertical offset" msgstr "" #: src/gtk/connected-device.ui:323 -msgid "" -"By default, the viewport will center on the primary display. Use this slider " -"to move the viewport up or down." +msgid "Move the viewport up or down from its default position." msgstr "" #: src/gtk/connected-device.ui:359 src/gtk/connected-device.ui:365 @@ -366,67 +362,113 @@ msgstr "" msgid "Quickly toggle follow mode." msgstr "" -#: src/gtk/connected-device.ui:491 src/gtk/connected-device.ui:497 +#: src/gtk/connected-device.ui:491 src/gtk/connected-device.ui:501 msgid "Advanced Settings" msgstr "" -#: src/gtk/connected-device.ui:500 +#: src/gtk/connected-device.ui:505 msgid "Find optimal display config" msgstr "" -#: src/gtk/connected-device.ui:501 +#: src/gtk/connected-device.ui:506 msgid "" "Automatically modify the glasses display configuration for maximum " "resolution and best scaling when plugged in." msgstr "" -#: src/gtk/connected-device.ui:511 +#: src/gtk/connected-device.ui:516 msgid "Use highest refresh rate" msgstr "" -#: src/gtk/connected-device.ui:512 +#: src/gtk/connected-device.ui:517 msgid "Refresh rate may affect performance, disable this to set it manually." msgstr "" -#: src/gtk/connected-device.ui:522 +#: src/gtk/connected-device.ui:527 +msgid "Center on glasses' display" +msgstr "" + +#: src/gtk/connected-device.ui:528 +msgid "" +"Center the viewport on the glasses' display, even if the display is not in " +"the middle." +msgstr "" + +#: src/gtk/connected-device.ui:538 msgid "Always primary display" msgstr "" -#: src/gtk/connected-device.ui:523 +#: src/gtk/connected-device.ui:539 msgid "Automatically set the glasses as the primary display when plugged in." msgstr "" -#: src/gtk/connected-device.ui:533 +#: src/gtk/connected-device.ui:549 +msgid "Remove virtual displays on disable" +msgstr "" + +#: src/gtk/connected-device.ui:550 +msgid "Automatically remove virtual displays when the XR effect is disabled." +msgstr "" + +#: src/gtk/connected-device.ui:560 +msgid "Enable multi-tap detection" +msgstr "" + +#: src/gtk/connected-device.ui:561 +msgid "Enables double-tap to recenter and triple-tap to recalibrate." +msgstr "" + +#: src/gtk/connected-device.ui:571 +msgid "All displays follow mode" +msgstr "" + +#: src/gtk/connected-device.ui:572 +msgid "Follow mode moves all displays, not just the focused one." +msgstr "" + +#: src/gtk/connected-device.ui:588 +msgid "Follow mode movement tracking" +msgstr "" + +#: src/gtk/connected-device.ui:589 +msgid "Choose which movements should be tracked in follow mode." +msgstr "" + +#: src/gtk/connected-device.ui:604 +msgid "Horizontal" +msgstr "" + +#: src/gtk/connected-device.ui:624 +msgid "Vertical" +msgstr "" + +#: src/gtk/connected-device.ui:644 +msgid "Tilt/roll" +msgstr "" + +#: src/gtk/connected-device.ui:662 msgid "Movement look-ahead" msgstr "" -#: src/gtk/connected-device.ui:534 +#: src/gtk/connected-device.ui:663 msgid "" "Counteracts input lag by predicting head-tracking position ahead of render " "time. Stick with default unless virtual display drags behind your head " "movements, jumps ahead, or is very shaky." msgstr "" -#: src/gtk/connected-device.ui:552 +#: src/gtk/connected-device.ui:681 msgid "Default" msgstr "" -#: src/gtk/connected-device.ui:564 +#: src/gtk/connected-device.ui:693 msgid "Text Scaling" msgstr "" -#: src/gtk/connected-device.ui:565 +#: src/gtk/connected-device.ui:694 msgid "Scaling text below 1.0 will simulate a higher resolution display" msgstr "" -#: src/gtk/connected-device.ui:595 -msgid "Enable multi-tap detection" -msgstr "" - -#: src/gtk/connected-device.ui:596 -msgid "Enables double-tap to recenter and triple-tap to recalibrate." -msgstr "" - #: src/gtk/display-distance-dialog.ui:9 msgid "Show full range" msgstr "" diff --git a/ui/po/de.po b/ui/po/de.po index 19cd61d..7575eab 100644 --- a/ui/po/de.po +++ b/ui/po/de.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-03-06 15:32-0800\n" +"POT-Creation-Date: 2025-03-07 20:36-0800\n" "PO-Revision-Date: 2024-08-02 20:54-0700\n" "Last-Translator: \n" "Language-Team: German \n" @@ -29,36 +29,36 @@ msgstr "" msgid "This feature is not currently supported for your device." msgstr "Diese Funktion wird von Ihrem Gerät derzeit nicht unterstützt." -#: src/connecteddevice.py:125 +#: src/connecteddevice.py:134 #, fuzzy msgid "Set Focused Display Distance" msgstr "Display-Entfernung" -#: src/connecteddevice.py:126 +#: src/connecteddevice.py:135 msgid "Use a closer value so the display zooms in when you look at it." msgstr "" -#: src/connecteddevice.py:133 +#: src/connecteddevice.py:142 #, fuzzy msgid "Set All Displays Distance" msgstr "Display-Entfernung" -#: src/connecteddevice.py:134 +#: src/connecteddevice.py:143 msgid "Use a farther value so the displays are zoomed out when you look away." msgstr "" -#: src/connecteddevice.py:232 +#: src/connecteddevice.py:248 msgid "" "Unable to add virtual displays on this machine. xdg-desktop-portal is " "required." msgstr "" -#: src/connecteddevice.py:266 +#: src/connecteddevice.py:282 #, fuzzy msgid "Focused display" msgstr "Display-Entfernung" -#: src/connecteddevice.py:272 +#: src/connecteddevice.py:288 #, fuzzy msgid "All displays" msgstr "Gebogenes Display" @@ -320,9 +320,7 @@ msgid "Viewport horizontal offset" msgstr "" #: src/gtk/connected-device.ui:293 -msgid "" -"By default, the viewport will center on the primary display. Use this slider " -"to move the viewport to the left or right." +msgid "Move the viewport to the left or right of its default position." msgstr "" #: src/gtk/connected-device.ui:322 @@ -330,9 +328,7 @@ msgid "Viewport vertical offset" msgstr "" #: src/gtk/connected-device.ui:323 -msgid "" -"By default, the viewport will center on the primary display. Use this slider " -"to move the viewport up or down." +msgid "Move the viewport up or down from its default position." msgstr "" #: src/gtk/connected-device.ui:359 src/gtk/connected-device.ui:365 @@ -383,15 +379,15 @@ msgstr "Folgemodus-Tastenkombination umschalten" msgid "Quickly toggle follow mode." msgstr "Schnell den Folgemodus wechseln." -#: src/gtk/connected-device.ui:491 src/gtk/connected-device.ui:497 +#: src/gtk/connected-device.ui:491 src/gtk/connected-device.ui:501 msgid "Advanced Settings" msgstr "Erweiterte Einstellungen" -#: src/gtk/connected-device.ui:500 +#: src/gtk/connected-device.ui:505 msgid "Find optimal display config" msgstr "Optimale Display-Konfiguration finden" -#: src/gtk/connected-device.ui:501 +#: src/gtk/connected-device.ui:506 msgid "" "Automatically modify the glasses display configuration for maximum " "resolution and best scaling when plugged in." @@ -399,31 +395,87 @@ msgstr "" "Ändern Sie die Display-Konfiguration der Brille automatisch zur maximalen " "Auflösung und besten Skalierung, wenn sie angeschlossen ist." -#: src/gtk/connected-device.ui:511 +#: src/gtk/connected-device.ui:516 msgid "Use highest refresh rate" msgstr "Höchste Bildwiederholrate verwenden" -#: src/gtk/connected-device.ui:512 +#: src/gtk/connected-device.ui:517 msgid "Refresh rate may affect performance, disable this to set it manually." msgstr "" "Die Bildwiederholrate kann die Leistung beeinflussen, deaktivieren Sie dies, " "um sie manuell festzulegen." -#: src/gtk/connected-device.ui:522 +#: src/gtk/connected-device.ui:527 +msgid "Center on glasses' display" +msgstr "" + +#: src/gtk/connected-device.ui:528 +msgid "" +"Center the viewport on the glasses' display, even if the display is not in " +"the middle." +msgstr "" + +#: src/gtk/connected-device.ui:538 msgid "Always primary display" msgstr "Immer primäres Display" -#: src/gtk/connected-device.ui:523 +#: src/gtk/connected-device.ui:539 msgid "Automatically set the glasses as the primary display when plugged in." msgstr "" "Setzen Sie die Brille automatisch als primäres Display, wenn sie " "angeschlossen ist." -#: src/gtk/connected-device.ui:533 +#: src/gtk/connected-device.ui:549 +#, fuzzy +msgid "Remove virtual displays on disable" +msgstr "Gebogenes Display" + +#: src/gtk/connected-device.ui:550 +msgid "Automatically remove virtual displays when the XR effect is disabled." +msgstr "" + +#: src/gtk/connected-device.ui:560 +msgid "Enable multi-tap detection" +msgstr "" + +#: src/gtk/connected-device.ui:561 +msgid "Enables double-tap to recenter and triple-tap to recalibrate." +msgstr "" + +#: src/gtk/connected-device.ui:571 +#, fuzzy +msgid "All displays follow mode" +msgstr "Gebogenes Display" + +#: src/gtk/connected-device.ui:572 +msgid "Follow mode moves all displays, not just the focused one." +msgstr "" + +#: src/gtk/connected-device.ui:588 +msgid "Follow mode movement tracking" +msgstr "" + +#: src/gtk/connected-device.ui:589 +msgid "Choose which movements should be tracked in follow mode." +msgstr "" + +#: src/gtk/connected-device.ui:604 +msgid "Horizontal" +msgstr "" + +#: src/gtk/connected-device.ui:624 +msgid "Vertical" +msgstr "" + +#: src/gtk/connected-device.ui:644 +msgid "Tilt/roll" +msgstr "" + +#: src/gtk/connected-device.ui:662 msgid "Movement look-ahead" msgstr "Bewegungsvorausschau" -#: src/gtk/connected-device.ui:534 +#: src/gtk/connected-device.ui:663 msgid "" "Counteracts input lag by predicting head-tracking position ahead of render " "time. Stick with default unless virtual display drags behind your head " @@ -434,26 +486,18 @@ msgstr "" "es sei denn, das virtuelle Display hängt hinter Ihren Kopfbewegungen " "hinterher, springt vor oder ist sehr wackelig." -#: src/gtk/connected-device.ui:552 +#: src/gtk/connected-device.ui:681 msgid "Default" msgstr "Standard" -#: src/gtk/connected-device.ui:564 +#: src/gtk/connected-device.ui:693 msgid "Text Scaling" msgstr "Textskalierung" -#: src/gtk/connected-device.ui:565 +#: src/gtk/connected-device.ui:694 msgid "Scaling text below 1.0 will simulate a higher resolution display" msgstr "Text unter 1.0 skalieren simuliert ein höher aufgelöstes Display" -#: src/gtk/connected-device.ui:595 -msgid "Enable multi-tap detection" -msgstr "" - -#: src/gtk/connected-device.ui:596 -msgid "Enables double-tap to recenter and triple-tap to recalibrate." -msgstr "" - #: src/gtk/display-distance-dialog.ui:9 msgid "Show full range" msgstr "" diff --git a/ui/po/es.po b/ui/po/es.po index 0056aa5..b987082 100644 --- a/ui/po/es.po +++ b/ui/po/es.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-03-06 15:32-0800\n" +"POT-Creation-Date: 2025-03-07 20:36-0800\n" "PO-Revision-Date: 2024-08-02 20:55-0700\n" "Last-Translator: \n" "Language-Team: Spanish \n" @@ -28,36 +28,36 @@ msgstr "" msgid "This feature is not currently supported for your device." msgstr "Esta función no es compatible con tu dispositivo en este momento." -#: src/connecteddevice.py:125 +#: src/connecteddevice.py:134 #, fuzzy msgid "Set Focused Display Distance" msgstr "Distancia de la pantalla" -#: src/connecteddevice.py:126 +#: src/connecteddevice.py:135 msgid "Use a closer value so the display zooms in when you look at it." msgstr "" -#: src/connecteddevice.py:133 +#: src/connecteddevice.py:142 #, fuzzy msgid "Set All Displays Distance" msgstr "Distancia de la pantalla" -#: src/connecteddevice.py:134 +#: src/connecteddevice.py:143 msgid "Use a farther value so the displays are zoomed out when you look away." msgstr "" -#: src/connecteddevice.py:232 +#: src/connecteddevice.py:248 msgid "" "Unable to add virtual displays on this machine. xdg-desktop-portal is " "required." msgstr "" -#: src/connecteddevice.py:266 +#: src/connecteddevice.py:282 #, fuzzy msgid "Focused display" msgstr "Distancia de la pantalla" -#: src/connecteddevice.py:272 +#: src/connecteddevice.py:288 #, fuzzy msgid "All displays" msgstr "Pantalla curvada" @@ -319,9 +319,7 @@ msgid "Viewport horizontal offset" msgstr "" #: src/gtk/connected-device.ui:293 -msgid "" -"By default, the viewport will center on the primary display. Use this slider " -"to move the viewport to the left or right." +msgid "Move the viewport to the left or right of its default position." msgstr "" #: src/gtk/connected-device.ui:322 @@ -329,9 +327,7 @@ msgid "Viewport vertical offset" msgstr "" #: src/gtk/connected-device.ui:323 -msgid "" -"By default, the viewport will center on the primary display. Use this slider " -"to move the viewport up or down." +msgid "Move the viewport up or down from its default position." msgstr "" #: src/gtk/connected-device.ui:359 src/gtk/connected-device.ui:365 @@ -381,15 +377,15 @@ msgstr "Atajo para alternar el modo de seguimiento" msgid "Quickly toggle follow mode." msgstr "Activar el modo de seguimiento." -#: src/gtk/connected-device.ui:491 src/gtk/connected-device.ui:497 +#: src/gtk/connected-device.ui:491 src/gtk/connected-device.ui:501 msgid "Advanced Settings" msgstr "Configuración Avanzada" -#: src/gtk/connected-device.ui:500 +#: src/gtk/connected-device.ui:505 msgid "Find optimal display config" msgstr "Encuentre la configuración de pantalla óptima" -#: src/gtk/connected-device.ui:501 +#: src/gtk/connected-device.ui:506 msgid "" "Automatically modify the glasses display configuration for maximum " "resolution and best scaling when plugged in." @@ -398,30 +394,86 @@ msgstr "" "obtener la máxima resolución y la mejor escalabilidad cuando estén " "enchufadas." -#: src/gtk/connected-device.ui:511 +#: src/gtk/connected-device.ui:516 msgid "Use highest refresh rate" msgstr "Utilizar la frecuencia de actualización más alta" -#: src/gtk/connected-device.ui:512 +#: src/gtk/connected-device.ui:517 msgid "Refresh rate may affect performance, disable this to set it manually." msgstr "" "La frecuencia de actualización puede afectar el rendimiento, deshabilite " "esto para configurarlo manualmente." -#: src/gtk/connected-device.ui:522 +#: src/gtk/connected-device.ui:527 +msgid "Center on glasses' display" +msgstr "" + +#: src/gtk/connected-device.ui:528 +msgid "" +"Center the viewport on the glasses' display, even if the display is not in " +"the middle." +msgstr "" + +#: src/gtk/connected-device.ui:538 msgid "Always primary display" msgstr "Siempre como pantalla principal" -#: src/gtk/connected-device.ui:523 +#: src/gtk/connected-device.ui:539 msgid "Automatically set the glasses as the primary display when plugged in." msgstr "" "Automáticamente configurar las gafas como pantalla principal al enchufarse." -#: src/gtk/connected-device.ui:533 +#: src/gtk/connected-device.ui:549 +#, fuzzy +msgid "Remove virtual displays on disable" +msgstr "Pantalla curvada" + +#: src/gtk/connected-device.ui:550 +msgid "Automatically remove virtual displays when the XR effect is disabled." +msgstr "" + +#: src/gtk/connected-device.ui:560 +msgid "Enable multi-tap detection" +msgstr "" + +#: src/gtk/connected-device.ui:561 +msgid "Enables double-tap to recenter and triple-tap to recalibrate." +msgstr "" + +#: src/gtk/connected-device.ui:571 +#, fuzzy +msgid "All displays follow mode" +msgstr "Pantalla curvada" + +#: src/gtk/connected-device.ui:572 +msgid "Follow mode moves all displays, not just the focused one." +msgstr "" + +#: src/gtk/connected-device.ui:588 +msgid "Follow mode movement tracking" +msgstr "" + +#: src/gtk/connected-device.ui:589 +msgid "Choose which movements should be tracked in follow mode." +msgstr "" + +#: src/gtk/connected-device.ui:604 +msgid "Horizontal" +msgstr "" + +#: src/gtk/connected-device.ui:624 +msgid "Vertical" +msgstr "" + +#: src/gtk/connected-device.ui:644 +msgid "Tilt/roll" +msgstr "" + +#: src/gtk/connected-device.ui:662 msgid "Movement look-ahead" msgstr "Anticipación de movimiento" -#: src/gtk/connected-device.ui:534 +#: src/gtk/connected-device.ui:663 msgid "" "Counteracts input lag by predicting head-tracking position ahead of render " "time. Stick with default unless virtual display drags behind your head " @@ -432,28 +484,20 @@ msgstr "" "predeterminado a menos que la pantalla virtual se retrase detrás de los " "movimientos de la cabeza, se adelante o sea muy inestable." -#: src/gtk/connected-device.ui:552 +#: src/gtk/connected-device.ui:681 msgid "Default" msgstr "Predeterminado" -#: src/gtk/connected-device.ui:564 +#: src/gtk/connected-device.ui:693 msgid "Text Scaling" msgstr "Escalado de Texto" -#: src/gtk/connected-device.ui:565 +#: src/gtk/connected-device.ui:694 msgid "Scaling text below 1.0 will simulate a higher resolution display" msgstr "" "Escalando el texto por debajo de 1.0 simulará una pantalla de mayor " "resolución" -#: src/gtk/connected-device.ui:595 -msgid "Enable multi-tap detection" -msgstr "" - -#: src/gtk/connected-device.ui:596 -msgid "Enables double-tap to recenter and triple-tap to recalibrate." -msgstr "" - #: src/gtk/display-distance-dialog.ui:9 msgid "Show full range" msgstr "" diff --git a/ui/po/fr.po b/ui/po/fr.po index 65d00cc..5838c06 100644 --- a/ui/po/fr.po +++ b/ui/po/fr.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-03-06 15:32-0800\n" +"POT-Creation-Date: 2025-03-07 20:36-0800\n" "PO-Revision-Date: 2024-08-02 20:54-0700\n" "Last-Translator: \n" "Language-Team: French \n" @@ -31,36 +31,36 @@ msgstr "" "Cette fonctionnalité n'est actuellement pas prise en charge par votre " "appareil." -#: src/connecteddevice.py:125 +#: src/connecteddevice.py:134 #, fuzzy msgid "Set Focused Display Distance" msgstr "Distance d'affichage" -#: src/connecteddevice.py:126 +#: src/connecteddevice.py:135 msgid "Use a closer value so the display zooms in when you look at it." msgstr "" -#: src/connecteddevice.py:133 +#: src/connecteddevice.py:142 #, fuzzy msgid "Set All Displays Distance" msgstr "Distance d'affichage" -#: src/connecteddevice.py:134 +#: src/connecteddevice.py:143 msgid "Use a farther value so the displays are zoomed out when you look away." msgstr "" -#: src/connecteddevice.py:232 +#: src/connecteddevice.py:248 msgid "" "Unable to add virtual displays on this machine. xdg-desktop-portal is " "required." msgstr "" -#: src/connecteddevice.py:266 +#: src/connecteddevice.py:282 #, fuzzy msgid "Focused display" msgstr "Distance d'affichage" -#: src/connecteddevice.py:272 +#: src/connecteddevice.py:288 #, fuzzy msgid "All displays" msgstr "Affichage incurvé" @@ -322,9 +322,7 @@ msgid "Viewport horizontal offset" msgstr "" #: src/gtk/connected-device.ui:293 -msgid "" -"By default, the viewport will center on the primary display. Use this slider " -"to move the viewport to the left or right." +msgid "Move the viewport to the left or right of its default position." msgstr "" #: src/gtk/connected-device.ui:322 @@ -332,9 +330,7 @@ msgid "Viewport vertical offset" msgstr "" #: src/gtk/connected-device.ui:323 -msgid "" -"By default, the viewport will center on the primary display. Use this slider " -"to move the viewport up or down." +msgid "Move the viewport up or down from its default position." msgstr "" #: src/gtk/connected-device.ui:359 src/gtk/connected-device.ui:365 @@ -384,15 +380,15 @@ msgstr "Raccourci de basculement du mode de suivi" msgid "Quickly toggle follow mode." msgstr "Basculer rapidement le mode de suivi." -#: src/gtk/connected-device.ui:491 src/gtk/connected-device.ui:497 +#: src/gtk/connected-device.ui:491 src/gtk/connected-device.ui:501 msgid "Advanced Settings" msgstr "Paramètres avancés" -#: src/gtk/connected-device.ui:500 +#: src/gtk/connected-device.ui:505 msgid "Find optimal display config" msgstr "Trouver la configuration d'affichage optimale" -#: src/gtk/connected-device.ui:501 +#: src/gtk/connected-device.ui:506 msgid "" "Automatically modify the glasses display configuration for maximum " "resolution and best scaling when plugged in." @@ -401,31 +397,87 @@ msgstr "" "résolution maximale et une meilleure mise à l'échelle lorsque elles sont " "branchées." -#: src/gtk/connected-device.ui:511 +#: src/gtk/connected-device.ui:516 msgid "Use highest refresh rate" msgstr "Utiliser le taux de rafraîchissement le plus élevé" -#: src/gtk/connected-device.ui:512 +#: src/gtk/connected-device.ui:517 msgid "Refresh rate may affect performance, disable this to set it manually." msgstr "" "Un taux de rafraîchissement élevé peut affecter les performances, désactivez-" "le pour le définir manuellement." -#: src/gtk/connected-device.ui:522 +#: src/gtk/connected-device.ui:527 +msgid "Center on glasses' display" +msgstr "" + +#: src/gtk/connected-device.ui:528 +msgid "" +"Center the viewport on the glasses' display, even if the display is not in " +"the middle." +msgstr "" + +#: src/gtk/connected-device.ui:538 msgid "Always primary display" msgstr "Affichage principal en permanence" -#: src/gtk/connected-device.ui:523 +#: src/gtk/connected-device.ui:539 msgid "Automatically set the glasses as the primary display when plugged in." msgstr "" "Définissez automatiquement les lunettes comme affichage principal " "lorsqu'elles sont branchées." -#: src/gtk/connected-device.ui:533 +#: src/gtk/connected-device.ui:549 +#, fuzzy +msgid "Remove virtual displays on disable" +msgstr "Affichage incurvé" + +#: src/gtk/connected-device.ui:550 +msgid "Automatically remove virtual displays when the XR effect is disabled." +msgstr "" + +#: src/gtk/connected-device.ui:560 +msgid "Enable multi-tap detection" +msgstr "" + +#: src/gtk/connected-device.ui:561 +msgid "Enables double-tap to recenter and triple-tap to recalibrate." +msgstr "" + +#: src/gtk/connected-device.ui:571 +#, fuzzy +msgid "All displays follow mode" +msgstr "Affichage incurvé" + +#: src/gtk/connected-device.ui:572 +msgid "Follow mode moves all displays, not just the focused one." +msgstr "" + +#: src/gtk/connected-device.ui:588 +msgid "Follow mode movement tracking" +msgstr "" + +#: src/gtk/connected-device.ui:589 +msgid "Choose which movements should be tracked in follow mode." +msgstr "" + +#: src/gtk/connected-device.ui:604 +msgid "Horizontal" +msgstr "" + +#: src/gtk/connected-device.ui:624 +msgid "Vertical" +msgstr "" + +#: src/gtk/connected-device.ui:644 +msgid "Tilt/roll" +msgstr "" + +#: src/gtk/connected-device.ui:662 msgid "Movement look-ahead" msgstr "Prédiction de mouvement" -#: src/gtk/connected-device.ui:534 +#: src/gtk/connected-device.ui:663 msgid "" "Counteracts input lag by predicting head-tracking position ahead of render " "time. Stick with default unless virtual display drags behind your head " @@ -435,28 +487,20 @@ msgstr "" "le temps de rendu. Restez sur la valeur par défaut à moins que l'affichage " "virtuel ne soit lent, ne saute pas ou ne soit très instable." -#: src/gtk/connected-device.ui:552 +#: src/gtk/connected-device.ui:681 msgid "Default" msgstr "Par défaut" -#: src/gtk/connected-device.ui:564 +#: src/gtk/connected-device.ui:693 msgid "Text Scaling" msgstr "Mise à l'échelle du texte" -#: src/gtk/connected-device.ui:565 +#: src/gtk/connected-device.ui:694 msgid "Scaling text below 1.0 will simulate a higher resolution display" msgstr "" "Une mise à l'échelle du texte en dessous de 1.0 simulera un affichage de " "plus haute résolution" -#: src/gtk/connected-device.ui:595 -msgid "Enable multi-tap detection" -msgstr "" - -#: src/gtk/connected-device.ui:596 -msgid "Enables double-tap to recenter and triple-tap to recalibrate." -msgstr "" - #: src/gtk/display-distance-dialog.ui:9 msgid "Show full range" msgstr "" diff --git a/ui/po/it.po b/ui/po/it.po index 0a9d4a1..82567bd 100644 --- a/ui/po/it.po +++ b/ui/po/it.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-03-06 15:32-0800\n" +"POT-Creation-Date: 2025-03-07 20:36-0800\n" "PO-Revision-Date: 2024-08-02 21:14-0700\n" "Last-Translator: \n" "Language-Team: Italian \n" @@ -29,36 +29,36 @@ msgstr "" msgid "This feature is not currently supported for your device." msgstr "Questa funzione non è attualmente supportata sul tuo dispositivo." -#: src/connecteddevice.py:125 +#: src/connecteddevice.py:134 #, fuzzy msgid "Set Focused Display Distance" msgstr "Distanza del display" -#: src/connecteddevice.py:126 +#: src/connecteddevice.py:135 msgid "Use a closer value so the display zooms in when you look at it." msgstr "" -#: src/connecteddevice.py:133 +#: src/connecteddevice.py:142 #, fuzzy msgid "Set All Displays Distance" msgstr "Distanza del display" -#: src/connecteddevice.py:134 +#: src/connecteddevice.py:143 msgid "Use a farther value so the displays are zoomed out when you look away." msgstr "" -#: src/connecteddevice.py:232 +#: src/connecteddevice.py:248 msgid "" "Unable to add virtual displays on this machine. xdg-desktop-portal is " "required." msgstr "" -#: src/connecteddevice.py:266 +#: src/connecteddevice.py:282 #, fuzzy msgid "Focused display" msgstr "Distanza del display" -#: src/connecteddevice.py:272 +#: src/connecteddevice.py:288 #, fuzzy msgid "All displays" msgstr "Display curvo" @@ -320,9 +320,7 @@ msgid "Viewport horizontal offset" msgstr "" #: src/gtk/connected-device.ui:293 -msgid "" -"By default, the viewport will center on the primary display. Use this slider " -"to move the viewport to the left or right." +msgid "Move the viewport to the left or right of its default position." msgstr "" #: src/gtk/connected-device.ui:322 @@ -330,9 +328,7 @@ msgid "Viewport vertical offset" msgstr "" #: src/gtk/connected-device.ui:323 -msgid "" -"By default, the viewport will center on the primary display. Use this slider " -"to move the viewport up or down." +msgid "Move the viewport up or down from its default position." msgstr "" #: src/gtk/connected-device.ui:359 src/gtk/connected-device.ui:365 @@ -383,15 +379,15 @@ msgstr "Scorciatoia per attivare/disattivare la modalità di inseguimento" msgid "Quickly toggle follow mode." msgstr "Attivazione/disattivazione rapida della modalità di inseguimento." -#: src/gtk/connected-device.ui:491 src/gtk/connected-device.ui:497 +#: src/gtk/connected-device.ui:491 src/gtk/connected-device.ui:501 msgid "Advanced Settings" msgstr "Impostazioni avanzate" -#: src/gtk/connected-device.ui:500 +#: src/gtk/connected-device.ui:505 msgid "Find optimal display config" msgstr "Trova la configurazione ottimale del display" -#: src/gtk/connected-device.ui:501 +#: src/gtk/connected-device.ui:506 msgid "" "Automatically modify the glasses display configuration for maximum " "resolution and best scaling when plugged in." @@ -399,31 +395,87 @@ msgstr "" "Modifica automaticamente la configurazione del display degli occhiali per " "ottenere la massima risoluzione e la migliore scalabilità quando collegati." -#: src/gtk/connected-device.ui:511 +#: src/gtk/connected-device.ui:516 msgid "Use highest refresh rate" msgstr "Usa la frequenza di aggiornamento più elevata" -#: src/gtk/connected-device.ui:512 +#: src/gtk/connected-device.ui:517 msgid "Refresh rate may affect performance, disable this to set it manually." msgstr "" "La frequenza di aggiornamento potrebbe influire sulle prestazioni, " "disabilitala per impostarla manualmente." -#: src/gtk/connected-device.ui:522 +#: src/gtk/connected-device.ui:527 +msgid "Center on glasses' display" +msgstr "" + +#: src/gtk/connected-device.ui:528 +msgid "" +"Center the viewport on the glasses' display, even if the display is not in " +"the middle." +msgstr "" + +#: src/gtk/connected-device.ui:538 msgid "Always primary display" msgstr "Imposta sempre come display primario" -#: src/gtk/connected-device.ui:523 +#: src/gtk/connected-device.ui:539 msgid "Automatically set the glasses as the primary display when plugged in." msgstr "" "Imposta automaticamente gli occhiali come display primario quando sono " "collegati." -#: src/gtk/connected-device.ui:533 +#: src/gtk/connected-device.ui:549 +#, fuzzy +msgid "Remove virtual displays on disable" +msgstr "Display curvo" + +#: src/gtk/connected-device.ui:550 +msgid "Automatically remove virtual displays when the XR effect is disabled." +msgstr "" + +#: src/gtk/connected-device.ui:560 +msgid "Enable multi-tap detection" +msgstr "" + +#: src/gtk/connected-device.ui:561 +msgid "Enables double-tap to recenter and triple-tap to recalibrate." +msgstr "" + +#: src/gtk/connected-device.ui:571 +#, fuzzy +msgid "All displays follow mode" +msgstr "Display curvo" + +#: src/gtk/connected-device.ui:572 +msgid "Follow mode moves all displays, not just the focused one." +msgstr "" + +#: src/gtk/connected-device.ui:588 +msgid "Follow mode movement tracking" +msgstr "" + +#: src/gtk/connected-device.ui:589 +msgid "Choose which movements should be tracked in follow mode." +msgstr "" + +#: src/gtk/connected-device.ui:604 +msgid "Horizontal" +msgstr "" + +#: src/gtk/connected-device.ui:624 +msgid "Vertical" +msgstr "" + +#: src/gtk/connected-device.ui:644 +msgid "Tilt/roll" +msgstr "" + +#: src/gtk/connected-device.ui:662 msgid "Movement look-ahead" msgstr "Anticipo del movimento" -#: src/gtk/connected-device.ui:534 +#: src/gtk/connected-device.ui:663 msgid "" "Counteracts input lag by predicting head-tracking position ahead of render " "time. Stick with default unless virtual display drags behind your head " @@ -434,28 +486,20 @@ msgstr "" "che il display virtuale non rimanga indietro rispetto ai tuoi movimenti, non " "salti in avanti o sia molto tremolante." -#: src/gtk/connected-device.ui:552 +#: src/gtk/connected-device.ui:681 msgid "Default" msgstr "Predefinito" -#: src/gtk/connected-device.ui:564 +#: src/gtk/connected-device.ui:693 msgid "Text Scaling" msgstr "Ridimensionamento del testo" -#: src/gtk/connected-device.ui:565 +#: src/gtk/connected-device.ui:694 msgid "Scaling text below 1.0 will simulate a higher resolution display" msgstr "" "Ridimensionando il testo sotto a 1.0 si simula una maggiore risoluzione del " "display" -#: src/gtk/connected-device.ui:595 -msgid "Enable multi-tap detection" -msgstr "" - -#: src/gtk/connected-device.ui:596 -msgid "Enables double-tap to recenter and triple-tap to recalibrate." -msgstr "" - #: src/gtk/display-distance-dialog.ui:9 msgid "Show full range" msgstr "" diff --git a/ui/po/ja.po b/ui/po/ja.po index 227342c..156f3f4 100644 --- a/ui/po/ja.po +++ b/ui/po/ja.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-03-06 15:32-0800\n" +"POT-Creation-Date: 2025-03-07 20:36-0800\n" "PO-Revision-Date: 2024-08-02 20:55-0700\n" "Last-Translator: \n" "Language-Team: Japanese \n" @@ -31,36 +31,36 @@ msgstr "メガネを3Dモードに切り替え、表示の幅を2倍にします msgid "This feature is not currently supported for your device." msgstr "現在接続されているデバイスはこの機能に対応していません。" -#: src/connecteddevice.py:125 +#: src/connecteddevice.py:134 #, fuzzy msgid "Set Focused Display Distance" msgstr "ディスプレイ距離" -#: src/connecteddevice.py:126 +#: src/connecteddevice.py:135 msgid "Use a closer value so the display zooms in when you look at it." msgstr "" -#: src/connecteddevice.py:133 +#: src/connecteddevice.py:142 #, fuzzy msgid "Set All Displays Distance" msgstr "ディスプレイ距離" -#: src/connecteddevice.py:134 +#: src/connecteddevice.py:143 msgid "Use a farther value so the displays are zoomed out when you look away." msgstr "" -#: src/connecteddevice.py:232 +#: src/connecteddevice.py:248 msgid "" "Unable to add virtual displays on this machine. xdg-desktop-portal is " "required." msgstr "" -#: src/connecteddevice.py:266 +#: src/connecteddevice.py:282 #, fuzzy msgid "Focused display" msgstr "ディスプレイ距離" -#: src/connecteddevice.py:272 +#: src/connecteddevice.py:288 #, fuzzy msgid "All displays" msgstr "曲面ディスプレイ" @@ -322,9 +322,7 @@ msgid "Viewport horizontal offset" msgstr "" #: src/gtk/connected-device.ui:293 -msgid "" -"By default, the viewport will center on the primary display. Use this slider " -"to move the viewport to the left or right." +msgid "Move the viewport to the left or right of its default position." msgstr "" #: src/gtk/connected-device.ui:322 @@ -332,9 +330,7 @@ msgid "Viewport vertical offset" msgstr "" #: src/gtk/connected-device.ui:323 -msgid "" -"By default, the viewport will center on the primary display. Use this slider " -"to move the viewport up or down." +msgid "Move the viewport up or down from its default position." msgstr "" #: src/gtk/connected-device.ui:359 src/gtk/connected-device.ui:365 @@ -384,15 +380,15 @@ msgstr "フォローモードの切り替え" msgid "Quickly toggle follow mode." msgstr "フォローモードのオン/オフをすばやく切り替えます。" -#: src/gtk/connected-device.ui:491 src/gtk/connected-device.ui:497 +#: src/gtk/connected-device.ui:491 src/gtk/connected-device.ui:501 msgid "Advanced Settings" msgstr "詳細設定" -#: src/gtk/connected-device.ui:500 +#: src/gtk/connected-device.ui:505 msgid "Find optimal display config" msgstr "ディスプレイ設定を最適化する" -#: src/gtk/connected-device.ui:501 +#: src/gtk/connected-device.ui:506 msgid "" "Automatically modify the glasses display configuration for maximum " "resolution and best scaling when plugged in." @@ -400,29 +396,85 @@ msgstr "" "メガネ接続時、最大解像度と最適なスケーリングのためにディスプレイ設定を自動的" "に変更します。" -#: src/gtk/connected-device.ui:511 +#: src/gtk/connected-device.ui:516 msgid "Use highest refresh rate" msgstr "最大のリフレッシュレートを使用する" -#: src/gtk/connected-device.ui:512 +#: src/gtk/connected-device.ui:517 msgid "Refresh rate may affect performance, disable this to set it manually." msgstr "" "リフレッシュレートはパフォーマンスに影響を与える可能性があります。手動で設定" "する場合は無効にしてください。" -#: src/gtk/connected-device.ui:522 +#: src/gtk/connected-device.ui:527 +msgid "Center on glasses' display" +msgstr "" + +#: src/gtk/connected-device.ui:528 +msgid "" +"Center the viewport on the glasses' display, even if the display is not in " +"the middle." +msgstr "" + +#: src/gtk/connected-device.ui:538 msgid "Always primary display" msgstr "常にプライマリディスプレイにする" -#: src/gtk/connected-device.ui:523 +#: src/gtk/connected-device.ui:539 msgid "Automatically set the glasses as the primary display when plugged in." msgstr "メガネ接続時、自動的にプライマリディスプレイにします。" -#: src/gtk/connected-device.ui:533 +#: src/gtk/connected-device.ui:549 +#, fuzzy +msgid "Remove virtual displays on disable" +msgstr "曲面ディスプレイ" + +#: src/gtk/connected-device.ui:550 +msgid "Automatically remove virtual displays when the XR effect is disabled." +msgstr "" + +#: src/gtk/connected-device.ui:560 +msgid "Enable multi-tap detection" +msgstr "" + +#: src/gtk/connected-device.ui:561 +msgid "Enables double-tap to recenter and triple-tap to recalibrate." +msgstr "" + +#: src/gtk/connected-device.ui:571 +#, fuzzy +msgid "All displays follow mode" +msgstr "曲面ディスプレイ" + +#: src/gtk/connected-device.ui:572 +msgid "Follow mode moves all displays, not just the focused one." +msgstr "" + +#: src/gtk/connected-device.ui:588 +msgid "Follow mode movement tracking" +msgstr "" + +#: src/gtk/connected-device.ui:589 +msgid "Choose which movements should be tracked in follow mode." +msgstr "" + +#: src/gtk/connected-device.ui:604 +msgid "Horizontal" +msgstr "" + +#: src/gtk/connected-device.ui:624 +msgid "Vertical" +msgstr "" + +#: src/gtk/connected-device.ui:644 +msgid "Tilt/roll" +msgstr "" + +#: src/gtk/connected-device.ui:662 msgid "Movement look-ahead" msgstr "動きの先読み" -#: src/gtk/connected-device.ui:534 +#: src/gtk/connected-device.ui:663 msgid "" "Counteracts input lag by predicting head-tracking position ahead of render " "time. Stick with default unless virtual display drags behind your head " @@ -432,28 +484,20 @@ msgstr "" "ます。仮想ディスプレイが頭の動きに遅れたり、先に進んだり、非常に揺れたりする" "場合を除き、デフォルトのままで問題ありません。" -#: src/gtk/connected-device.ui:552 +#: src/gtk/connected-device.ui:681 msgid "Default" msgstr "デフォルト" -#: src/gtk/connected-device.ui:564 +#: src/gtk/connected-device.ui:693 msgid "Text Scaling" msgstr "テキストスケーリング" -#: src/gtk/connected-device.ui:565 +#: src/gtk/connected-device.ui:694 msgid "Scaling text below 1.0 will simulate a higher resolution display" msgstr "" "テキストを1.0未満にスケーリングすると、高解像度ディスプレイをシミュレートしま" "す。" -#: src/gtk/connected-device.ui:595 -msgid "Enable multi-tap detection" -msgstr "" - -#: src/gtk/connected-device.ui:596 -msgid "Enables double-tap to recenter and triple-tap to recalibrate." -msgstr "" - #: src/gtk/display-distance-dialog.ui:9 msgid "Show full range" msgstr "" diff --git a/ui/po/pl.po b/ui/po/pl.po index 9bcfefd..385779a 100644 --- a/ui/po/pl.po +++ b/ui/po/pl.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-03-06 15:32-0800\n" +"POT-Creation-Date: 2025-03-07 20:36-0800\n" "PO-Revision-Date: 2024-08-16 10:26-0700\n" "Last-Translator: \n" "Language-Team: Polish \n" @@ -28,33 +28,33 @@ msgstr "" msgid "This feature is not currently supported for your device." msgstr "" -#: src/connecteddevice.py:125 +#: src/connecteddevice.py:134 msgid "Set Focused Display Distance" msgstr "" -#: src/connecteddevice.py:126 +#: src/connecteddevice.py:135 msgid "Use a closer value so the display zooms in when you look at it." msgstr "" -#: src/connecteddevice.py:133 +#: src/connecteddevice.py:142 msgid "Set All Displays Distance" msgstr "" -#: src/connecteddevice.py:134 +#: src/connecteddevice.py:143 msgid "Use a farther value so the displays are zoomed out when you look away." msgstr "" -#: src/connecteddevice.py:232 +#: src/connecteddevice.py:248 msgid "" "Unable to add virtual displays on this machine. xdg-desktop-portal is " "required." msgstr "" -#: src/connecteddevice.py:266 +#: src/connecteddevice.py:282 msgid "Focused display" msgstr "" -#: src/connecteddevice.py:272 +#: src/connecteddevice.py:288 msgid "All displays" msgstr "" @@ -309,9 +309,7 @@ msgid "Viewport horizontal offset" msgstr "" #: src/gtk/connected-device.ui:293 -msgid "" -"By default, the viewport will center on the primary display. Use this slider " -"to move the viewport to the left or right." +msgid "Move the viewport to the left or right of its default position." msgstr "" #: src/gtk/connected-device.ui:322 @@ -319,9 +317,7 @@ msgid "Viewport vertical offset" msgstr "" #: src/gtk/connected-device.ui:323 -msgid "" -"By default, the viewport will center on the primary display. Use this slider " -"to move the viewport up or down." +msgid "Move the viewport up or down from its default position." msgstr "" #: src/gtk/connected-device.ui:359 src/gtk/connected-device.ui:365 @@ -367,67 +363,113 @@ msgstr "" msgid "Quickly toggle follow mode." msgstr "" -#: src/gtk/connected-device.ui:491 src/gtk/connected-device.ui:497 +#: src/gtk/connected-device.ui:491 src/gtk/connected-device.ui:501 msgid "Advanced Settings" msgstr "" -#: src/gtk/connected-device.ui:500 +#: src/gtk/connected-device.ui:505 msgid "Find optimal display config" msgstr "" -#: src/gtk/connected-device.ui:501 +#: src/gtk/connected-device.ui:506 msgid "" "Automatically modify the glasses display configuration for maximum " "resolution and best scaling when plugged in." msgstr "" -#: src/gtk/connected-device.ui:511 +#: src/gtk/connected-device.ui:516 msgid "Use highest refresh rate" msgstr "" -#: src/gtk/connected-device.ui:512 +#: src/gtk/connected-device.ui:517 msgid "Refresh rate may affect performance, disable this to set it manually." msgstr "" -#: src/gtk/connected-device.ui:522 +#: src/gtk/connected-device.ui:527 +msgid "Center on glasses' display" +msgstr "" + +#: src/gtk/connected-device.ui:528 +msgid "" +"Center the viewport on the glasses' display, even if the display is not in " +"the middle." +msgstr "" + +#: src/gtk/connected-device.ui:538 msgid "Always primary display" msgstr "" -#: src/gtk/connected-device.ui:523 +#: src/gtk/connected-device.ui:539 msgid "Automatically set the glasses as the primary display when plugged in." msgstr "" -#: src/gtk/connected-device.ui:533 +#: src/gtk/connected-device.ui:549 +msgid "Remove virtual displays on disable" +msgstr "" + +#: src/gtk/connected-device.ui:550 +msgid "Automatically remove virtual displays when the XR effect is disabled." +msgstr "" + +#: src/gtk/connected-device.ui:560 +msgid "Enable multi-tap detection" +msgstr "" + +#: src/gtk/connected-device.ui:561 +msgid "Enables double-tap to recenter and triple-tap to recalibrate." +msgstr "" + +#: src/gtk/connected-device.ui:571 +msgid "All displays follow mode" +msgstr "" + +#: src/gtk/connected-device.ui:572 +msgid "Follow mode moves all displays, not just the focused one." +msgstr "" + +#: src/gtk/connected-device.ui:588 +msgid "Follow mode movement tracking" +msgstr "" + +#: src/gtk/connected-device.ui:589 +msgid "Choose which movements should be tracked in follow mode." +msgstr "" + +#: src/gtk/connected-device.ui:604 +msgid "Horizontal" +msgstr "" + +#: src/gtk/connected-device.ui:624 +msgid "Vertical" +msgstr "" + +#: src/gtk/connected-device.ui:644 +msgid "Tilt/roll" +msgstr "" + +#: src/gtk/connected-device.ui:662 msgid "Movement look-ahead" msgstr "" -#: src/gtk/connected-device.ui:534 +#: src/gtk/connected-device.ui:663 msgid "" "Counteracts input lag by predicting head-tracking position ahead of render " "time. Stick with default unless virtual display drags behind your head " "movements, jumps ahead, or is very shaky." msgstr "" -#: src/gtk/connected-device.ui:552 +#: src/gtk/connected-device.ui:681 msgid "Default" msgstr "" -#: src/gtk/connected-device.ui:564 +#: src/gtk/connected-device.ui:693 msgid "Text Scaling" msgstr "" -#: src/gtk/connected-device.ui:565 +#: src/gtk/connected-device.ui:694 msgid "Scaling text below 1.0 will simulate a higher resolution display" msgstr "" -#: src/gtk/connected-device.ui:595 -msgid "Enable multi-tap detection" -msgstr "" - -#: src/gtk/connected-device.ui:596 -msgid "Enables double-tap to recenter and triple-tap to recalibrate." -msgstr "" - #: src/gtk/display-distance-dialog.ui:9 msgid "Show full range" msgstr "" diff --git a/ui/po/pt_BR.po b/ui/po/pt_BR.po index 0ee992e..8814839 100644 --- a/ui/po/pt_BR.po +++ b/ui/po/pt_BR.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-03-06 15:32-0800\n" +"POT-Creation-Date: 2025-03-07 20:36-0800\n" "PO-Revision-Date: 2024-08-19 09:39-0700\n" "Last-Translator: \n" "Language-Team: Brazilian Portuguese \n" "Language-Team: Russian \n" @@ -29,36 +29,36 @@ msgstr "" msgid "This feature is not currently supported for your device." msgstr "Эта функция в настоящее время не поддерживается для вашего устройства." -#: src/connecteddevice.py:125 +#: src/connecteddevice.py:134 #, fuzzy msgid "Set Focused Display Distance" msgstr "Расстояние дисплея" -#: src/connecteddevice.py:126 +#: src/connecteddevice.py:135 msgid "Use a closer value so the display zooms in when you look at it." msgstr "" -#: src/connecteddevice.py:133 +#: src/connecteddevice.py:142 #, fuzzy msgid "Set All Displays Distance" msgstr "Расстояние дисплея" -#: src/connecteddevice.py:134 +#: src/connecteddevice.py:143 msgid "Use a farther value so the displays are zoomed out when you look away." msgstr "" -#: src/connecteddevice.py:232 +#: src/connecteddevice.py:248 msgid "" "Unable to add virtual displays on this machine. xdg-desktop-portal is " "required." msgstr "" -#: src/connecteddevice.py:266 +#: src/connecteddevice.py:282 #, fuzzy msgid "Focused display" msgstr "Расстояние дисплея" -#: src/connecteddevice.py:272 +#: src/connecteddevice.py:288 #, fuzzy msgid "All displays" msgstr "Изогнутый дисплей" @@ -321,9 +321,7 @@ msgid "Viewport horizontal offset" msgstr "" #: src/gtk/connected-device.ui:293 -msgid "" -"By default, the viewport will center on the primary display. Use this slider " -"to move the viewport to the left or right." +msgid "Move the viewport to the left or right of its default position." msgstr "" #: src/gtk/connected-device.ui:322 @@ -331,9 +329,7 @@ msgid "Viewport vertical offset" msgstr "" #: src/gtk/connected-device.ui:323 -msgid "" -"By default, the viewport will center on the primary display. Use this slider " -"to move the viewport up or down." +msgid "Move the viewport up or down from its default position." msgstr "" #: src/gtk/connected-device.ui:359 src/gtk/connected-device.ui:365 @@ -381,15 +377,15 @@ msgstr "Сочетание клавиш для переключения режи msgid "Quickly toggle follow mode." msgstr "Быстро переключать режим следования." -#: src/gtk/connected-device.ui:491 src/gtk/connected-device.ui:497 +#: src/gtk/connected-device.ui:491 src/gtk/connected-device.ui:501 msgid "Advanced Settings" msgstr "Дополнительные настройки" -#: src/gtk/connected-device.ui:500 +#: src/gtk/connected-device.ui:505 msgid "Find optimal display config" msgstr "Найти оптимальную конфигурацию дисплея" -#: src/gtk/connected-device.ui:501 +#: src/gtk/connected-device.ui:506 msgid "" "Automatically modify the glasses display configuration for maximum " "resolution and best scaling when plugged in." @@ -397,31 +393,87 @@ msgstr "" "Автоматически изменять конфигурацию дисплея очков для максимального " "разрешения и лучшей масштабирования при подключении." -#: src/gtk/connected-device.ui:511 +#: src/gtk/connected-device.ui:516 msgid "Use highest refresh rate" msgstr "Использовать высшую частоту обновления" -#: src/gtk/connected-device.ui:512 +#: src/gtk/connected-device.ui:517 msgid "Refresh rate may affect performance, disable this to set it manually." msgstr "" "Частота обновления может повлиять на производительность, отключите это, " "чтобы установить ее вручную." -#: src/gtk/connected-device.ui:522 +#: src/gtk/connected-device.ui:527 +msgid "Center on glasses' display" +msgstr "" + +#: src/gtk/connected-device.ui:528 +msgid "" +"Center the viewport on the glasses' display, even if the display is not in " +"the middle." +msgstr "" + +#: src/gtk/connected-device.ui:538 msgid "Always primary display" msgstr "Всегда основной дисплей" -#: src/gtk/connected-device.ui:523 +#: src/gtk/connected-device.ui:539 msgid "Automatically set the glasses as the primary display when plugged in." msgstr "" "Автоматически устанавливать очки в качестве основного дисплея при " "подключении." -#: src/gtk/connected-device.ui:533 +#: src/gtk/connected-device.ui:549 +#, fuzzy +msgid "Remove virtual displays on disable" +msgstr "Изогнутый дисплей" + +#: src/gtk/connected-device.ui:550 +msgid "Automatically remove virtual displays when the XR effect is disabled." +msgstr "" + +#: src/gtk/connected-device.ui:560 +msgid "Enable multi-tap detection" +msgstr "" + +#: src/gtk/connected-device.ui:561 +msgid "Enables double-tap to recenter and triple-tap to recalibrate." +msgstr "" + +#: src/gtk/connected-device.ui:571 +#, fuzzy +msgid "All displays follow mode" +msgstr "Изогнутый дисплей" + +#: src/gtk/connected-device.ui:572 +msgid "Follow mode moves all displays, not just the focused one." +msgstr "" + +#: src/gtk/connected-device.ui:588 +msgid "Follow mode movement tracking" +msgstr "" + +#: src/gtk/connected-device.ui:589 +msgid "Choose which movements should be tracked in follow mode." +msgstr "" + +#: src/gtk/connected-device.ui:604 +msgid "Horizontal" +msgstr "" + +#: src/gtk/connected-device.ui:624 +msgid "Vertical" +msgstr "" + +#: src/gtk/connected-device.ui:644 +msgid "Tilt/roll" +msgstr "" + +#: src/gtk/connected-device.ui:662 msgid "Movement look-ahead" msgstr "Прогнозирование движения" -#: src/gtk/connected-device.ui:534 +#: src/gtk/connected-device.ui:663 msgid "" "Counteracts input lag by predicting head-tracking position ahead of render " "time. Stick with default unless virtual display drags behind your head " @@ -432,26 +484,18 @@ msgstr "" "виртуальный дисплей не отстает от движений вашей головы, не опережает или не " "очень трясётся." -#: src/gtk/connected-device.ui:552 +#: src/gtk/connected-device.ui:681 msgid "Default" msgstr "По умолчанию" -#: src/gtk/connected-device.ui:564 +#: src/gtk/connected-device.ui:693 msgid "Text Scaling" msgstr "" -#: src/gtk/connected-device.ui:565 +#: src/gtk/connected-device.ui:694 msgid "Scaling text below 1.0 will simulate a higher resolution display" msgstr "" -#: src/gtk/connected-device.ui:595 -msgid "Enable multi-tap detection" -msgstr "" - -#: src/gtk/connected-device.ui:596 -msgid "Enables double-tap to recenter and triple-tap to recalibrate." -msgstr "" - #: src/gtk/display-distance-dialog.ui:9 msgid "Show full range" msgstr "" diff --git a/ui/po/sv.po b/ui/po/sv.po index d6a90ba..fdb9fbd 100644 --- a/ui/po/sv.po +++ b/ui/po/sv.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-03-06 15:32-0800\n" +"POT-Creation-Date: 2025-03-07 20:36-0800\n" "PO-Revision-Date: 2024-08-16 10:31-0700\n" "Last-Translator: \n" "Language-Team: Swedish \n" @@ -29,36 +29,36 @@ msgstr "" msgid "This feature is not currently supported for your device." msgstr "Din enhet stöder inte den här funktionen för tillfället." -#: src/connecteddevice.py:125 +#: src/connecteddevice.py:134 #, fuzzy msgid "Set Focused Display Distance" msgstr "Avstånd till skärmen" -#: src/connecteddevice.py:126 +#: src/connecteddevice.py:135 msgid "Use a closer value so the display zooms in when you look at it." msgstr "" -#: src/connecteddevice.py:133 +#: src/connecteddevice.py:142 #, fuzzy msgid "Set All Displays Distance" msgstr "Avstånd till skärmen" -#: src/connecteddevice.py:134 +#: src/connecteddevice.py:143 msgid "Use a farther value so the displays are zoomed out when you look away." msgstr "" -#: src/connecteddevice.py:232 +#: src/connecteddevice.py:248 msgid "" "Unable to add virtual displays on this machine. xdg-desktop-portal is " "required." msgstr "" -#: src/connecteddevice.py:266 +#: src/connecteddevice.py:282 #, fuzzy msgid "Focused display" msgstr "Avstånd till skärmen" -#: src/connecteddevice.py:272 +#: src/connecteddevice.py:288 #, fuzzy msgid "All displays" msgstr "Böjd skärm" @@ -320,9 +320,7 @@ msgid "Viewport horizontal offset" msgstr "" #: src/gtk/connected-device.ui:293 -msgid "" -"By default, the viewport will center on the primary display. Use this slider " -"to move the viewport to the left or right." +msgid "Move the viewport to the left or right of its default position." msgstr "" #: src/gtk/connected-device.ui:322 @@ -330,9 +328,7 @@ msgid "Viewport vertical offset" msgstr "" #: src/gtk/connected-device.ui:323 -msgid "" -"By default, the viewport will center on the primary display. Use this slider " -"to move the viewport up or down." +msgid "Move the viewport up or down from its default position." msgstr "" #: src/gtk/connected-device.ui:359 src/gtk/connected-device.ui:365 @@ -382,15 +378,15 @@ msgstr "Växla följ läge kort" msgid "Quickly toggle follow mode." msgstr "Växla snabbt följ läge." -#: src/gtk/connected-device.ui:491 src/gtk/connected-device.ui:497 +#: src/gtk/connected-device.ui:491 src/gtk/connected-device.ui:501 msgid "Advanced Settings" msgstr "Avancerade inställningar" -#: src/gtk/connected-device.ui:500 +#: src/gtk/connected-device.ui:505 msgid "Find optimal display config" msgstr "Hitta optimal konfiguration till skärmen" -#: src/gtk/connected-device.ui:501 +#: src/gtk/connected-device.ui:506 msgid "" "Automatically modify the glasses display configuration for maximum " "resolution and best scaling when plugged in." @@ -398,29 +394,85 @@ msgstr "" "Ändrar automatisk glasögonens skärmkonfiguration för maximal upplösning och " "bästa skälning när den är ansluten." -#: src/gtk/connected-device.ui:511 +#: src/gtk/connected-device.ui:516 msgid "Use highest refresh rate" msgstr "Använd högsta uppdateringsfrekvens" -#: src/gtk/connected-device.ui:512 +#: src/gtk/connected-device.ui:517 msgid "Refresh rate may affect performance, disable this to set it manually." msgstr "" "Uppdateringsfrekvens kan påverka prestanda, inaktivera detta för att ställa " "in det manuellt." -#: src/gtk/connected-device.ui:522 +#: src/gtk/connected-device.ui:527 +msgid "Center on glasses' display" +msgstr "" + +#: src/gtk/connected-device.ui:528 +msgid "" +"Center the viewport on the glasses' display, even if the display is not in " +"the middle." +msgstr "" + +#: src/gtk/connected-device.ui:538 msgid "Always primary display" msgstr "Alltid primär skärm" -#: src/gtk/connected-device.ui:523 +#: src/gtk/connected-device.ui:539 msgid "Automatically set the glasses as the primary display when plugged in." msgstr "Ställer automatisk glasögon som primär skärm när den är ansluten." -#: src/gtk/connected-device.ui:533 +#: src/gtk/connected-device.ui:549 +#, fuzzy +msgid "Remove virtual displays on disable" +msgstr "Böjd skärm" + +#: src/gtk/connected-device.ui:550 +msgid "Automatically remove virtual displays when the XR effect is disabled." +msgstr "" + +#: src/gtk/connected-device.ui:560 +msgid "Enable multi-tap detection" +msgstr "" + +#: src/gtk/connected-device.ui:561 +msgid "Enables double-tap to recenter and triple-tap to recalibrate." +msgstr "" + +#: src/gtk/connected-device.ui:571 +#, fuzzy +msgid "All displays follow mode" +msgstr "Böjd skärm" + +#: src/gtk/connected-device.ui:572 +msgid "Follow mode moves all displays, not just the focused one." +msgstr "" + +#: src/gtk/connected-device.ui:588 +msgid "Follow mode movement tracking" +msgstr "" + +#: src/gtk/connected-device.ui:589 +msgid "Choose which movements should be tracked in follow mode." +msgstr "" + +#: src/gtk/connected-device.ui:604 +msgid "Horizontal" +msgstr "" + +#: src/gtk/connected-device.ui:624 +msgid "Vertical" +msgstr "" + +#: src/gtk/connected-device.ui:644 +msgid "Tilt/roll" +msgstr "" + +#: src/gtk/connected-device.ui:662 msgid "Movement look-ahead" msgstr "Rörs förväntning" -#: src/gtk/connected-device.ui:534 +#: src/gtk/connected-device.ui:663 msgid "" "Counteracts input lag by predicting head-tracking position ahead of render " "time. Stick with default unless virtual display drags behind your head " @@ -429,26 +481,18 @@ msgstr "" "Motverkar ingångsfördröjning genom förutsägelse av huvudrörelser.Behåll " "standardinställningen om inte skärmen skakar mycket eller rörsig konstigt." -#: src/gtk/connected-device.ui:552 +#: src/gtk/connected-device.ui:681 msgid "Default" msgstr "Standard" -#: src/gtk/connected-device.ui:564 +#: src/gtk/connected-device.ui:693 msgid "Text Scaling" msgstr "Textskalning" -#: src/gtk/connected-device.ui:565 +#: src/gtk/connected-device.ui:694 msgid "Scaling text below 1.0 will simulate a higher resolution display" msgstr "Textskalning under 1.0 kommer att simulera en högre skärmupplösning" -#: src/gtk/connected-device.ui:595 -msgid "Enable multi-tap detection" -msgstr "" - -#: src/gtk/connected-device.ui:596 -msgid "Enables double-tap to recenter and triple-tap to recalibrate." -msgstr "" - #: src/gtk/display-distance-dialog.ui:9 msgid "Show full range" msgstr "" diff --git a/ui/po/uk_UA.po b/ui/po/uk_UA.po index 9e57ba6..00ca912 100644 --- a/ui/po/uk_UA.po +++ b/ui/po/uk_UA.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-03-06 15:32-0800\n" +"POT-Creation-Date: 2025-03-07 20:36-0800\n" "PO-Revision-Date: 2024-08-17 10:08-0700\n" "Last-Translator: \n" "Language-Team: Ukrainian \n" @@ -28,36 +28,36 @@ msgstr "Переключає окуляри в режим «бок о бок» msgid "This feature is not currently supported for your device." msgstr "Ця функція наразі не підтримується на вашому пристрої." -#: src/connecteddevice.py:125 +#: src/connecteddevice.py:134 #, fuzzy msgid "Set Focused Display Distance" msgstr "Відстань дисплея" -#: src/connecteddevice.py:126 +#: src/connecteddevice.py:135 msgid "Use a closer value so the display zooms in when you look at it." msgstr "" -#: src/connecteddevice.py:133 +#: src/connecteddevice.py:142 #, fuzzy msgid "Set All Displays Distance" msgstr "Відстань дисплея" -#: src/connecteddevice.py:134 +#: src/connecteddevice.py:143 msgid "Use a farther value so the displays are zoomed out when you look away." msgstr "" -#: src/connecteddevice.py:232 +#: src/connecteddevice.py:248 msgid "" "Unable to add virtual displays on this machine. xdg-desktop-portal is " "required." msgstr "" -#: src/connecteddevice.py:266 +#: src/connecteddevice.py:282 #, fuzzy msgid "Focused display" msgstr "Відстань дисплея" -#: src/connecteddevice.py:272 +#: src/connecteddevice.py:288 #, fuzzy msgid "All displays" msgstr "Викривлений дисплей" @@ -321,9 +321,7 @@ msgid "Viewport horizontal offset" msgstr "" #: src/gtk/connected-device.ui:293 -msgid "" -"By default, the viewport will center on the primary display. Use this slider " -"to move the viewport to the left or right." +msgid "Move the viewport to the left or right of its default position." msgstr "" #: src/gtk/connected-device.ui:322 @@ -331,9 +329,7 @@ msgid "Viewport vertical offset" msgstr "" #: src/gtk/connected-device.ui:323 -msgid "" -"By default, the viewport will center on the primary display. Use this slider " -"to move the viewport up or down." +msgid "Move the viewport up or down from its default position." msgstr "" #: src/gtk/connected-device.ui:359 src/gtk/connected-device.ui:365 @@ -381,15 +377,15 @@ msgstr "Сполучення клавіш для перемикання режи msgid "Quickly toggle follow mode." msgstr "Швидко перемикати режим слідування." -#: src/gtk/connected-device.ui:491 src/gtk/connected-device.ui:497 +#: src/gtk/connected-device.ui:491 src/gtk/connected-device.ui:501 msgid "Advanced Settings" msgstr "Додаткові налаштування" -#: src/gtk/connected-device.ui:500 +#: src/gtk/connected-device.ui:505 msgid "Find optimal display config" msgstr "Знайти оптимальну конфігурацію дисплея" -#: src/gtk/connected-device.ui:501 +#: src/gtk/connected-device.ui:506 msgid "" "Automatically modify the glasses display configuration for maximum " "resolution and best scaling when plugged in." @@ -397,29 +393,85 @@ msgstr "" "Автоматично змінює конфігурацію дисплея окулярів для максимальної роздільної " "здатності і найкращого масштабування при підключенні." -#: src/gtk/connected-device.ui:511 +#: src/gtk/connected-device.ui:516 msgid "Use highest refresh rate" msgstr "Використовувати найвищу частоту оновлення" -#: src/gtk/connected-device.ui:512 +#: src/gtk/connected-device.ui:517 msgid "Refresh rate may affect performance, disable this to set it manually." msgstr "" "Частота оновлення може вплинути на продуктивність, вимкніть це, щоб " "встановити її вручну." -#: src/gtk/connected-device.ui:522 +#: src/gtk/connected-device.ui:527 +msgid "Center on glasses' display" +msgstr "" + +#: src/gtk/connected-device.ui:528 +msgid "" +"Center the viewport on the glasses' display, even if the display is not in " +"the middle." +msgstr "" + +#: src/gtk/connected-device.ui:538 msgid "Always primary display" msgstr "Завжди основний дисплей" -#: src/gtk/connected-device.ui:523 +#: src/gtk/connected-device.ui:539 msgid "Automatically set the glasses as the primary display when plugged in." msgstr "Автоматично встановлює окуляри як основний дисплей при підключенні." -#: src/gtk/connected-device.ui:533 +#: src/gtk/connected-device.ui:549 +#, fuzzy +msgid "Remove virtual displays on disable" +msgstr "Викривлений дисплей" + +#: src/gtk/connected-device.ui:550 +msgid "Automatically remove virtual displays when the XR effect is disabled." +msgstr "" + +#: src/gtk/connected-device.ui:560 +msgid "Enable multi-tap detection" +msgstr "" + +#: src/gtk/connected-device.ui:561 +msgid "Enables double-tap to recenter and triple-tap to recalibrate." +msgstr "" + +#: src/gtk/connected-device.ui:571 +#, fuzzy +msgid "All displays follow mode" +msgstr "Викривлений дисплей" + +#: src/gtk/connected-device.ui:572 +msgid "Follow mode moves all displays, not just the focused one." +msgstr "" + +#: src/gtk/connected-device.ui:588 +msgid "Follow mode movement tracking" +msgstr "" + +#: src/gtk/connected-device.ui:589 +msgid "Choose which movements should be tracked in follow mode." +msgstr "" + +#: src/gtk/connected-device.ui:604 +msgid "Horizontal" +msgstr "" + +#: src/gtk/connected-device.ui:624 +msgid "Vertical" +msgstr "" + +#: src/gtk/connected-device.ui:644 +msgid "Tilt/roll" +msgstr "" + +#: src/gtk/connected-device.ui:662 msgid "Movement look-ahead" msgstr "Прогнозування руху" -#: src/gtk/connected-device.ui:534 +#: src/gtk/connected-device.ui:663 msgid "" "Counteracts input lag by predicting head-tracking position ahead of render " "time. Stick with default unless virtual display drags behind your head " @@ -430,26 +482,18 @@ msgstr "" "віртуальний дисплей відстає від рухів вашої голови, випереджає або дуже " "тремтить." -#: src/gtk/connected-device.ui:552 +#: src/gtk/connected-device.ui:681 msgid "Default" msgstr "За замовчуванням" -#: src/gtk/connected-device.ui:564 +#: src/gtk/connected-device.ui:693 msgid "Text Scaling" msgstr "" -#: src/gtk/connected-device.ui:565 +#: src/gtk/connected-device.ui:694 msgid "Scaling text below 1.0 will simulate a higher resolution display" msgstr "" -#: src/gtk/connected-device.ui:595 -msgid "Enable multi-tap detection" -msgstr "" - -#: src/gtk/connected-device.ui:596 -msgid "Enables double-tap to recenter and triple-tap to recalibrate." -msgstr "" - #: src/gtk/display-distance-dialog.ui:9 msgid "Show full range" msgstr "" diff --git a/ui/po/zh_CN.po b/ui/po/zh_CN.po index 9dea24e..d32b7c1 100644 --- a/ui/po/zh_CN.po +++ b/ui/po/zh_CN.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-03-06 15:32-0800\n" +"POT-Creation-Date: 2025-03-07 20:36-0800\n" "PO-Revision-Date: 2024-08-02 20:55-0700\n" "Last-Translator: \n" "Language-Team: Chinese (simplified) \n" @@ -26,36 +26,36 @@ msgstr "切换到并排模式,并将显示宽度翻倍。" msgid "This feature is not currently supported for your device." msgstr "您的设备目前不支援此功能。" -#: src/connecteddevice.py:125 +#: src/connecteddevice.py:134 #, fuzzy msgid "Set Focused Display Distance" msgstr "显示距离" -#: src/connecteddevice.py:126 +#: src/connecteddevice.py:135 msgid "Use a closer value so the display zooms in when you look at it." msgstr "" -#: src/connecteddevice.py:133 +#: src/connecteddevice.py:142 #, fuzzy msgid "Set All Displays Distance" msgstr "显示距离" -#: src/connecteddevice.py:134 +#: src/connecteddevice.py:143 msgid "Use a farther value so the displays are zoomed out when you look away." msgstr "" -#: src/connecteddevice.py:232 +#: src/connecteddevice.py:248 msgid "" "Unable to add virtual displays on this machine. xdg-desktop-portal is " "required." msgstr "" -#: src/connecteddevice.py:266 +#: src/connecteddevice.py:282 #, fuzzy msgid "Focused display" msgstr "显示距离" -#: src/connecteddevice.py:272 +#: src/connecteddevice.py:288 #, fuzzy msgid "All displays" msgstr "曲面显示" @@ -317,9 +317,7 @@ msgid "Viewport horizontal offset" msgstr "" #: src/gtk/connected-device.ui:293 -msgid "" -"By default, the viewport will center on the primary display. Use this slider " -"to move the viewport to the left or right." +msgid "Move the viewport to the left or right of its default position." msgstr "" #: src/gtk/connected-device.ui:322 @@ -327,9 +325,7 @@ msgid "Viewport vertical offset" msgstr "" #: src/gtk/connected-device.ui:323 -msgid "" -"By default, the viewport will center on the primary display. Use this slider " -"to move the viewport up or down." +msgid "Move the viewport up or down from its default position." msgstr "" #: src/gtk/connected-device.ui:359 src/gtk/connected-device.ui:365 @@ -377,41 +373,97 @@ msgstr "切换跟随模式快捷键" msgid "Quickly toggle follow mode." msgstr "快速切换跟随模式。" -#: src/gtk/connected-device.ui:491 src/gtk/connected-device.ui:497 +#: src/gtk/connected-device.ui:491 src/gtk/connected-device.ui:501 msgid "Advanced Settings" msgstr "高级设定" -#: src/gtk/connected-device.ui:500 +#: src/gtk/connected-device.ui:505 msgid "Find optimal display config" msgstr "寻找最佳显示设定" -#: src/gtk/connected-device.ui:501 +#: src/gtk/connected-device.ui:506 msgid "" "Automatically modify the glasses display configuration for maximum " "resolution and best scaling when plugged in." msgstr "连接时,可以自动修改眼镜显示设定以表现出最大解析度和最佳的对比。" -#: src/gtk/connected-device.ui:511 +#: src/gtk/connected-device.ui:516 msgid "Use highest refresh rate" msgstr "使用最高刷新率" -#: src/gtk/connected-device.ui:512 +#: src/gtk/connected-device.ui:517 msgid "Refresh rate may affect performance, disable this to set it manually." msgstr "刷新率可能会影响性能,禁用此功能即可手动设置。" -#: src/gtk/connected-device.ui:522 +#: src/gtk/connected-device.ui:527 +msgid "Center on glasses' display" +msgstr "" + +#: src/gtk/connected-device.ui:528 +msgid "" +"Center the viewport on the glasses' display, even if the display is not in " +"the middle." +msgstr "" + +#: src/gtk/connected-device.ui:538 msgid "Always primary display" msgstr "每次设置为主要显示" -#: src/gtk/connected-device.ui:523 +#: src/gtk/connected-device.ui:539 msgid "Automatically set the glasses as the primary display when plugged in." msgstr "连接时,自动将眼镜设置为主要显示。" -#: src/gtk/connected-device.ui:533 +#: src/gtk/connected-device.ui:549 +#, fuzzy +msgid "Remove virtual displays on disable" +msgstr "曲面显示" + +#: src/gtk/connected-device.ui:550 +msgid "Automatically remove virtual displays when the XR effect is disabled." +msgstr "" + +#: src/gtk/connected-device.ui:560 +msgid "Enable multi-tap detection" +msgstr "" + +#: src/gtk/connected-device.ui:561 +msgid "Enables double-tap to recenter and triple-tap to recalibrate." +msgstr "" + +#: src/gtk/connected-device.ui:571 +#, fuzzy +msgid "All displays follow mode" +msgstr "曲面显示" + +#: src/gtk/connected-device.ui:572 +msgid "Follow mode moves all displays, not just the focused one." +msgstr "" + +#: src/gtk/connected-device.ui:588 +msgid "Follow mode movement tracking" +msgstr "" + +#: src/gtk/connected-device.ui:589 +msgid "Choose which movements should be tracked in follow mode." +msgstr "" + +#: src/gtk/connected-device.ui:604 +msgid "Horizontal" +msgstr "" + +#: src/gtk/connected-device.ui:624 +msgid "Vertical" +msgstr "" + +#: src/gtk/connected-device.ui:644 +msgid "Tilt/roll" +msgstr "" + +#: src/gtk/connected-device.ui:662 msgid "Movement look-ahead" msgstr "移动预测" -#: src/gtk/connected-device.ui:534 +#: src/gtk/connected-device.ui:663 msgid "" "Counteracts input lag by predicting head-tracking position ahead of render " "time. Stick with default unless virtual display drags behind your head " @@ -420,26 +472,18 @@ msgstr "" "透过预测头部追踪位置,提前于渲染时间进行预测来抵消输入延迟。除非虚拟显示滞后" "于头部,提前跳动或非常抖动,请尽量使用默认设置。" -#: src/gtk/connected-device.ui:552 +#: src/gtk/connected-device.ui:681 msgid "Default" msgstr "默认" -#: src/gtk/connected-device.ui:564 +#: src/gtk/connected-device.ui:693 msgid "Text Scaling" msgstr "字体大小比例" -#: src/gtk/connected-device.ui:565 +#: src/gtk/connected-device.ui:694 msgid "Scaling text below 1.0 will simulate a higher resolution display" msgstr "字体缩放小于1.0,将模拟解析度更高的显示效果" -#: src/gtk/connected-device.ui:595 -msgid "Enable multi-tap detection" -msgstr "" - -#: src/gtk/connected-device.ui:596 -msgid "Enables double-tap to recenter and triple-tap to recalibrate." -msgstr "" - #: src/gtk/display-distance-dialog.ui:9 msgid "Show full range" msgstr "" diff --git a/ui/src/configmanager.py b/ui/src/configmanager.py index 983d4bc..0324d35 100644 --- a/ui/src/configmanager.py +++ b/ui/src/configmanager.py @@ -7,6 +7,9 @@ class ConfigManager(GObject.GObject): __gproperties__ = { 'breezy-desktop-enabled': (bool, 'Breezy Desktop Enabled', 'Whether Breezy Desktop is enabled', False, GObject.ParamFlags.READWRITE), 'multi-tap-enabled': (bool, 'Multi-Tap Enabled', 'Whether Multi-Tap is enabled', False, GObject.ParamFlags.READWRITE), + 'follow-track-roll': (bool, 'Follow Track Roll', 'Whether to follow on the roll axis', False, GObject.ParamFlags.READWRITE), + 'follow-track-pitch': (bool, 'Follow Track Pitch', 'Whether to follow on the pitch axis', True, GObject.ParamFlags.READWRITE), + 'follow-track-yaw': (bool, 'Follow Track Yaw', 'Whether to follow on the yaw axis', True, GObject.ParamFlags.READWRITE) } _instance = None @@ -29,6 +32,9 @@ class ConfigManager(GObject.GObject): self.ipc = XRDriverIPC.get_instance() self.breezy_desktop_enabled = None self.multi_tap_enabled = None + self.follow_track_roll = None + self.follow_track_pitch = None + self.follow_track_yaw = None self._running = True self._refresh_config() @@ -43,6 +49,15 @@ class ConfigManager(GObject.GObject): if self.config['multi_tap_enabled'] != self.multi_tap_enabled: self.set_property('multi-tap-enabled', self.config['multi_tap_enabled']) + if self.config['smooth_follow_track_roll'] != self.follow_track_roll: + self.set_property('follow-track-roll', self.config['smooth_follow_track_roll']) + + if self.config['smooth_follow_track_pitch'] != self.follow_track_pitch: + self.set_property('follow-track-pitch', self.config['smooth_follow_track_pitch']) + + if self.config['smooth_follow_track_yaw'] != self.follow_track_yaw: + self.set_property('follow-track-yaw', self.config['smooth_follow_track_yaw']) + if self._running: threading.Timer(1.0, self._refresh_config).start() def _is_breezy_desktop_enabled(self): @@ -65,14 +80,44 @@ class ConfigManager(GObject.GObject): self.ipc.write_config(self.config) self.multi_tap_enabled = value + def _set_follow_track_roll(self, value): + if self.follow_track_roll != value: + self.config['smooth_follow_track_roll'] = value + self.ipc.write_config(self.config) + self.follow_track_roll = value + + def _set_follow_track_pitch(self, value): + if self.follow_track_pitch != value: + self.config['smooth_follow_track_pitch'] = value + self.ipc.write_config(self.config) + self.follow_track_pitch = value + + def _set_follow_track_yaw(self, value): + if self.follow_track_yaw != value: + self.config['smooth_follow_track_yaw'] = value + self.ipc.write_config(self.config) + self.follow_track_yaw = value + def do_set_property(self, prop, value): if prop.name == 'breezy-desktop-enabled': self._set_breezy_desktop_enabled(value) elif prop.name == 'multi-tap-enabled': self._set_multi_tap_enabled(value) + elif prop.name == 'follow-track-roll': + self._set_follow_track_roll(value) + elif prop.name == 'follow-track-pitch': + self._set_follow_track_pitch(value) + elif prop.name == 'follow-track-yaw': + self._set_follow_track_yaw(value) def do_get_property(self, prop): if prop.name == 'breezy-desktop-enabled': return self.breezy_desktop_enabled elif prop.name == 'multi-tap-enabled': - return self.multi_tap_enabled \ No newline at end of file + return self.multi_tap_enabled + elif prop.name == 'follow-track-roll': + return self.follow_track_roll + elif prop.name == 'follow-track-pitch': + return self.follow_track_pitch + elif prop.name == 'follow-track-yaw': + return self.follow_track_yaw \ No newline at end of file diff --git a/ui/src/connecteddevice.py b/ui/src/connecteddevice.py index 465a790..396653e 100644 --- a/ui/src/connecteddevice.py +++ b/ui/src/connecteddevice.py @@ -48,7 +48,9 @@ class ConnectedDevice(Gtk.Box): toggle_display_distance_shortcut_label = Gtk.Template.Child() reassign_toggle_follow_shortcut_button = Gtk.Template.Child() toggle_follow_shortcut_label = Gtk.Template.Child() + headset_display_as_viewport_center_switch = Gtk.Template.Child() headset_as_primary_switch = Gtk.Template.Child() + remove_virtual_displays_on_disable_switch = Gtk.Template.Child() use_optimal_monitor_config_switch = Gtk.Template.Child() use_highest_refresh_rate_switch = Gtk.Template.Child() movement_look_ahead_scale = Gtk.Template.Child() @@ -56,6 +58,10 @@ class ConnectedDevice(Gtk.Box): text_scaling_scale = Gtk.Template.Child() text_scaling_adjustment = Gtk.Template.Child() enable_multi_tap_switch = Gtk.Template.Child() + legacy_follow_mode_switch = Gtk.Template.Child() + follow_track_yaw_switch = Gtk.Template.Child() + follow_track_pitch_switch = Gtk.Template.Child() + follow_track_roll_switch = Gtk.Template.Child() monitor_wrapping_scheme_menu = Gtk.Template.Child() monitor_spacing_scale = Gtk.Template.Child() monitor_spacing_adjustment = Gtk.Template.Child() @@ -97,11 +103,14 @@ class ConnectedDevice(Gtk.Box): self.settings.bind('follow-threshold', self.follow_threshold_adjustment, 'value', Gio.SettingsBindFlags.DEFAULT) # self.settings.bind('widescreen-mode', self.widescreen_mode_switch, 'active', Gio.SettingsBindFlags.DEFAULT) # self.settings.bind('curved-display', self.curved_display_switch, 'active', Gio.SettingsBindFlags.DEFAULT) + self.settings.bind('headset-display-as-viewport-center', self.headset_display_as_viewport_center_switch, 'active', Gio.SettingsBindFlags.DEFAULT) self.settings.bind('headset-as-primary', self.headset_as_primary_switch, 'active', Gio.SettingsBindFlags.DEFAULT) + self.settings.bind('remove-virtual-displays-on-disable', self.remove_virtual_displays_on_disable_switch, 'active', Gio.SettingsBindFlags.DEFAULT) self.settings.bind('use-optimal-monitor-config', self.use_optimal_monitor_config_switch, 'active', Gio.SettingsBindFlags.DEFAULT) self.settings.bind('use-highest-refresh-rate', self.use_highest_refresh_rate_switch, 'active', Gio.SettingsBindFlags.DEFAULT) # self.settings.bind('fast-sbs-mode-switching', self.fast_sbs_mode_switch, 'active', Gio.SettingsBindFlags.DEFAULT) self.settings.bind('look-ahead-override', self.movement_look_ahead_adjustment, 'value', Gio.SettingsBindFlags.DEFAULT) + self.settings.bind('legacy-follow-mode', self.legacy_follow_mode_switch, 'active', Gio.SettingsBindFlags.DEFAULT) self.settings.bind('monitor-spacing', self.monitor_spacing_adjustment, 'value', Gio.SettingsBindFlags.DEFAULT) self.settings.bind('viewport-offset-x', self.viewport_offset_x_adjustment, 'value', Gio.SettingsBindFlags.DEFAULT) self.settings.bind('viewport-offset-y', self.viewport_offset_y_adjustment, 'value', Gio.SettingsBindFlags.DEFAULT) @@ -152,8 +161,10 @@ class ConnectedDevice(Gtk.Box): self.config_manager = ConfigManager.get_instance() self.config_manager.connect('notify::breezy-desktop-enabled', self._handle_enabled_config) - self.config_manager.bind_property('multi-tap-enabled', self.enable_multi_tap_switch, 'active', Gio.SettingsBindFlags.DEFAULT) - self.enable_multi_tap_switch.connect('notify::active', lambda widget, param: self.config_manager.set_property('multi-tap-enabled', widget.get_active())) + self._bind_switch_to_config(self.enable_multi_tap_switch, 'multi-tap-enabled') + self._bind_switch_to_config(self.follow_track_roll_switch, 'follow-track-roll') + self._bind_switch_to_config(self.follow_track_pitch_switch, 'follow-track-pitch') + self._bind_switch_to_config(self.follow_track_yaw_switch, 'follow-track-yaw') self.use_optimal_monitor_config_switch.connect('notify::active', self._refresh_use_optimal_monitor_config) @@ -176,6 +187,11 @@ class ConnectedDevice(Gtk.Box): if appinfo.get_id() == 'gnome-display-panel.desktop': self._settings_displays_app_info = appinfo break + + def _bind_switch_to_config(self, switch, config_key): + self.config_manager.bind_property(config_key, switch, 'active', Gio.SettingsBindFlags.DEFAULT) + switch.set_active(self.config_manager.get_property(config_key)) + switch.connect('notify::active', lambda widget, param: self.config_manager.set_property(config_key, widget.get_active())) def _handle_zoom_on_focus_switch_changed(self, widget, param): display_distance = self.settings.get_double('display-distance') @@ -316,9 +332,6 @@ class ConnectedDevice(Gtk.Box): def _on_virtual_displays_update_gui(self, virtual_display_manager): effect_enabled = self.effect_enable_switch.get_active() virtual_displays_present = len(virtual_display_manager.displays) > 0 - self.launch_display_settings_button.set_visible( - self._settings_displays_app_info is not None and virtual_displays_present - ) self.monitor_wrapping_scheme_menu.set_sensitive(effect_enabled and virtual_displays_present) self.monitor_spacing_scale.set_sensitive(effect_enabled and virtual_displays_present) @@ -335,7 +348,9 @@ class ConnectedDevice(Gtk.Box): new_displays_by_pid[display['pid']] = child self.top_features_group.add(self.launch_display_settings_row) - self.launch_display_settings_row.set_visible(len(virtual_display_manager.displays) > 0) + self.launch_display_settings_row.set_visible( + self._settings_displays_app_info is not None and virtual_displays_present + ) self.virtual_displays_by_pid = new_displays_by_pid diff --git a/ui/src/gtk/connected-device.ui b/ui/src/gtk/connected-device.ui index d5caea1..5511598 100644 --- a/ui/src/gtk/connected-device.ui +++ b/ui/src/gtk/connected-device.ui @@ -290,7 +290,7 @@ Viewport horizontal offset - By default, the viewport will center on the primary display. Use this slider to move the viewport to the left or right. + Move the viewport to the left or right of its default position. 3 @@ -320,7 +320,7 @@ Viewport vertical offset - By default, the viewport will center on the primary display. Use this slider to move the viewport up or down. + Move the viewport up or down from its default position. 3 @@ -492,9 +492,14 @@ applications-system-symbolic + 2 + 20 + 20 + 20 Advanced Settings + 450 Find optimal display config @@ -517,6 +522,17 @@ + + + Center on glasses' display + Center the viewport on the glasses' display, even if the display is not in the middle. + + + 3 + + + + Always primary display @@ -528,6 +544,119 @@ + + + Remove virtual displays on disable + Automatically remove virtual displays when the XR effect is disabled. + + + 3 + + + + + + + Enable multi-tap detection + Enables double-tap to recenter and triple-tap to recalibrate. + + + 3 + + + + + + + All displays follow mode + Follow mode moves all displays, not just the focused one. + + + 3 + + + + + + + + + + 700 + + + Follow mode movement tracking + Choose which movements should be tracked in follow mode. + + + 30 + 20 + 20 + start + + + vertical + 10 + center + 80 + + + Horizontal + 3 + + + + + 3 + center + + + + + + + vertical + 10 + center + 80 + + + Vertical + 3 + + + + + 3 + center + + + + + + + vertical + 10 + center + 80 + + + Tilt/roll + 3 + + + + + 3 + center + + + + + + + + Movement look-ahead @@ -590,17 +719,6 @@ - - - Enable multi-tap detection - Enables double-tap to recenter and triple-tap to recalibrate. - - - 3 - - - - diff --git a/ui/src/main.py b/ui/src/main.py index c1472b7..e415388 100644 --- a/ui/src/main.py +++ b/ui/src/main.py @@ -111,7 +111,9 @@ class BreezydesktopApplication(Adw.Application): logo_icon_name='com.xronlinux.BreezyDesktop', version=self.version, authors=['Wayne Heaney'], - copyright='© 2024 Wayne Heaney') + copyright='© 2025 Wayne Heaney', + license_type=Gtk.License.GPL_3_0, + wrap_license=True) about.present() def on_license_action(self, widget, _): diff --git a/ui/src/window.py b/ui/src/window.py index 330e743..e537222 100644 --- a/ui/src/window.py +++ b/ui/src/window.py @@ -101,6 +101,11 @@ class BreezydesktopWindow(Gtk.ApplicationWindow): else: self.main_content.append(self.connected_device) self.connected_device.set_device_name(state_manager.connected_device_name) + + self.set_resizable(True) + self.set_default_size(1, 1) + + return False def _on_license_button_clicked(self, widget): dialog = LicenseDialog()