diff --git a/.gitignore b/.gitignore index d50ac39..51c61dc 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,3 @@ __pycache__ gschemas.compiled out/ *.po~ -gnome-44-max/ diff --git a/.gitmodules b/.gitmodules index e7a2906..4c613c2 100644 --- a/.gitmodules +++ b/.gitmodules @@ -11,3 +11,11 @@ [submodule "ui/modules/PyXRLinuxDriverIPC"] path = ui/modules/PyXRLinuxDriverIPC url = https://github.com/wheaney/PyXRLinuxDriverIPC.git +[submodule "gnome/backports/gnome-44-max"] + path = gnome/backports/gnome-44-max + url = https://github.com/wheaney/breezy-desktop + branch = gnome-44-max +[submodule "gnome/backports/gnome-45"] + path = gnome/backports/gnome-45 + url = https://github.com/wheaney/breezy-desktop + branch = gnome-45 diff --git a/VERSION b/VERSION index 3d45b5c..e6f474a 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.0.14 +2.0.15 \ No newline at end of file diff --git a/bin/breezy_gnome_setup b/bin/breezy_gnome_setup index fc0c3a0..f93c496 100755 --- a/bin/breezy_gnome_setup +++ b/bin/breezy_gnome_setup @@ -23,7 +23,13 @@ check_command "gnome-shell" ARCH=$(uname -m) FILE_NAME="breezyGNOME-$ARCH.tar.gz" -if [ "$(gnome-shell --version | cut -d' ' -f3 | cut -d'.' -f1)" -lt 45 ]; then +GNOME_VERSION=$(gnome-shell --version | cut -d' ' -f3 | cut -d'.' -f1) +VERSION_SPECIFIC_FILENAME="breezyGNOME-$GNOME_VERSION-$ARCH.tar.gz" +LATEST_RELEASE=$(curl -s "https://api.github.com/repos/wheaney/breezy-desktop/releases/latest") +if echo "$LATEST_RELEASE" | jq -e --arg filename "$VERSION_SPECIFIC_FILENAME" '.assets[] | select(.name == $filename)' > /dev/null; then + echo "Performing setup for GNOME $GNOME_VERSION ($ARCH)" + FILE_NAME=$VERSION_SPECIFIC_FILENAME +elif [ "$GNOME_VERSION" -lt 45 ]; then echo "Performing setup for GNOME 44 and below ($ARCH)" FILE_NAME="breezyGNOME-44-max-$ARCH.tar.gz" else @@ -32,7 +38,6 @@ fi start_dir=$(pwd) - # create temp directory tmp_dir=$(mktemp -d -t breezy-gnome-XXXXXXXXXX) pushd $tmp_dir > /dev/null diff --git a/bin/package_gnome b/bin/package_gnome index ce388c3..0750131 100755 --- a/bin/package_gnome +++ b/bin/package_gnome @@ -9,27 +9,29 @@ ARCH=${ARCH:-$(uname -m)} SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd) ROOT_DIR=$(realpath $SCRIPT_DIR/..) VULKAN_DIR=$ROOT_DIR/vulkan +UI_DIR=$ROOT_DIR/ui +XR_DRIVER_DIR=$ROOT_DIR/modules/XRLinuxDriver -if [ -z "$GNOME_44_MAX" ]; then +if [ -z "$GNOME_BACKPORT" ]; then # standard build for GNOME 45 and up echo "Building Breezy GNOME for $ARCH, GNOME versions 45 and up" GNOME_DIR=$ROOT_DIR/gnome BUILD_FILE_NAME=breezyGNOME-$ARCH.tar.gz else - # special patched build for GNOME 44 and below - echo "Building Breezy GNOME for $ARCH, GNOME versions 44 and below" + # special build process for backports + echo "Building Breezy GNOME backport \"$GNOME_BACKPORT\" for $ARCH" - # use a special directory for the GNOME 44 max build, ignored by git - GNOME_DIR=$ROOT_DIR/gnome-44-max - rm -rf $GNOME_DIR - mkdir $GNOME_DIR - BUILD_FILE_NAME=breezyGNOME-44-max-$ARCH.tar.gz + # strip the prefix "gnome-" from the backport name, if it's there + GNOME_BACKPORT_NAME=${GNOME_BACKPORT#gnome-} - # copy the GNOME extension source code to the new directory and apply - # a patch that makes it compatible with GNOME 44 and below - cp -ra $ROOT_DIR/gnome/* $GNOME_DIR + GNOME_DIR=$ROOT_DIR/gnome/backports/$GNOME_BACKPORT/gnome + UI_DIR=$ROOT_DIR/gnome/backports/$GNOME_BACKPORT/ui + BUILD_FILE_NAME=breezyGNOME-$GNOME_BACKPORT_NAME-$ARCH.tar.gz rm -rf $GNOME_DIR/build - git apply gnome-44-max.patch + + pushd $GNOME_DIR + git submodule update --init + popd fi GNOME_BUILD_DIR=$GNOME_DIR/build @@ -42,7 +44,6 @@ PACKAGE_DIR=$GNOME_BUILD_DIR/breezy_gnome rm -rf $PACKAGE_DIR mkdir -p $PACKAGE_DIR -XR_DRIVER_DIR=$ROOT_DIR/modules/XRLinuxDriver source $XR_DRIVER_DIR/bin/inject_ua # if a custom_banner image exists, copy it over the sombrero one @@ -92,9 +93,9 @@ pushd $GNOME_DIR/src GNOME_MANIFEST_LINE=$(find -L . -type f ! -name "*.compiled" -exec sha256sum {} \; | sort | sha256sum | sed 's/ .*//') popd -UI_BUILD_ARTIFACT=ui/out/breezyUI-$ARCH.tar.gz +UI_BUILD_ARTIFACT=$UI_DIR/out/breezyUI-$ARCH.tar.gz if [ ! -e "$UI_BUILD_ARTIFACT" ] || [ "$1" == "--rebuild-ui" ] || [ "$1" == "--rebuild-all" ]; then - pushd ui + pushd $UI_DIR bin/package $ARCH popd fi diff --git a/gnome-44-max.patch b/gnome-44-max.patch deleted file mode 100644 index 2b12d3c..0000000 --- a/gnome-44-max.patch +++ /dev/null @@ -1,477 +0,0 @@ -diff --git a/gnome-44-max/bin/setup b/gnome-44-max/bin/setup -index bd4c8b5..2cf0a03 100755 ---- a/gnome-44-max/bin/setup -+++ b/gnome-44-max/bin/setup -@@ -84,8 +84,10 @@ echo "Copying the manifest file to ${BREEZY_GNOME_DATA_DIR}" - mkdir -p $BREEZY_GNOME_DATA_DIR - cp manifest $BREEZY_GNOME_DATA_DIR - --echo "Installing the breezydesktop@xronlinux.com GNOME extension" --gnome-extensions install --force breezydesktop@xronlinux.com.shell-extension.zip -+EXTENSION_UUID="breezydesktop@xronlinux.com" -+echo "Installing the $EXTENSION_UUID GNOME extension" -+gnome-extensions install --force "$EXTENSION_UUID.shell-extension.zip" -+glib-compile-schemas "$GNOME_SHELL_DATA_DIR/extensions/$EXTENSION_UUID/schemas" - - echo "Installing the Breezy Desktop UI application" - cp -r breezy_ui/data/* $XDG_DATA_HOME -diff --git a/gnome-44-max/src/cursor.js b/gnome-44-max/src/cursor.js -index 36ad7ee..41102a0 100644 ---- a/gnome-44-max/src/cursor.js -+++ b/gnome-44-max/src/cursor.js -@@ -15,11 +15,11 @@ - // You should have received a copy of the GNU General Public License - // along with this program. If not, see . - --import Clutter from 'gi://Clutter'; --import GObject from 'gi://GObject'; -+const Clutter = imports.gi.Clutter; -+const GObject = imports.gi.GObject; - - // Copied almost verbatim from ui/magnifier.js. --export const MouseSpriteContent = GObject.registerClass({ -+var MouseSpriteContent = GObject.registerClass({ - Implements: [Clutter.Content], - }, class MouseSpriteContent extends GObject.Object { - _init() { -diff --git a/gnome-44-max/src/cursormanager.js b/gnome-44-max/src/cursormanager.js -index dd4a77d..bbb8872 100644 ---- a/gnome-44-max/src/cursormanager.js -+++ b/gnome-44-max/src/cursormanager.js -@@ -1,11 +1,15 @@ --import Clutter from 'gi://Clutter'; --import Meta from 'gi://Meta'; --import * as PointerWatcher from 'resource:///org/gnome/shell/ui/pointerWatcher.js'; --import { MouseSpriteContent } from './cursor.js'; --import Globals from './globals.js'; -+const Clutter = imports.gi.Clutter; -+const Meta = imports.gi.Meta; -+const PointerWatcher = imports.ui.pointerWatcher; -+ -+const ExtensionUtils = imports.misc.extensionUtils; -+const Me = ExtensionUtils.getCurrentExtension(); -+ -+const Globals = Me.imports.globals; -+const { MouseSpriteContent } = Me.imports.cursor; - - // Taken from https://github.com/jkitching/soft-brightness-plus --export class CursorManager { -+var CursorManager = class CursorManager { - constructor(targetMonitors, refreshRate) { - this._targetMonitors = targetMonitors; - this._refreshRate = refreshRate; -diff --git a/gnome-44-max/src/devicedatastream.js b/gnome-44-max/src/devicedatastream.js -index e396403..f047067 100644 ---- a/gnome-44-max/src/devicedatastream.js -+++ b/gnome-44-max/src/devicedatastream.js -@@ -1,8 +1,12 @@ --import Gio from 'gi://Gio'; --import GObject from 'gi://GObject'; -+const Gio = imports.gi.Gio; -+const GObject = imports.gi.GObject; - --import Globals from './globals.js'; --import { -+const ExtensionUtils = imports.misc.extensionUtils; -+const Me = ExtensionUtils.getCurrentExtension(); -+ -+const Globals = Me.imports.globals; -+const { isValidKeepAlive, getEpochSec, toSec } = Me.imports.time; -+const { - dataViewEnd, - dataViewUint8, - dataViewBigUint, -@@ -14,8 +18,7 @@ import { - FLOAT_SIZE, - UINT_SIZE, - UINT8_SIZE --} from "./ipc.js"; --import { isValidKeepAlive, getEpochSec, toSec } from "./time.js"; -+} = Me.imports.ipc; - - const IPC_FILE_PATH = "/dev/shm/breezy_desktop_imu"; - const KEEPALIVE_REFRESH_INTERVAL_SEC = 1; -@@ -75,7 +78,7 @@ function nextDebugIMUQuaternion(counter) { - return [x, y, z, w]; - } - --export const DeviceDataStream = GObject.registerClass({ -+var DeviceDataStream = GObject.registerClass({ - Properties: { - '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 b3363d5..d5be026 100644 ---- a/gnome-44-max/src/extension.js -+++ b/gnome-44-max/src/extension.js -@@ -1,28 +1,32 @@ --import Gio from 'gi://Gio'; --import GLib from 'gi://GLib'; --import Meta from 'gi://Meta'; --import Shell from 'gi://Shell'; --import St from 'gi://St'; -- --import { CursorManager } from './cursormanager.js'; --import { DeviceDataStream } from './devicedatastream.js'; --import Globals from './globals.js'; --import { Logger } from './logger.js'; --import { MonitorManager, NESTED_MONITOR_PRODUCT, SUPPORTED_MONITOR_PRODUCTS, VIRTUAL_MONITOR_PRODUCT } from './monitormanager.js'; --import { VirtualDisplaysActor } from './virtualdisplaysactor.js'; -- --import {Extension} from 'resource:///org/gnome/shell/extensions/extension.js'; --import * as Main from 'resource:///org/gnome/shell/ui/main.js'; -+const Clutter = imports.gi.Clutter; -+const Gio = imports.gi.Gio; -+const GLib = imports.gi.GLib; -+const Meta = imports.gi.Meta; -+const Shell = imports.gi.Shell; -+const St = imports.gi.St; -+ -+const Main = imports.ui.main; -+ -+const ExtensionUtils = imports.misc.extensionUtils; -+const Me = ExtensionUtils.getCurrentExtension(); -+ -+const Globals = Me.imports.globals; -+const { CursorManager } = Me.imports.cursormanager; -+const { DeviceDataStream } = Me.imports.devicedatastream; -+const { Logger } = Me.imports.logger; -+const { MonitorManager, NESTED_MONITOR_PRODUCT, SUPPORTED_MONITOR_PRODUCTS, VIRTUAL_MONITOR_PRODUCT } = Me.imports.monitormanager; -+const { VirtualDisplaysActor } = Me.imports.virtualdisplaysactor; -+ - - const BIN_HOME = GLib.getenv('XDG_BIN_HOME') || GLib.build_filenamev([GLib.get_home_dir(), '.local', 'bin']); - const XDG_CLI_PATH = GLib.build_filenamev([BIN_HOME, 'xr_driver_cli']); - const ALT_CLI_PATH = '/usr/bin/xr_driver_cli'; - --export default class BreezyDesktopExtension extends Extension { -- constructor(metadata, uuid) { -- super(metadata, uuid); -- -- this.settings = this.getSettings(); -+class BreezyDesktopExtension { -+ constructor(extensionPath) { -+ this.path = extensionPath; -+ -+ this.settings = ExtensionUtils.getSettings(); - - // Set/destroyed by enable/disable - this._cursor_manager = null; -@@ -645,6 +649,6 @@ export default class BreezyDesktopExtension extends Extension { - } - } - --function init() { -- return new Extension(); -+function init(meta) { -+ return new BreezyDesktopExtension(meta.path); - } -diff --git a/gnome-44-max/src/globals.js b/gnome-44-max/src/globals.js -index f11451c..4b5c65b 100644 ---- a/gnome-44-max/src/globals.js -+++ b/gnome-44-max/src/globals.js -@@ -1,7 +1,6 @@ --const Globals = { -+var Globals = { - logger: null, - ipc_file: null, // Gio.File instance, file exists if set - extension_dir: null, // string path - data_stream: null, // DeviceDataStream instance --} --export default Globals; -\ No newline at end of file -+} -\ No newline at end of file -diff --git a/gnome-44-max/src/ipc.js b/gnome-44-max/src/ipc.js -index a729368..d5f7ab0 100644 ---- a/gnome-44-max/src/ipc.js -+++ b/gnome-44-max/src/ipc.js -@@ -1,30 +1,30 @@ --export const UINT8_SIZE = 1; --export const BOOL_SIZE = UINT8_SIZE; --export const UINT_SIZE = 4; --export const FLOAT_SIZE = 4; -+var UINT8_SIZE = 1; -+var BOOL_SIZE = UINT8_SIZE; -+var UINT_SIZE = 4; -+var FLOAT_SIZE = 4; - --export const DATA_VIEW_INFO_OFFSET_INDEX = 0; --export const DATA_VIEW_INFO_SIZE_INDEX = 1; --export const DATA_VIEW_INFO_COUNT_INDEX = 2; -+var DATA_VIEW_INFO_OFFSET_INDEX = 0; -+var DATA_VIEW_INFO_SIZE_INDEX = 1; -+var DATA_VIEW_INFO_COUNT_INDEX = 2; - - // computes the end offset, exclusive --export function dataViewEnd(dataViewInfo) { -+function dataViewEnd(dataViewInfo) { - return dataViewInfo[DATA_VIEW_INFO_OFFSET_INDEX] + dataViewInfo[DATA_VIEW_INFO_SIZE_INDEX] * dataViewInfo[DATA_VIEW_INFO_COUNT_INDEX]; - } - --export function dataViewUint8(dataView, dataViewInfo) { -+function dataViewUint8(dataView, dataViewInfo) { - return dataView.getUint8(dataViewInfo[DATA_VIEW_INFO_OFFSET_INDEX]); - } - --export function dataViewUint(dataView, dataViewInfo) { -+function dataViewUint(dataView, dataViewInfo) { - return dataView.getUint32(dataViewInfo[DATA_VIEW_INFO_OFFSET_INDEX], true); - } - --export function dataViewBigUint(dataView, dataViewInfo) { -+function dataViewBigUint(dataView, dataViewInfo) { - return Number(dataView.getBigUint64(dataViewInfo[DATA_VIEW_INFO_OFFSET_INDEX], true)); - } - --export function dataViewUint32Array(dataView, dataViewInfo) { -+function dataViewUint32Array(dataView, dataViewInfo) { - const uintArray = [] - let offset = dataViewInfo[DATA_VIEW_INFO_OFFSET_INDEX]; - for (let i = 0; i < dataViewInfo[DATA_VIEW_INFO_COUNT_INDEX]; i++) { -@@ -34,7 +34,7 @@ export function dataViewUint32Array(dataView, dataViewInfo) { - return uintArray; - } - --export function dataViewUint8Array(dataView, dataViewInfo) { -+function dataViewUint8Array(dataView, dataViewInfo) { - const uintArray = [] - let offset = dataViewInfo[DATA_VIEW_INFO_OFFSET_INDEX]; - for (let i = 0; i < dataViewInfo[DATA_VIEW_INFO_SIZE_INDEX] * dataViewInfo[DATA_VIEW_INFO_COUNT_INDEX]; i++) { -@@ -44,11 +44,11 @@ export function dataViewUint8Array(dataView, dataViewInfo) { - return uintArray; - } - --export function dataViewFloat(dataView, dataViewInfo) { -+function dataViewFloat(dataView, dataViewInfo) { - return dataView.getFloat32(dataViewInfo[DATA_VIEW_INFO_OFFSET_INDEX], true); - } - --export function dataViewFloatArray(dataView, dataViewInfo) { -+function dataViewFloatArray(dataView, dataViewInfo) { - const floatArray = [] - let offset = dataViewInfo[DATA_VIEW_INFO_OFFSET_INDEX]; - for (let i = 0; i < dataViewInfo[DATA_VIEW_INFO_COUNT_INDEX]; i++) { -diff --git a/gnome-44-max/src/logger.js b/gnome-44-max/src/logger.js -index 5bdf115..138a98a 100644 ---- a/gnome-44-max/src/logger.js -+++ b/gnome-44-max/src/logger.js -@@ -14,15 +14,15 @@ - // You should have received a copy of the GNU General Public License - // along with this program. If not, see . - --import * as Config from 'resource:///org/gnome/shell/misc/config.js'; --import Gio from 'gi://Gio'; --import GLib from 'gi://GLib'; --import GObject from 'gi://GObject'; --import System from 'system'; -+const Config = imports.misc.config; -+const Gio = imports.gi.Gio; -+const GLib = imports.gi.GLib; -+const GObject = imports.gi.GObject; -+const System = imports.system; - - const LOG_DIR_NAME = 'breezy_gnome/logs/gjs'; - --export const Logger = GObject.registerClass({ -+var Logger = GObject.registerClass({ - GTypeName: 'Logger', - Properties: { - 'title': GObject.ParamSpec.string( -diff --git a/gnome-44-max/src/math.js b/gnome-44-max/src/math.js -index f1c9983..9a98c7b 100644 ---- a/gnome-44-max/src/math.js -+++ b/gnome-44-max/src/math.js -@@ -1,9 +1,9 @@ --export function degreeToRadian(degree) { -+function degreeToRadian(degree) { - return degree * Math.PI / 180; - } - - // FOV in radians is spherical, so doesn't follow Pythagoras' theorem --export function diagonalToCrossFOVs(diagonalFOVRadians, aspectRatio) { -+function diagonalToCrossFOVs(diagonalFOVRadians, aspectRatio) { - // first convert from a spherical FOV to a diagonal FOV on a flat plane at a generic distance of 1.0 - const flatDiagonalFOV = 2 * Math.tan(diagonalFOVRadians / 2); - -diff --git a/gnome-44-max/src/metadata.json b/gnome-44-max/src/metadata.json -index 0f8073b..bc26f97 100644 ---- a/gnome-44-max/src/metadata.json -+++ b/gnome-44-max/src/metadata.json -@@ -5,7 +5,7 @@ - "settings-schema": "com.xronlinux.BreezyDesktop", - "session-modes": ["user"], - "shell-version": [ -- "45", "46", "47" -+ "42", "43", "44" - ], - "url": "https://github.com/wheaney/breezy-desktop" - } -\ No newline at end of file -diff --git a/gnome-44-max/src/monitormanager.js b/gnome-44-max/src/monitormanager.js -index 4c57171..080924d 100644 ---- a/gnome-44-max/src/monitormanager.js -+++ b/gnome-44-max/src/monitormanager.js -@@ -16,16 +16,19 @@ - // You should have received a copy of the GNU General Public License - // along with this program. If not, see . - --import Gio from 'gi://Gio'; --import GObject from 'gi://GObject'; -+const Gio = imports.gi.Gio; -+const GObject = imports.gi.GObject; - --import * as Main from 'resource:///org/gnome/shell/ui/main.js'; -+const Main = imports.ui.main; - --import Globals from './globals.js'; -+const ExtensionUtils = imports.misc.extensionUtils; -+const Me = ExtensionUtils.getCurrentExtension(); - --export const NESTED_MONITOR_PRODUCT = 'MetaMonitor'; --export const VIRTUAL_MONITOR_PRODUCT = 'Virtual remote monitor'; --export const SUPPORTED_MONITOR_PRODUCTS = [ -+const Globals = Me.imports.globals; -+ -+var NESTED_MONITOR_PRODUCT = 'MetaMonitor'; -+var VIRTUAL_MONITOR_PRODUCT = 'Virtual remote monitor'; -+var SUPPORTED_MONITOR_PRODUCTS = [ - 'VITURE', - 'nreal air', - 'Air', -@@ -58,7 +61,7 @@ function getDisplayConfigProxy(extPath) { - return cachedDisplayConfigProxy; - } - --export function newDisplayConfig(extPath, callback) { -+function newDisplayConfig(extPath, callback) { - const DisplayConfigProxy = getDisplayConfigProxy(extPath); - new DisplayConfigProxy( - Gio.DBus.session, -@@ -366,7 +369,7 @@ function performOptimalModeCheck(displayConfigProxy, connectorName, headsetAsPri - } - - // Monitor change handling --export const MonitorManager = GObject.registerClass({ -+var MonitorManager = GObject.registerClass({ - Properties: { - 'use-optimal-monitor-config': GObject.ParamSpec.boolean( - 'use-optimal-monitor-config', -diff --git a/gnome-44-max/src/shader.js b/gnome-44-max/src/shader.js -index f70c96d..352be40 100644 ---- a/gnome-44-max/src/shader.js -+++ b/gnome-44-max/src/shader.js -@@ -1,6 +1,6 @@ --import Gio from 'gi://Gio'; -+const Gio = imports.gi.Gio; - --export function getShaderSource(path) { -+function getShaderSource(path) { - const file = Gio.file_new_for_path(path); - const data = file.load_contents(null); - -diff --git a/gnome-44-max/src/time.js b/gnome-44-max/src/time.js -index 8c17207..fdfdac1 100644 ---- a/gnome-44-max/src/time.js -+++ b/gnome-44-max/src/time.js -@@ -1,11 +1,11 @@ --export function getEpochSec() { -+function getEpochSec() { - return toSec(Date.now()); - } - --export function toSec(milliseconds) { -+function toSec(milliseconds) { - return Math.floor(milliseconds / 1000); - } - --export function isValidKeepAlive(dateSec) { -+function isValidKeepAlive(dateSec) { - return Math.abs(getEpochSec() - dateSec) <= 1; - } -\ No newline at end of file -diff --git a/gnome-44-max/src/virtualdisplayeffect.js b/gnome-44-max/src/virtualdisplayeffect.js -index 26be71e..42da807 100644 ---- a/gnome-44-max/src/virtualdisplayeffect.js -+++ b/gnome-44-max/src/virtualdisplayeffect.js -@@ -1,16 +1,18 @@ --import Clutter from 'gi://Clutter' --import Cogl from 'gi://Cogl'; --import GLib from 'gi://GLib'; --import GObject from 'gi://GObject'; --import Shell from 'gi://Shell'; -+const Clutter = imports.gi.Clutter; -+const Cogl = imports.gi.Cogl; -+const GLib = imports.gi.GLib; -+const GObject = imports.gi.GObject; -+const Shell = imports.gi.Shell; - --import Globals from './globals.js'; --import { degreeToRadian, diagonalToCrossFOVs } from './math.js'; -+const ExtensionUtils = imports.misc.extensionUtils; -+const Me = ExtensionUtils.getCurrentExtension(); - -+const Globals = Me.imports.globals; -+const { degreeToRadian, diagonalToCrossFOVs } = Me.imports.math; - - // these need to mirror the values in XRLinuxDriver - // https://github.com/wheaney/XRLinuxDriver/blob/main/src/plugins/smooth_follow.c#L31 --export const SMOOTH_FOLLOW_SLERP_TIMELINE_MS = 1000; -+var SMOOTH_FOLLOW_SLERP_TIMELINE_MS = 1000; - const SMOOTH_FOLLOW_SLERP_FACTOR = Math.pow(1-0.999, 1/SMOOTH_FOLLOW_SLERP_TIMELINE_MS); - - // this mirror's how the driver's slerp function progresses so our effect will match it -@@ -26,7 +28,7 @@ function lookAheadMS(imuDateMs, lookAheadCfg, override) { - return (override === -1 ? lookAheadCfg[0] : override) + dataAge; - } - --export const VirtualDisplayEffect = GObject.registerClass({ -+var VirtualDisplayEffect = GObject.registerClass({ - Properties: { - 'monitor-index': GObject.ParamSpec.int( - 'monitor-index', -diff --git a/gnome-44-max/src/virtualdisplaysactor.js b/gnome-44-max/src/virtualdisplaysactor.js -index 538fa8c..fa134f1 100644 ---- a/gnome-44-max/src/virtualdisplaysactor.js -+++ b/gnome-44-max/src/virtualdisplaysactor.js -@@ -1,18 +1,19 @@ --import Clutter from 'gi://Clutter' --import Cogl from 'gi://Cogl'; --import GdkPixbuf from 'gi://GdkPixbuf'; --import GLib from 'gi://GLib'; --import GObject from 'gi://GObject'; --import Mtk from 'gi://Mtk'; --import Shell from 'gi://Shell'; --import St from 'gi://St'; -+const Clutter = imports.gi.Clutter; -+const Cogl = imports.gi.Cogl; -+const GdkPixbuf = imports.gi.GdkPixbuf; -+const GLib = imports.gi.GLib; -+const GObject = imports.gi.GObject; -+const Shell = imports.gi.Shell; -+const St = imports.gi.St; - --import { VirtualDisplayEffect, SMOOTH_FOLLOW_SLERP_TIMELINE_MS } from './virtualdisplayeffect.js'; --import { degreeToRadian, diagonalToCrossFOVs } from './math.js'; -+const Main = imports.ui.main; - --import * as Main from 'resource:///org/gnome/shell/ui/main.js'; -+const ExtensionUtils = imports.misc.extensionUtils; -+const Me = ExtensionUtils.getCurrentExtension(); - --import Globals from './globals.js'; -+const { VirtualDisplayEffect, SMOOTH_FOLLOW_SLERP_TIMELINE_MS } = Me.imports.virtualdisplayeffect; -+const Globals = Me.imports.globals; -+const { degreeToRadian, diagonalToCrossFOVs } = Me.imports.math; - - function applyQuaternionToVector(vector, quaternion) { - const t = [ -@@ -394,7 +395,7 @@ function verticalMonitorSort(monitors) { - }); - } - --export const VirtualDisplaysActor = GObject.registerClass({ -+var VirtualDisplaysActor = GObject.registerClass({ - Properties: { - 'target-monitor': GObject.ParamSpec.jsobject( - 'target-monitor', diff --git a/gnome/backports/gnome-44-max b/gnome/backports/gnome-44-max new file mode 160000 index 0000000..1445122 --- /dev/null +++ b/gnome/backports/gnome-44-max @@ -0,0 +1 @@ +Subproject commit 144512201119b6b0522e59a44c7f83461f77f80d diff --git a/gnome/backports/gnome-45 b/gnome/backports/gnome-45 new file mode 160000 index 0000000..ce6f7dd --- /dev/null +++ b/gnome/backports/gnome-45 @@ -0,0 +1 @@ +Subproject commit ce6f7dd7e473100cf15d97e657cff54d0c17f62d diff --git a/gnome/src/extension.js b/gnome/src/extension.js index b3363d5..891bd16 100644 --- a/gnome/src/extension.js +++ b/gnome/src/extension.js @@ -233,6 +233,7 @@ export default class BreezyDesktopExtension extends Extension { virtual_monitors: virtualMonitors, monitor_wrapping_scheme: this.settings.get_string('monitor-wrapping-scheme'), monitor_spacing: this.settings.get_int('monitor-spacing'), + curved_display: this.settings.get_boolean('curved-display'), 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'), @@ -277,6 +278,7 @@ export default class BreezyDesktopExtension extends Extension { this._effect_settings_bindings = [ 'monitor-wrapping-scheme', + 'curved-display', 'headset-display-as-viewport-center', 'viewport-offset-x', 'viewport-offset-y', diff --git a/gnome/src/math.js b/gnome/src/math.js index f1c9983..0eebd6c 100644 --- a/gnome/src/math.js +++ b/gnome/src/math.js @@ -17,4 +17,49 @@ export function diagonalToCrossFOVs(diagonalFOVRadians, aspectRatio) { horizontal: 2 * Math.atan(Math.tan(flatHorizontalFOV / 2)), vertical: 2 * Math.atan(Math.tan(flatVerticalFOV / 2)) } +} + +const segmentsPerRadian = 20.0 / degreeToRadian(90.0); + +// displays are placed around a circle, these functions help determine radians and distances from the original +// FOV measurements scaled to the display dimensions +export const fovConversionFns = { + // convert curved FOV for flat displays + flat: { + // distance to an edge is the hypothenuse of the triangle where the opposite side is half the width of the reference fov screen + centerToFovEdgeDistance: (centerDistance, fovLength) => Math.sqrt(Math.pow(fovLength / 2, 2) + Math.pow(centerDistance, 2)), + fovEdgeToScreenCenterDistance: (edgeDistance, screenLength) => Math.sqrt(Math.pow(edgeDistance, 2) - Math.pow(screenLength / 2, 2)), + lengthToRadians: (fovRadians, fovLength, screenEdgeDistance, toLength) => Math.asin(toLength / 2 / screenEdgeDistance) * 2, + angleToLength: (fovRadians, fovLength, screenDistance, toAngleOpposite, toAngleAdjacent) => { + return toAngleOpposite / toAngleAdjacent * screenDistance + }, + radiansToSegments: (screenRadians) => 1 + }, + + // convert curved FOV for curved displays, scaling either involves no change or is linear + curved: { + centerToFovEdgeDistance: (centerDistance, fovLength) => centerDistance, + fovEdgeToScreenCenterDistance: (edgeDistance, screenLength) => edgeDistance, + lengthToRadians: (fovRadians, fovLength, screenEdgeDistance, toLength) => fovRadians / fovLength * toLength, + angleToLength: (fovRadians, fovLength, screenDistance, toAngleOpposite, toAngleAdjacent) => fovLength / fovRadians * Math.atan2(toAngleOpposite, toAngleAdjacent), + radiansToSegments: (screenRadians) => Math.ceil(screenRadians * segmentsPerRadian) + } +} + +export const applyQuaternionToVector = (vector, quaternion) => { + const t = [ + 2.0 * (quaternion[1] * vector[2] - quaternion[2] * vector[1]), + 2.0 * (quaternion[2] * vector[0] - quaternion[0] * vector[2]), + 2.0 * (quaternion[0] * vector[1] - quaternion[1] * vector[0]) + ]; + return [ + vector[0] + quaternion[3] * t[0] + quaternion[1] * t[2] - quaternion[2] * t[1], + vector[1] + quaternion[3] * t[1] + quaternion[2] * t[0] - quaternion[0] * t[2], + vector[2] + quaternion[3] * t[2] + quaternion[0] * t[1] - quaternion[1] * t[0] + ]; +} + +export const normalizeVector = (vector) => { + 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]; } \ No newline at end of file diff --git a/gnome/src/metadata.json b/gnome/src/metadata.json index 0f8073b..f3064c8 100644 --- a/gnome/src/metadata.json +++ b/gnome/src/metadata.json @@ -5,7 +5,7 @@ "settings-schema": "com.xronlinux.BreezyDesktop", "session-modes": ["user"], "shell-version": [ - "45", "46", "47" + "46", "47", "48" ], "url": "https://github.com/wheaney/breezy-desktop" } \ No newline at end of file diff --git a/gnome/src/virtualdisplayeffect.js b/gnome/src/virtualdisplayeffect.js index 26be71e..eac98f2 100644 --- a/gnome/src/virtualdisplayeffect.js +++ b/gnome/src/virtualdisplayeffect.js @@ -5,7 +5,7 @@ import GObject from 'gi://GObject'; import Shell from 'gi://Shell'; import Globals from './globals.js'; -import { degreeToRadian, diagonalToCrossFOVs } from './math.js'; +import { degreeToRadian, diagonalToCrossFOVs, fovConversionFns } from './math.js'; // these need to mirror the values in XRLinuxDriver @@ -26,6 +26,89 @@ function lookAheadMS(imuDateMs, lookAheadCfg, override) { return (override === -1 ? lookAheadCfg[0] : override) + dataAge; } +// Create a mesh of vertices in a pattern suitable for TRIANGLE_STRIP +function createVertexMesh(fovDetails, monitorDetails, positionVectorNWU) { + let fovConversions = fovDetails.curvedDisplay ? fovConversionFns.curved : fovConversionFns.flat; + const sideEdgeDistancePixels = fovConversions.centerToFovEdgeDistance( + fovDetails.completeScreenDistancePixels, + fovDetails.widthPixels + ); + const horizontalRadians = fovConversions.lengthToRadians( + fovDetails.defaultDistanceHorizontalRadians, + fovDetails.widthPixels, + sideEdgeDistancePixels, + monitorDetails.width + ); + + const topEdgeDistancePixels = fovConversions.centerToFovEdgeDistance( + fovDetails.completeScreenDistancePixels, + fovDetails.heightPixels + ); + const verticalRadians = fovConversions.lengthToRadians( + fovDetails.defaultDistanceVerticalRadians, + fovDetails.heightPixels, + topEdgeDistancePixels, + monitorDetails.height + ); + + let horizontalWrap = fovDetails.monitorWrappingScheme === 'horizontal'; + let verticalWrap = fovDetails.monitorWrappingScheme === 'vertical'; + const xSegments = horizontalWrap ? fovConversions.radiansToSegments(horizontalRadians) : 1; + const ySegments = verticalWrap ? fovConversions.radiansToSegments(verticalRadians) : 1; + + const texXLeft = 0; + const texYTop = 0; + const texXRight = 1; + const texYBottom = 1; + + // curve the monitor placments based on the fov, wrapping, and texture coordinates + const radius = fovDetails.completeScreenDistancePixels; + function v(s, t) { + let zOffsetPixels = 0 + + const xOffset = s - 0.5; + let xOffsetPixels = monitorDetails.width * xOffset; + if (fovDetails.curvedDisplay && horizontalWrap) { + const xOffsetRadians = xOffset * horizontalRadians; + xOffsetPixels = Math.sin(xOffsetRadians) * radius; + zOffsetPixels = radius - Math.cos(xOffsetRadians) * radius; + } + const x = -positionVectorNWU[1] + xOffsetPixels; + + const yOffset = 0.5 - t; + let yOffsetPixels = monitorDetails.height * yOffset; + if (fovDetails.curvedDisplay && verticalWrap) { + const yOffsetRadians = yOffset * verticalRadians; + yOffsetPixels = Math.sin(yOffsetRadians) * radius; + zOffsetPixels = radius - Math.cos(yOffsetRadians) * radius; + } + const y = positionVectorNWU[2] + yOffsetPixels; + const z = -positionVectorNWU[0] + zOffsetPixels; + + return new Cogl.VertexP3T2({x, y, z, s, t}); + } + + const vertices = []; + for (let j = 0; j < ySegments; j++) { + const texY0 = texYTop - (texYTop - texYBottom) * j / ySegments; + const texY1 = texYTop - (texYTop - texYBottom) * (j + 1) / ySegments; + + const evenRow = j % 2 === 0; + for (let i = 0; i <= xSegments; i++) { + // even rows stitch left-to-right, odd rows stitch right-to-left + const colIndex = evenRow ? i : xSegments - i; + + const texX = texXLeft + (texXRight - texXLeft) * colIndex / xSegments; + + // bottom then top + vertices.push(v(texX, texY1)); + vertices.push(v(texX, texY0)); + } + } + + return vertices; +} + export const VirtualDisplayEffect = GObject.registerClass({ Properties: { 'monitor-index': GObject.ParamSpec.int( @@ -35,12 +118,24 @@ export const VirtualDisplayEffect = GObject.registerClass({ GObject.ParamFlags.READWRITE, 0, 100, 0 ), + 'monitor-details': GObject.ParamSpec.jsobject( + 'monitor-details', + 'Monitor Details', + 'Details about the monitor that this effect is applied to', + GObject.ParamFlags.READWRITE + ), 'monitor-placements': GObject.ParamSpec.jsobject( 'monitor-placements', 'Monitor Placements', 'Target and virtual monitor placement details, as relevant to rendering', GObject.ParamFlags.READWRITE ), + 'fov-details': GObject.ParamSpec.jsobject( + 'fov-details', + 'FOV Details', + 'Details about the field of view of the headset', + GObject.ParamFlags.READWRITE + ), 'target-monitor': GObject.ParamSpec.jsobject( 'target-monitor', 'Target Monitor', @@ -67,20 +162,6 @@ export const VirtualDisplayEffect = GObject.registerClass({ GObject.ParamFlags.READWRITE, 0, Number.MAX_SAFE_INTEGER, 0 ), - 'width': GObject.ParamSpec.int( - 'width', - 'Width', - 'Width of the viewport', - GObject.ParamFlags.READWRITE, - 1, 10000, 1920 - ), - 'height': GObject.ParamSpec.int( - 'height', - 'Height', - 'Height of the viewport', - GObject.ParamFlags.READWRITE, - 1, 10000, 1080 - ), 'focused-monitor-index': GObject.ParamSpec.int( 'focused-monitor-index', 'Focused Monitor Index', @@ -173,10 +254,11 @@ export const VirtualDisplayEffect = GObject.registerClass({ this.connect('notify::display-distance', this._update_display_distance.bind(this)); this.connect('notify::focused-monitor-index', this._update_display_distance.bind(this)); - this.connect('notify::monitor-placements', this._update_display_position_uniforms.bind(this)); - this.connect('notify::monitor-wrapping-scheme', this._update_display_position_uniforms.bind(this)); + this.connect('notify::monitor-placements', this._update_display_position.bind(this)); this.connect('notify::show-banner', this._handle_banner_update.bind(this)); this.connect('notify::smooth-follow-enabled', this._handle_smooth_follow_enabled_update.bind(this)); + + this._update_display_position(); } _is_focused() { @@ -194,7 +276,7 @@ export const VirtualDisplayEffect = GObject.registerClass({ if (this.no_distance_ease) { this._current_display_distance = desired_distance; - this._update_display_position_uniforms(); + this._update_display_position(); this.no_distance_ease = false; return; } @@ -231,7 +313,7 @@ export const VirtualDisplayEffect = GObject.registerClass({ this._current_display_distance = this._distance_ease_start + (1 - Math.cos(progress * Math.PI)) / 2 * (this._distance_ease_target - this._distance_ease_start); - this._update_display_position_uniforms(); + this._update_display_position(); }).bind(this)); this._distance_ease_timeline.start(); @@ -266,14 +348,14 @@ export const VirtualDisplayEffect = GObject.registerClass({ // this relies on the slerp function tuned to reach 100% in about 1 second const progress = smoothFollowSlerpProgress(toggleTimeOffsetMs); this._current_follow_ease_progress = from + (to - from) * progress; - this._update_display_position_uniforms(); + this._update_display_position(); }).bind(this)); this._follow_ease_timeline.connect('completed', (() => { this._current_follow_ease_progress = to; this._use_smooth_follow_origin = false; this.smooth_follow_toggle_epoch_ms = 0; - this._update_display_position_uniforms(); + this._update_display_position(); }).bind(this)); this._follow_ease_timeline.start(); @@ -294,35 +376,25 @@ export const VirtualDisplayEffect = GObject.registerClass({ } } - // follow_ease transitions this from a rotated display (0.0) to a centered/focused display (1.0) - _update_display_position_uniforms() { + // follow_ease transitions this from a rotated display (progress 0.0) to a centered/focused display (progress 1.0) + _update_display_position() { // this is in NWU coordinates - const monitorPlacement = this.monitor_placements[this.monitor_index]; - - // use the center vector with the distance applied to determine how much to move each coordinate, so they all move uniformly - const inverseAppliedDistance = 1.0 - this._current_display_distance / this.display_distance_default; - const distanceDelta = monitorPlacement.centerNoRotate.map(coord => coord * inverseAppliedDistance); - const noRotationVector = monitorPlacement.topLeftNoRotate.map((coord, index) => coord - distanceDelta[index]); - - // convert to CoGL's east-down-south coordinates and apply display distance + const monitorPlacement = this.monitor_placements[this.monitor_index]; + const noRotationVector = monitorPlacement.centerNoRotate.map(coord => coord * this._current_display_distance / this.display_distance_default); const inverse_follow_ease = 1.0 - this._current_follow_ease_progress; - if (this._current_follow_ease_progress === 0.0) { - this.set_uniform_float(this.get_uniform_location("u_display_position"), 3, - [-noRotationVector[1], -noRotationVector[2], -noRotationVector[0]]); - } else { - const focusDistanceNorth = monitorPlacement.centerOrigin[0] * inverseAppliedDistance; - const centerOriginVector = {...monitorPlacement.centerOrigin}; - centerOriginVector[0] -= focusDistanceNorth; - + let finalPositionVector = noRotationVector; + if (this._current_follow_ease_progress > 0.0) { // slerp from the rotated display to the centered display - const followVector = noRotationVector.map((coord, index) => coord * inverse_follow_ease + centerOriginVector[index] * this._current_follow_ease_progress); - this.set_uniform_float(this.get_uniform_location("u_display_position"), 3, - [-followVector[1], -followVector[2], -followVector[0]]); + finalPositionVector = noRotationVector.map(coord => coord * inverse_follow_ease); + finalPositionVector[0] = noRotationVector[0]; } + this._vertices = createVertexMesh(this.fov_details, this.monitor_details, finalPositionVector); const rotation_radians = this.monitor_placements[this.monitor_index].rotationAngleRadians; - this.set_uniform_float(this.get_uniform_location("u_rotation_x_radians"), 1, [rotation_radians.x * inverse_follow_ease]); - this.set_uniform_float(this.get_uniform_location("u_rotation_y_radians"), 1, [rotation_radians.y * inverse_follow_ease]); + if (this._initialized) { + this.set_uniform_float(this.get_uniform_location("u_rotation_x_radians"), 1, [rotation_radians.x * inverse_follow_ease]); + this.set_uniform_float(this.get_uniform_location("u_rotation_y_radians"), 1, [rotation_radians.y * inverse_follow_ease]); + } } _handle_banner_update() { @@ -349,7 +421,6 @@ export const VirtualDisplayEffect = GObject.registerClass({ uniform vec4 u_look_ahead_cfg; uniform mat4 u_projection_matrix; uniform float u_fov_vertical_radians; - uniform vec3 u_display_position; uniform float u_rotation_x_radians; uniform float u_rotation_y_radians; uniform vec2 u_display_resolution; @@ -415,23 +486,6 @@ export const VirtualDisplayEffect = GObject.registerClass({ if (!u_show_banner) { float aspect_ratio = u_display_resolution.x / u_display_resolution.y; - float cogl_position_width = cogl_position_mystery_factor * aspect_ratio / u_actor_to_display_ratios.y; - float cogl_position_height = cogl_position_width / aspect_ratio; - - float pos_z_factor = aspect_ratio / u_actor_to_display_ratios.y; - vec3 pos_factors = vec3( - cogl_position_width / u_display_resolution.x, - cogl_position_height / u_display_resolution.y, - cogl_position_mystery_factor * pos_z_factor / u_display_resolution.x - ); - world_pos.x -= u_display_position.x * pos_factors.x; - world_pos.y -= u_display_position.y * pos_factors.y; - world_pos.z = u_display_position.z * pos_factors.z; - - // if the perspective includes more than just our viewport actor, move vertices towards the center of the perspective so they'll be properly rotated - world_pos.x += u_actor_to_display_offsets.x * cogl_position_width / 2; - world_pos.y -= u_actor_to_display_offsets.y * cogl_position_height / 2; - vec3 complete_vector = applyXRotationToVector(world_pos.xyz, u_rotation_x_radians); complete_vector = applyYRotationToVector(complete_vector, u_rotation_y_radians); @@ -447,10 +501,9 @@ export const VirtualDisplayEffect = GObject.registerClass({ vec3 look_ahead_vector = applyLookAhead(rotated_vector_t0, velocity_t0, effective_look_ahead_ms); - vec3 adjusted_lens_vector = u_lens_vector * pos_factors; - world_pos = vec4(look_ahead_vector - adjusted_lens_vector, world_pos.w); + world_pos = vec4(look_ahead_vector - u_lens_vector, world_pos.w); - world_pos.z /= pos_z_factor; + world_pos.z /= aspect_ratio / u_actor_to_display_ratios.y; world_pos.x *= u_actor_to_display_ratios.y / u_actor_to_display_ratios.x; @@ -473,28 +526,29 @@ export const VirtualDisplayEffect = GObject.registerClass({ } vfunc_paint_target(node, paintContext) { - if (this.imu_snapshots) { - if (!this._initialized) { - const aspect = this.target_monitor.width / this.target_monitor.height; - const fovRadians = diagonalToCrossFOVs(degreeToRadian(Globals.data_stream.device_data.displayFov), aspect); - const projection_matrix = this.perspective( - fovRadians.horizontal, - aspect, - 0.0001, - 1000.0 - ); - this.set_uniform_matrix(this.get_uniform_location("u_projection_matrix"), false, 4, projection_matrix); - this.set_uniform_float(this.get_uniform_location("u_fov_vertical_radians"), 1, [fovRadians.vertical]); - this.set_uniform_float(this.get_uniform_location("u_display_resolution"), 2, [this.target_monitor.width, this.target_monitor.height]); - this.set_uniform_float(this.get_uniform_location("u_look_ahead_cfg"), 4, Globals.data_stream.device_data.lookAheadCfg); - this.set_uniform_float(this.get_uniform_location("u_actor_to_display_ratios"), 2, this.actor_to_display_ratios); - this.set_uniform_float(this.get_uniform_location("u_actor_to_display_offsets"), 2, this.actor_to_display_offsets); - this.set_uniform_float(this.get_uniform_location("u_lens_vector"), 3, this.lens_vector); - this._update_display_position_uniforms(); - this._handle_banner_update(); - this._initialized = true; - } + if (!this._initialized) { + this._initialized = true; + const aspect = this.target_monitor.width / this.target_monitor.height; + const fovRadians = diagonalToCrossFOVs(degreeToRadian(Globals.data_stream.device_data.displayFov), aspect); + const projection_matrix = this.perspective( + fovRadians.horizontal, + aspect, + 1.0, + 10000.0 + ); + this.set_uniform_matrix(this.get_uniform_location("u_projection_matrix"), false, 4, projection_matrix); + this.set_uniform_float(this.get_uniform_location("u_fov_vertical_radians"), 1, [fovRadians.vertical]); + this.set_uniform_float(this.get_uniform_location("u_display_resolution"), 2, [this.target_monitor.width, this.target_monitor.height]); + this.set_uniform_float(this.get_uniform_location("u_look_ahead_cfg"), 4, Globals.data_stream.device_data.lookAheadCfg); + this.set_uniform_float(this.get_uniform_location("u_actor_to_display_ratios"), 2, this.actor_to_display_ratios); + this.set_uniform_float(this.get_uniform_location("u_actor_to_display_offsets"), 2, this.actor_to_display_offsets); + this.set_uniform_float(this.get_uniform_location("u_lens_vector"), 3, this.lens_vector); + this._update_display_position(); + this._handle_banner_update(); + } + + if (this.imu_snapshots && !this.show_banner) { let lookAheadSet = false; if (!this._use_smooth_follow_origin && (!this.smooth_follow_enabled || this._is_focused() || this._current_follow_ease_progress > 0.0)) { if (this._current_follow_ease_progress > 0.0 && this._current_follow_ease_progress < 1.0) { @@ -518,8 +572,14 @@ export const VirtualDisplayEffect = GObject.registerClass({ Cogl.PipelineFilter.LINEAR ); } - } - super.vfunc_paint_target(node, paintContext); + // skip the actor's default rendering, draw our custom vertices instead + const framebuffer = paintContext.get_framebuffer(); + const coglContext = framebuffer.get_context(); + const primitive = Cogl.Primitive.new_p3t2(coglContext, Cogl.VerticesMode.TRIANGLE_STRIP, this._vertices); + primitive.draw(framebuffer, this.get_pipeline()); + } else { + super.vfunc_paint_target(node, paintContext); + } } }); \ No newline at end of file diff --git a/gnome/src/virtualdisplaysactor.js b/gnome/src/virtualdisplaysactor.js index 538fa8c..9099189 100644 --- a/gnome/src/virtualdisplaysactor.js +++ b/gnome/src/virtualdisplaysactor.js @@ -3,35 +3,21 @@ import Cogl from 'gi://Cogl'; import GdkPixbuf from 'gi://GdkPixbuf'; import GLib from 'gi://GLib'; import GObject from 'gi://GObject'; -import Mtk from 'gi://Mtk'; import Shell from 'gi://Shell'; import St from 'gi://St'; import { VirtualDisplayEffect, SMOOTH_FOLLOW_SLERP_TIMELINE_MS } from './virtualdisplayeffect.js'; -import { degreeToRadian, diagonalToCrossFOVs } from './math.js'; +import { applyQuaternionToVector, degreeToRadian, diagonalToCrossFOVs, fovConversionFns, normalizeVector } from './math.js'; import * as Main from 'resource:///org/gnome/shell/ui/main.js'; import Globals from './globals.js'; -function applyQuaternionToVector(vector, quaternion) { - const t = [ - 2.0 * (quaternion[1] * vector[2] - quaternion[2] * vector[1]), - 2.0 * (quaternion[2] * vector[0] - quaternion[0] * vector[2]), - 2.0 * (quaternion[0] * vector[1] - quaternion[1] * vector[0]) - ]; - return [ - vector[0] + quaternion[3] * t[0] + quaternion[1] * t[2] - quaternion[2] * t[1], - vector[1] + quaternion[3] * t[1] + quaternion[2] * t[0] - quaternion[0] * t[2], - vector[2] + quaternion[3] * t[2] + quaternion[0] * t[1] - quaternion[1] * t[0] - ]; -} - // if nothing is in focus, take it as soon as it crosses into the monitor's bounds const FOCUS_THRESHOLD = 0.95 / 2.0; // if we leave the monitor with some margin, unfocus even if no other monitor is in focus -const UNFOCUS_THRESHOLD = 1.2 / 2.0; +const UNFOCUS_THRESHOLD = 1.1 / 2.0; /** * Find the vector in the array that's closest to the quaternion rotation @@ -49,46 +35,56 @@ function findFocusedMonitor(quaternion, monitorVectors, currentFocusedIndex, foc const lookVector = [1.0, 0.0, 0.0]; // NWU vector pointing to the center of the screen const rotatedLookVector = applyQuaternionToVector(lookVector, quaternion); - const xzMagnitude = Math.sqrt(rotatedLookVector[0]*rotatedLookVector[0] + rotatedLookVector[2]*rotatedLookVector[2]); - const lookUpTheta = Math.atan2(rotatedLookVector[2], rotatedLookVector[0]); + // TODO - right now we're using the curved functions to figure out distances even for flat monitors + // because it will account for the monitors facing towards us, but this will lose some accuracy + const upConversionFns = fovDetails.monitorWrappingScheme === 'vertical' ? fovConversionFns.curved : fovConversionFns.flat; + const lookUpPixels = upConversionFns.angleToLength( + fovDetails.defaultDistanceVerticalRadians, + fovDetails.heightPixels, + fovDetails.completeScreenDistancePixels, + rotatedLookVector[2], + rotatedLookVector[0] + ); + const westConversionFns = fovDetails.monitorWrappingScheme === 'horizontal' ? fovConversionFns.curved : fovConversionFns.flat; + const lookWestPixels = westConversionFns.angleToLength( + fovDetails.defaultDistanceHorizontalRadians, + fovDetails.widthPixels, + fovDetails.completeScreenDistancePixels, + rotatedLookVector[1], + rotatedLookVector[0] + ); let closestIndex = -1; let closestDistance = Infinity; let currentFocusedDistance = Infinity; // find the vector closest to the rotated look vector - monitorVectors.forEach((vector, index) => { + monitorVectors.forEach((monitorVector, index) => { const monitor = monitorsDetails[index]; const monitorAspectRatio = monitor.width / monitor.height; - // weight the rotation about the y-axis between the two vectors, by the aspect ratio - const vectorUpTheta = Math.atan2(vector[2], vector[0]); - const upDelta = lookUpTheta - vectorUpTheta; - const newLookUpTheta = Math.tan(Math.max( - -Math.PI, - Math.min( - Math.PI, - upDelta * monitorAspectRatio + vectorUpTheta - ) - )); - const weightedLookVector = [ - xzMagnitude * Math.cos(newLookUpTheta), - rotatedLookVector[1], - xzMagnitude * Math.sin(newLookUpTheta) - ]; - - // find the distance between the monitor vector and weighted look vector - const distance = Math.acos( - Math.min(1.0, Math.max(-1.0, - vector[0] * weightedLookVector[0] + - vector[1] * weightedLookVector[1] + - vector[2] * weightedLookVector[2] - )) + // weight the up distance by the aspect ratio + const vectorUpPixels = upConversionFns.angleToLength( + fovDetails.defaultDistanceVerticalRadians, + fovDetails.heightPixels, + fovDetails.completeScreenDistancePixels, + monitorVector[2], + monitorVector[0] ); + const upDeltaPixels = (lookUpPixels - vectorUpPixels) * monitorAspectRatio; - // TODO - this assumes the display is facing towards us, need to account for looking in the "flat" direction - const distanceFromCenterPixels = fovDetails.completeScreenDistancePixels * Math.tan(distance); - const distanceFromCenterSizeRatio = distanceFromCenterPixels / monitor.width; + const vectorWestPixels = westConversionFns.angleToLength( + fovDetails.defaultDistanceHorizontalRadians, + fovDetails.widthPixels, + fovDetails.completeScreenDistancePixels, + monitorVector[1], + monitorVector[0] + ); + const westDeltaPixels = lookWestPixels - vectorWestPixels; + const totalDeltaPixels = Math.sqrt(upDeltaPixels * upDeltaPixels + westDeltaPixels * westDeltaPixels); + + // threshold is a percentage of width, and height was already properly weighted + const distanceFromCenterSizeRatio = totalDeltaPixels / monitor.width; if (currentFocusedIndex === index) { currentFocusedDistance = distanceFromCenterSizeRatio * focusedMonitorDistance; @@ -114,7 +110,7 @@ function findFocusedMonitor(quaternion, monitorVectors, currentFocusedIndex, foc /*** * @returns {Object} - containing `begin`, `center`, and `end` radians for rotating the given monitor */ -function monitorWrap(cachedMonitorRadians, radiusPixels, monitorSpacingPixels, monitorBeginPixel, monitorLengthPixels) { +function monitorWrap(cachedMonitorRadians, monitorSpacingPixels, monitorBeginPixel, monitorLengthPixels, lengthToRadianFn) { let closestWrapPixel = monitorBeginPixel; let closestWrap = cachedMonitorRadians[monitorBeginPixel]; if (closestWrap === undefined) { @@ -140,12 +136,11 @@ function monitorWrap(cachedMonitorRadians, radiusPixels, monitorSpacingPixels, m closestWrap = cachedMonitorRadians[closestWrapPixel]; } - const spacingRadians = Math.asin(monitorSpacingPixels / 2 / radiusPixels) * 2; + const spacingRadians = lengthToRadianFn(monitorSpacingPixels); if (closestWrapPixel !== monitorBeginPixel) { // there's a gap between the cached wrap value and this one const gapPixels = monitorBeginPixel - closestWrapPixel; - const gapHalfRadians = Math.asin(gapPixels / 2 / radiusPixels); - const gapRadians = gapHalfRadians * 2; + const gapRadians = lengthToRadianFn(gapPixels); // use Math.floor so if it's negative (this monitor is to the left of or above the closest) it will always // compenstate for the spacing that's needed at the right/bottom @@ -157,9 +152,9 @@ function monitorWrap(cachedMonitorRadians, radiusPixels, monitorSpacingPixels, m cachedMonitorRadians[closestWrapPixel] = closestWrap; } - const monitorHalfRadians = Math.asin(monitorLengthPixels / 2 / radiusPixels); - const centerRadians = closestWrap + monitorHalfRadians; - const endRadians = centerRadians + monitorHalfRadians; + const monitorRadians = lengthToRadianFn(monitorLengthPixels); + const centerRadians = closestWrap + monitorRadians / 2; + const endRadians = closestWrap + monitorRadians; // since we're computing the end values for this monitor, cache them too in case they line up with a future monitor const nextMonitorPixel = monitorBeginPixel + monitorLengthPixels; @@ -180,62 +175,53 @@ function monitorWrap(cachedMonitorRadians, radiusPixels, monitorSpacingPixels, m * @param {Object} fovDetails - contains reference widthPixels, heightPixels, horizontal and vertical radians, * 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 + * @returns {Object[]} - contains NWU vectors used for rendering and focused monitor detection */ -function monitorsToPlacements(fovDetails, monitorDetailsList, monitorWrappingScheme, monitorSpacing) { +function monitorsToPlacements(fovDetails, monitorDetailsList, monitorSpacing) { const monitorPlacements = []; const cachedMonitorRadians = {}; - Globals.logger.log_debug(`\t\t\tFOV Details: ${JSON.stringify(fovDetails)}, Monitor Wrapping Scheme: ${monitorWrappingScheme}`); + Globals.logger.log_debug(`\t\t\tFOV Details: ${JSON.stringify(fovDetails)}`); - if (monitorWrappingScheme === 'horizontal') { + const conversionFns = fovDetails.curvedDisplay ? fovConversionFns.curved : fovConversionFns.flat; + + if (fovDetails.monitorWrappingScheme === 'horizontal') { // monitors wrap around us horizontally - // distance to a horizontal edge is the hypothenuse of the triangle where the opposite side is half the width of the reference fov screen - const sideEdgeRadius = Math.sqrt(Math.pow(fovDetails.widthPixels / 2, 2) + Math.pow(fovDetails.completeScreenDistancePixels, 2)); + const sideEdgeRadius = conversionFns.centerToFovEdgeDistance(fovDetails.completeScreenDistancePixels, fovDetails.widthPixels); const monitorSpacingPixels = monitorSpacing * fovDetails.widthPixels; + const lengthToRadianFn = (targetWidth) => conversionFns.lengthToRadians( + fovDetails.defaultDistanceHorizontalRadians, + fovDetails.widthPixels, + sideEdgeRadius, + targetWidth + ); cachedMonitorRadians[0] = -fovDetails.defaultDistanceHorizontalRadians / 2; 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; + const monitorWrapDetails = monitorWrap(cachedMonitorRadians, monitorSpacingPixels, monitorDetails.x, monitorDetails.width, lengthToRadianFn); + const monitorCenterRadius = conversionFns.fovEdgeToScreenCenterDistance(sideEdgeRadius, monitorDetails.width); + const upTopPixels = -monitorDetails.y - (monitorDetails.y / fovDetails.heightPixels) * monitorSpacingPixels; - // how to place the monitors at the origin (0, 0) - const westCenterOriginPixels = (monitorDetails.width - fovDetails.widthPixels) / 2; - const upCenterOriginPixels = (monitorDetails.height - fovDetails.heightPixels) / 2; + // offset for aligning this monitor's center with the fov-sized viewport's center + const upCenterOffsetPixels = (monitorDetails.height - fovDetails.heightPixels) / 2; - const upCenterPixels = upTopPixels + upCenterOriginPixels; + // this is where our monitor's center is in relation to an fov-sized viewport centered about (0, 0) + const upCenterPixels = upTopPixels - upCenterOffsetPixels; monitorPlacements.push({ originalIndex, - topLeftNoRotate: [ - monitorCenterRadius, - - // west stays aligned with the origin, will apply rotationAngleRadians value during rendering - -westCenterOriginPixels, - - // up is flat when wrapping horizontally, apply it here as a constant, not touched by rendering - -upTopPixels - ], centerNoRotate: [ monitorCenterRadius, - // west centered about the FOV center + // west is centered about the FOV center 0, // up is flat when wrapping horizontally - -upCenterPixels + upCenterPixels ], - centerOrigin: [ - monitorCenterRadius, - -westCenterOriginPixels, - upCenterOriginPixels - ], - centerLook: [ + centerLook: normalizeVector([ // north is adjacent where radius is the hypotenuse, using monitorWrapDetails.center as the radians monitorCenterRadius * Math.cos(monitorWrapDetails.center), @@ -243,68 +229,59 @@ function monitorsToPlacements(fovDetails, monitorDetailsList, monitorWrappingSch -monitorCenterRadius * Math.sin(monitorWrapDetails.center), // up is flat when wrapping horizontally - -upCenterPixels - ], + upCenterPixels + ]), rotationAngleRadians: { x: 0, y: -monitorWrapDetails.center } }); }); - } else if (monitorWrappingScheme === 'vertical') { + } else if (fovDetails.monitorWrappingScheme === 'vertical') { // monitors wrap around us vertically - // distance to the top edge is the hypothenuse of the triangle where the opposite side is half the height of the reference fov screen - const topEdgeRadius = Math.sqrt(Math.pow(fovDetails.heightPixels / 2, 2) + Math.pow(fovDetails.completeScreenDistancePixels, 2)); + const topEdgeRadius = conversionFns.centerToFovEdgeDistance(fovDetails.completeScreenDistancePixels, fovDetails.heightPixels); const monitorSpacingPixels = monitorSpacing * fovDetails.heightPixels; + const lengthToRadianFn = (targetHeight) => conversionFns.lengthToRadians( + fovDetails.defaultDistanceVerticalRadians, + fovDetails.heightPixels, + topEdgeRadius, + targetHeight + ); cachedMonitorRadians[0] = -fovDetails.defaultDistanceVerticalRadians / 2; 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; + const monitorWrapDetails = monitorWrap(cachedMonitorRadians, monitorSpacingPixels, monitorDetails.y, monitorDetails.height, lengthToRadianFn); + const monitorCenterRadius = conversionFns.fovEdgeToScreenCenterDistance(topEdgeRadius, monitorDetails.height); + const westLeftPixels = -monitorDetails.x - (monitorDetails.x / fovDetails.widthPixels) * monitorSpacingPixels; - // how to place the monitors at the origin (0, 0) - const westCenterOriginPixels = (monitorDetails.width - fovDetails.widthPixels) / 2; - const upCenterOriginPixels = (monitorDetails.height - fovDetails.heightPixels) / 2; + // offset for aligning this monitor's center with the fov-sized viewport's center + const westCenterOffsetPixels = (monitorDetails.width - fovDetails.widthPixels) / 2; - const westCenterPixels = westPixels + westCenterOriginPixels; + // this is where our monitor's center is in relation to an fov-sized viewport centered about (0, 0) + const westCenterPixels = westLeftPixels - westCenterOffsetPixels; monitorPlacements.push({ originalIndex, - topLeftNoRotate: [ - monitorCenterRadius, - - // west is flat when wrapping vertically, apply it here as a constant, not touched by rendering - westPixels, - - // up stays aligned with the origin, will apply rotationAngleRadians value during rendering - upCenterOriginPixels - ], centerNoRotate: [ monitorCenterRadius, // west is flat when wrapping horizontally westCenterPixels, - // west centered about the FOV center + // up is centered about the FOV center 0 ], - centerOrigin: [ - monitorCenterRadius, - -westCenterOriginPixels, - upCenterOriginPixels - ], - centerLook: [ + centerLook: normalizeVector([ // north is adjacent where radius is the hypotenuse, using monitorWrapDetails.center as the radians monitorCenterRadius * Math.cos(monitorWrapDetails.center), // west is flat when wrapping vertically - -westCenterPixels, + westCenterPixels, // up is opposite where radius is the hypotenuse, using monitorWrapDetails.center as the radians -monitorCenterRadius * Math.sin(monitorWrapDetails.center) - ], + ]), rotationAngleRadians: { x: -monitorWrapDetails.center, y: 0 @@ -316,38 +293,28 @@ function monitorsToPlacements(fovDetails, monitorDetailsList, monitorWrappingSch // monitors make a flat wall in front of us, no wrapping monitorDetailsList.forEach((monitorDetails, index) => { - const upPixels = monitorDetails.y + (monitorDetails.y / fovDetails.heightPixels) * monitorSpacingPixels; - const westPixels = monitorDetails.x + (monitorDetails.x / fovDetails.widthPixels) * monitorSpacingPixels; + const upTopPixels = -monitorDetails.y - (monitorDetails.y / fovDetails.heightPixels) * monitorSpacingPixels; + const westLeftPixels = -monitorDetails.x - (monitorDetails.x / fovDetails.widthPixels) * monitorSpacingPixels; - // how to place the monitors at the origin (0, 0) - const westCenterOriginPixels = (monitorDetails.width - fovDetails.widthPixels) / 2; - const upCenterOriginPixels = (monitorDetails.height - fovDetails.heightPixels) / 2; + // offsets for aligning this monitor's center with the fov-sized viewport's center + const westCenterOffsetPixels = (monitorDetails.width - fovDetails.widthPixels) / 2; + const upCenterOffsetPixels = (monitorDetails.height - fovDetails.heightPixels) / 2; - const westCenterPixels = westPixels + westCenterOriginPixels; - const upCenterPixels = upPixels + upCenterOriginPixels; + const westCenterPixels = westLeftPixels - westCenterOffsetPixels; + const upCenterPixels = upTopPixels - upCenterOffsetPixels; monitorPlacements.push({ originalIndex: index, - topLeftNoRotate: [ - fovDetails.completeScreenDistancePixels, - westPixels, - -upPixels - ], centerNoRotate: [ fovDetails.completeScreenDistancePixels, westCenterPixels, - -upCenterPixels + upCenterPixels ], - centerOrigin: [ + centerLook: normalizeVector([ fovDetails.completeScreenDistancePixels, - -westCenterOriginPixels, - upCenterOriginPixels - ], - centerLook: [ - fovDetails.completeScreenDistancePixels, - -westCenterPixels, - -upCenterPixels - ], + westCenterPixels, + upCenterPixels + ]), rotationAngleRadians: { x: 0, y: 0 @@ -408,6 +375,12 @@ export const VirtualDisplaysActor = GObject.registerClass({ 'Details about the virtual monitors', GObject.ParamFlags.READWRITE ), + 'fov-details': GObject.ParamSpec.jsobject( + 'fov-details', + 'FOV Details', + 'Details about the field of view of the headset', + GObject.ParamFlags.READWRITE + ), 'monitor-wrapping-scheme': GObject.ParamSpec.string( 'monitor-wrapping-scheme', 'Monitor Wrapping Scheme', @@ -454,6 +427,13 @@ export const VirtualDisplaysActor = GObject.registerClass({ 'Latest IMU quaternion snapshots and epoch timestamp for when it was collected', GObject.ParamFlags.READWRITE ), + 'curved-display': GObject.ParamSpec.boolean( + 'curved-display', + 'Curved Display', + 'Whether the displays are curved', + GObject.ParamFlags.READWRITE, + false + ), 'smooth-follow-enabled': GObject.ParamSpec.boolean( 'smooth-follow-enabled', 'Smooth follow enabled', @@ -583,6 +563,7 @@ export const VirtualDisplaysActor = GObject.registerClass({ this.target_monitor, ...this.virtual_monitors ]; + this.focused_monitor_index = -1; try { const calibratingBanner = GdkPixbuf.Pixbuf.new_from_file(`${Globals.extension_dir}/textures/calibrating.png`); @@ -656,6 +637,7 @@ export const VirtualDisplaysActor = GObject.registerClass({ 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('curved-display', 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); @@ -706,7 +688,9 @@ export const VirtualDisplaysActor = GObject.registerClass({ focused_monitor_index: this.focused_monitor_index, imu_snapshots: this.imu_snapshots, monitor_index: index, + monitor_details: monitor, monitor_placements: this.monitor_placements, + fov_details: this.fov_details, target_monitor: this.target_monitor, display_distance: this.display_distance, display_distance_default: this._display_distance_default(), @@ -732,6 +716,7 @@ export const VirtualDisplaysActor = GObject.registerClass({ [ 'monitor-placements', + 'fov-details', 'imu-snapshots', 'smooth-follow-enabled', 'smooth-follow-toggle-epoch-ms', @@ -785,11 +770,11 @@ export const VirtualDisplaysActor = GObject.registerClass({ const focusedMonitorIndex = findFocusedMonitor( currentPoseQuat, - this._monitorsAsNormalizedVectors, + this.monitor_placements.map(monitorVectors => monitorVectors.centerLook), this.focused_monitor_index, this.display_distance / this._display_distance_default(), this.smooth_follow_enabled, - this._fov_details(), + this.fov_details, this._all_monitors ); @@ -824,6 +809,8 @@ export const VirtualDisplaysActor = GObject.registerClass({ _fov_details() { const aspect = this.target_monitor.width / this.target_monitor.height; const fovRadians = diagonalToCrossFOVs(degreeToRadian(Globals.data_stream.device_data.displayFov), aspect); + + // adjusted angles based on how far away the screens are e.g. a closer screen takes up a larger slice of our FOV const defaultDistanceVerticalRadians = 2 * Math.atan(Math.tan(fovRadians.vertical / 2) / this._display_distance_default()); const defaultDistanceHorizontalRadians = 2 * Math.atan(Math.tan(fovRadians.horizontal / 2) / this._display_distance_default()); @@ -841,10 +828,29 @@ export const VirtualDisplaysActor = GObject.registerClass({ defaultDistanceVerticalRadians, defaultDistanceHorizontalRadians, lensDistancePixels, - completeScreenDistancePixels + completeScreenDistancePixels, + monitorWrappingScheme: this._actual_wrap_scheme(), + curvedDisplay: this.curved_display }; } + _actual_wrap_scheme() { + // use automatic wrapping if the none/flat wrapping option is selected and the display is supposed to be curved + const noneUseAutomatic = this.monitor_wrapping_scheme === 'none' && this.curved_display; + if (this.monitor_wrapping_scheme !== 'automatic' && !noneUseAutomatic) return this.monitor_wrapping_scheme; + + const minX = Math.min(...this._all_monitors.map(monitor => monitor.x)); + 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)); + + if ((maxX - minX) / this.target_monitor.width >= (maxY - minY) / this.target_monitor.height) { + return 'horizontal'; + } else { + return 'vertical'; + } + } + _update_monitor_placements() { try { const minX = Math.min(...this._all_monitors.map(monitor => monitor.x)); @@ -859,20 +865,10 @@ export const VirtualDisplaysActor = GObject.registerClass({ 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.fov_details = this._fov_details(); + this.lens_vector = [0.0, 0.0, -this.fov_details.lensDistancePixels]; this.monitor_placements = monitorsToPlacements( - fovDetails, + this.fov_details, // shift all monitors so they center around the viewport center, then adjusted by the offsets this._all_monitors.map(monitor => ({ @@ -881,16 +877,8 @@ export const VirtualDisplaysActor = GObject.registerClass({ 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}`); } diff --git a/ui/po/breezydesktop.pot b/ui/po/breezydesktop.pot index 378d892..0da859e 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-12 09:01-0700\n" +"POT-Creation-Date: 2025-03-16 13:02-0700\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:141 +#: src/connecteddevice.py:142 msgid "Set Focused Display Distance" msgstr "" -#: src/connecteddevice.py:142 +#: src/connecteddevice.py:143 msgid "Use a closer value so the display zooms in when you look at it." msgstr "" -#: src/connecteddevice.py:149 +#: src/connecteddevice.py:150 msgid "Set All Displays Distance" msgstr "" -#: src/connecteddevice.py:150 +#: src/connecteddevice.py:151 msgid "Use a farther value so the displays are zoomed out when you look away." msgstr "" -#: src/connecteddevice.py:266 +#: src/connecteddevice.py:267 msgid "" "Unable to add virtual displays on this machine. Wayland and xdg-desktop-" "portal are required." msgstr "" -#: src/connecteddevice.py:300 +#: src/connecteddevice.py:301 msgid "Focused display" msgstr "" -#: src/connecteddevice.py:306 +#: src/connecteddevice.py:307 msgid "All displays" msgstr "" @@ -225,276 +225,284 @@ msgstr "" msgid "Keep the focused display near the center of your view." msgstr "" -#: src/gtk/connected-device.ui:81 src/gtk/no-device.ui:34 +#: src/gtk/connected-device.ui:81 +msgid "Curved display" +msgstr "" + +#: src/gtk/connected-device.ui:82 +msgid "Switch between flat and curved displays." +msgstr "" + +#: src/gtk/connected-device.ui:93 src/gtk/no-device.ui:34 msgid "Disable physical displays" msgstr "" -#: src/gtk/connected-device.ui:82 src/gtk/no-device.ui:35 +#: src/gtk/connected-device.ui:94 src/gtk/no-device.ui:35 msgid "" "Automatically disable all physical displays when the XR effect is enabled." msgstr "" -#: src/gtk/connected-device.ui:92 +#: src/gtk/connected-device.ui:104 msgid "Virtual displays" msgstr "" -#: src/gtk/connected-device.ui:108 +#: src/gtk/connected-device.ui:120 msgid "1080p" msgstr "" -#: src/gtk/connected-device.ui:109 +#: src/gtk/connected-device.ui:121 msgid "1440p" msgstr "" -#: src/gtk/connected-device.ui:110 +#: src/gtk/connected-device.ui:122 msgid "Add custom" msgstr "" -#: src/gtk/connected-device.ui:124 +#: src/gtk/connected-device.ui:136 msgid "Remove custom resolution" msgstr "" -#: src/gtk/connected-device.ui:144 +#: src/gtk/connected-device.ui:156 msgid "Rearrange displays" msgstr "" -#: src/gtk/connected-device.ui:162 +#: src/gtk/connected-device.ui:174 msgid "Adjustments" msgstr "" -#: src/gtk/connected-device.ui:166 +#: src/gtk/connected-device.ui:178 msgid "Display distances" msgstr "" -#: src/gtk/connected-device.ui:167 +#: src/gtk/connected-device.ui:179 msgid "Set how close you want displays to appear." msgstr "" -#: src/gtk/connected-device.ui:188 src/gtk/connected-device.ui:209 -#: src/gtk/connected-device.ui:401 src/gtk/connected-device.ui:430 -#: src/gtk/connected-device.ui:459 src/gtk/connected-device.ui:488 +#: src/gtk/connected-device.ui:200 src/gtk/connected-device.ui:221 +#: src/gtk/connected-device.ui:413 src/gtk/connected-device.ui:442 +#: src/gtk/connected-device.ui:471 src/gtk/connected-device.ui:500 msgid "Change" msgstr "" -#: src/gtk/connected-device.ui:222 +#: src/gtk/connected-device.ui:234 msgid "Follow threshold" msgstr "" -#: src/gtk/connected-device.ui:223 +#: src/gtk/connected-device.ui:235 msgid "How far away you can look before the display follows." msgstr "" -#: src/gtk/connected-device.ui:246 +#: src/gtk/connected-device.ui:258 msgid "Display angling" msgstr "" -#: src/gtk/connected-device.ui:247 +#: src/gtk/connected-device.ui:259 msgid "" "When there are multiple displays, choose how they should angle towards you." msgstr "" -#: src/gtk/connected-device.ui:261 +#: src/gtk/connected-device.ui:273 msgid "Automatic" msgstr "" -#: src/gtk/connected-device.ui:262 +#: src/gtk/connected-device.ui:274 msgid "Side-angled" msgstr "" -#: src/gtk/connected-device.ui:263 +#: src/gtk/connected-device.ui:275 msgid "Top-angled" msgstr "" -#: src/gtk/connected-device.ui:264 +#: src/gtk/connected-device.ui:276 msgid "Flat" msgstr "" -#: src/gtk/connected-device.ui:274 +#: src/gtk/connected-device.ui:286 msgid "Display spacing" msgstr "" -#: src/gtk/connected-device.ui:275 +#: src/gtk/connected-device.ui:287 msgid "Put empty space between displays, when there are multiple." msgstr "" -#: src/gtk/connected-device.ui:305 +#: src/gtk/connected-device.ui:317 msgid "Viewport horizontal offset" msgstr "" -#: src/gtk/connected-device.ui:306 +#: src/gtk/connected-device.ui:318 msgid "Move the viewport to the left or right of its default position." msgstr "" -#: src/gtk/connected-device.ui:323 +#: src/gtk/connected-device.ui:335 msgid "left" msgstr "" -#: src/gtk/connected-device.ui:325 src/gtk/connected-device.ui:355 +#: src/gtk/connected-device.ui:337 src/gtk/connected-device.ui:367 msgid "center" msgstr "" -#: src/gtk/connected-device.ui:327 +#: src/gtk/connected-device.ui:339 msgid "right" msgstr "" -#: src/gtk/connected-device.ui:335 +#: src/gtk/connected-device.ui:347 msgid "Viewport vertical offset" msgstr "" -#: src/gtk/connected-device.ui:336 +#: src/gtk/connected-device.ui:348 msgid "Move the viewport up or down from its default position." msgstr "" -#: src/gtk/connected-device.ui:353 +#: src/gtk/connected-device.ui:365 msgid "down" msgstr "" -#: src/gtk/connected-device.ui:357 +#: src/gtk/connected-device.ui:369 msgid "up" msgstr "" -#: src/gtk/connected-device.ui:372 src/gtk/connected-device.ui:378 +#: src/gtk/connected-device.ui:384 src/gtk/connected-device.ui:390 msgid "Keyboard Shortcuts" msgstr "" -#: src/gtk/connected-device.ui:381 +#: src/gtk/connected-device.ui:393 msgid "XR Effect on/off shortcut" msgstr "" -#: src/gtk/connected-device.ui:382 +#: src/gtk/connected-device.ui:394 msgid "" "Quickly enable or disable the XR Effect. You may need to enable the effect " "manually once in order to enable the shortcut." msgstr "" -#: src/gtk/connected-device.ui:410 +#: src/gtk/connected-device.ui:422 msgid "Re-center display shortcut" msgstr "" -#: src/gtk/connected-device.ui:411 +#: src/gtk/connected-device.ui:423 msgid "Pin the virtual display to the current position." msgstr "" -#: src/gtk/connected-device.ui:439 +#: src/gtk/connected-device.ui:451 msgid "Toggle zoom on focus shortcut" msgstr "" -#: src/gtk/connected-device.ui:440 +#: src/gtk/connected-device.ui:452 msgid "Quickly toggle zoom on focus mode." msgstr "" -#: src/gtk/connected-device.ui:468 +#: src/gtk/connected-device.ui:480 msgid "Toggle follow mode shortcut" msgstr "" -#: src/gtk/connected-device.ui:469 +#: src/gtk/connected-device.ui:481 msgid "Quickly toggle follow mode." msgstr "" -#: src/gtk/connected-device.ui:504 src/gtk/connected-device.ui:514 +#: src/gtk/connected-device.ui:516 src/gtk/connected-device.ui:526 msgid "Advanced Settings" msgstr "" -#: src/gtk/connected-device.ui:518 +#: src/gtk/connected-device.ui:530 msgid "Find optimal display config" msgstr "" -#: src/gtk/connected-device.ui:519 +#: src/gtk/connected-device.ui:531 msgid "" "Automatically modify the glasses display configuration for maximum " "resolution and best scaling when plugged in." msgstr "" -#: src/gtk/connected-device.ui:529 +#: src/gtk/connected-device.ui:541 msgid "Use highest refresh rate" msgstr "" -#: src/gtk/connected-device.ui:530 +#: src/gtk/connected-device.ui:542 msgid "Refresh rate may affect performance, disable this to set it manually." msgstr "" -#: src/gtk/connected-device.ui:540 +#: src/gtk/connected-device.ui:552 msgid "Center on glasses' display" msgstr "" -#: src/gtk/connected-device.ui:541 +#: src/gtk/connected-device.ui:553 msgid "" "Center the viewport on the glasses' display, even if the display is not in " "the middle." msgstr "" -#: src/gtk/connected-device.ui:551 +#: src/gtk/connected-device.ui:563 msgid "Always primary display" msgstr "" -#: src/gtk/connected-device.ui:552 +#: src/gtk/connected-device.ui:564 msgid "Automatically set the glasses as the primary display when plugged in." msgstr "" -#: src/gtk/connected-device.ui:562 +#: src/gtk/connected-device.ui:574 msgid "Remove virtual displays on disable" msgstr "" -#: src/gtk/connected-device.ui:563 +#: src/gtk/connected-device.ui:575 msgid "Automatically remove virtual displays when the XR effect is disabled." msgstr "" -#: src/gtk/connected-device.ui:573 +#: src/gtk/connected-device.ui:585 msgid "Enable multi-tap detection" msgstr "" -#: src/gtk/connected-device.ui:574 +#: src/gtk/connected-device.ui:586 msgid "Enables double-tap to recenter and triple-tap to recalibrate." msgstr "" -#: src/gtk/connected-device.ui:584 +#: src/gtk/connected-device.ui:596 msgid "All displays follow mode" msgstr "" -#: src/gtk/connected-device.ui:585 +#: src/gtk/connected-device.ui:597 msgid "Follow mode moves all displays, not just the focused one." msgstr "" -#: src/gtk/connected-device.ui:601 +#: src/gtk/connected-device.ui:613 msgid "Follow mode movement tracking" msgstr "" -#: src/gtk/connected-device.ui:602 +#: src/gtk/connected-device.ui:614 msgid "Choose which movements should be tracked in follow mode." msgstr "" -#: src/gtk/connected-device.ui:617 +#: src/gtk/connected-device.ui:629 msgid "Horizontal" msgstr "" -#: src/gtk/connected-device.ui:637 +#: src/gtk/connected-device.ui:649 msgid "Vertical" msgstr "" -#: src/gtk/connected-device.ui:657 +#: src/gtk/connected-device.ui:669 msgid "Tilt/roll" msgstr "" -#: src/gtk/connected-device.ui:675 +#: src/gtk/connected-device.ui:687 msgid "Movement look-ahead" msgstr "" -#: src/gtk/connected-device.ui:676 +#: src/gtk/connected-device.ui:688 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:694 +#: src/gtk/connected-device.ui:706 msgid "Default" msgstr "" -#: src/gtk/connected-device.ui:706 +#: src/gtk/connected-device.ui:718 msgid "Text Scaling" msgstr "" -#: src/gtk/connected-device.ui:707 +#: src/gtk/connected-device.ui:719 msgid "Scaling text below 1.0 will simulate a higher resolution display" msgstr "" diff --git a/ui/po/de.po b/ui/po/de.po index 501a1ce..f21c44a 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-12 08:49-0700\n" +"POT-Creation-Date: 2025-03-15 16:43-0700\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:141 +#: src/connecteddevice.py:142 #, fuzzy msgid "Set Focused Display Distance" msgstr "Display-Entfernung" -#: src/connecteddevice.py:142 +#: src/connecteddevice.py:143 msgid "Use a closer value so the display zooms in when you look at it." msgstr "" -#: src/connecteddevice.py:149 +#: src/connecteddevice.py:150 #, fuzzy msgid "Set All Displays Distance" msgstr "Display-Entfernung" -#: src/connecteddevice.py:150 +#: src/connecteddevice.py:151 msgid "Use a farther value so the displays are zoomed out when you look away." msgstr "" -#: src/connecteddevice.py:266 +#: src/connecteddevice.py:267 msgid "" "Unable to add virtual displays on this machine. Wayland and xdg-desktop-" "portal are required." msgstr "" -#: src/connecteddevice.py:300 +#: src/connecteddevice.py:301 #, fuzzy msgid "Focused display" msgstr "Display-Entfernung" -#: src/connecteddevice.py:306 +#: src/connecteddevice.py:307 #, fuzzy msgid "All displays" msgstr "Gebogenes Display" @@ -232,148 +232,156 @@ msgstr "Folgemodus" msgid "Keep the focused display near the center of your view." msgstr "Halten Sie das virtuelle Display Nahe der Mitte Ihres Blickfelds." -#: src/gtk/connected-device.ui:81 src/gtk/no-device.ui:34 +#: src/gtk/connected-device.ui:81 +msgid "Curved display" +msgstr "Gebogenes Display" + +#: src/gtk/connected-device.ui:82 +msgid "Switch between flat and curved displays." +msgstr "Zwischen flachen und gebogenen Displays wechseln." + +#: src/gtk/connected-device.ui:93 src/gtk/no-device.ui:34 msgid "Disable physical displays" msgstr "" -#: src/gtk/connected-device.ui:82 src/gtk/no-device.ui:35 +#: src/gtk/connected-device.ui:94 src/gtk/no-device.ui:35 msgid "" "Automatically disable all physical displays when the XR effect is enabled." msgstr "" -#: src/gtk/connected-device.ui:92 +#: src/gtk/connected-device.ui:104 #, fuzzy msgid "Virtual displays" msgstr "Gebogenes Display" -#: src/gtk/connected-device.ui:108 +#: src/gtk/connected-device.ui:120 msgid "1080p" msgstr "" -#: src/gtk/connected-device.ui:109 +#: src/gtk/connected-device.ui:121 msgid "1440p" msgstr "" -#: src/gtk/connected-device.ui:110 +#: src/gtk/connected-device.ui:122 msgid "Add custom" msgstr "" -#: src/gtk/connected-device.ui:124 +#: src/gtk/connected-device.ui:136 msgid "Remove custom resolution" msgstr "" -#: src/gtk/connected-device.ui:144 +#: src/gtk/connected-device.ui:156 #, fuzzy msgid "Rearrange displays" msgstr "Gebogenes Display" -#: src/gtk/connected-device.ui:162 +#: src/gtk/connected-device.ui:174 msgid "Adjustments" msgstr "Einstellungen" -#: src/gtk/connected-device.ui:166 +#: src/gtk/connected-device.ui:178 #, fuzzy msgid "Display distances" msgstr "Display-Entfernung" -#: src/gtk/connected-device.ui:167 +#: src/gtk/connected-device.ui:179 msgid "Set how close you want displays to appear." msgstr "" -#: src/gtk/connected-device.ui:188 src/gtk/connected-device.ui:209 -#: src/gtk/connected-device.ui:401 src/gtk/connected-device.ui:430 -#: src/gtk/connected-device.ui:459 src/gtk/connected-device.ui:488 +#: src/gtk/connected-device.ui:200 src/gtk/connected-device.ui:221 +#: src/gtk/connected-device.ui:413 src/gtk/connected-device.ui:442 +#: src/gtk/connected-device.ui:471 src/gtk/connected-device.ui:500 msgid "Change" msgstr "Ändern" -#: src/gtk/connected-device.ui:222 +#: src/gtk/connected-device.ui:234 msgid "Follow threshold" msgstr "Folgemodus-Schwelle" -#: src/gtk/connected-device.ui:223 +#: src/gtk/connected-device.ui:235 msgid "How far away you can look before the display follows." msgstr "Wie weit Sie wegschauen können, bevor das Display folgt." -#: src/gtk/connected-device.ui:246 +#: src/gtk/connected-device.ui:258 #, fuzzy msgid "Display angling" msgstr "Display-Größe" -#: src/gtk/connected-device.ui:247 +#: src/gtk/connected-device.ui:259 msgid "" "When there are multiple displays, choose how they should angle towards you." msgstr "" -#: src/gtk/connected-device.ui:261 +#: src/gtk/connected-device.ui:273 msgid "Automatic" msgstr "" -#: src/gtk/connected-device.ui:262 +#: src/gtk/connected-device.ui:274 msgid "Side-angled" msgstr "" -#: src/gtk/connected-device.ui:263 +#: src/gtk/connected-device.ui:275 msgid "Top-angled" msgstr "" -#: src/gtk/connected-device.ui:264 +#: src/gtk/connected-device.ui:276 msgid "Flat" msgstr "" -#: src/gtk/connected-device.ui:274 +#: src/gtk/connected-device.ui:286 #, fuzzy msgid "Display spacing" msgstr "Display-Größe" -#: src/gtk/connected-device.ui:275 +#: src/gtk/connected-device.ui:287 msgid "Put empty space between displays, when there are multiple." msgstr "" -#: src/gtk/connected-device.ui:305 +#: src/gtk/connected-device.ui:317 msgid "Viewport horizontal offset" msgstr "" -#: src/gtk/connected-device.ui:306 +#: src/gtk/connected-device.ui:318 msgid "Move the viewport to the left or right of its default position." msgstr "" -#: src/gtk/connected-device.ui:323 +#: src/gtk/connected-device.ui:335 msgid "left" msgstr "" -#: src/gtk/connected-device.ui:325 src/gtk/connected-device.ui:355 +#: src/gtk/connected-device.ui:337 src/gtk/connected-device.ui:367 msgid "center" msgstr "" -#: src/gtk/connected-device.ui:327 +#: src/gtk/connected-device.ui:339 msgid "right" msgstr "" -#: src/gtk/connected-device.ui:335 +#: src/gtk/connected-device.ui:347 msgid "Viewport vertical offset" msgstr "" -#: src/gtk/connected-device.ui:336 +#: src/gtk/connected-device.ui:348 msgid "Move the viewport up or down from its default position." msgstr "" -#: src/gtk/connected-device.ui:353 +#: src/gtk/connected-device.ui:365 msgid "down" msgstr "" -#: src/gtk/connected-device.ui:357 +#: src/gtk/connected-device.ui:369 msgid "up" msgstr "" -#: src/gtk/connected-device.ui:372 src/gtk/connected-device.ui:378 +#: src/gtk/connected-device.ui:384 src/gtk/connected-device.ui:390 msgid "Keyboard Shortcuts" msgstr "Tastenkombinationen" -#: src/gtk/connected-device.ui:381 +#: src/gtk/connected-device.ui:393 msgid "XR Effect on/off shortcut" msgstr "XR-Effekt an/aus Tastenkombination" -#: src/gtk/connected-device.ui:382 +#: src/gtk/connected-device.ui:394 msgid "" "Quickly enable or disable the XR Effect. You may need to enable the effect " "manually once in order to enable the shortcut." @@ -382,41 +390,41 @@ msgstr "" "Effekt einmalig manuell aktiviert werden, um die Tastenkombination zu " "aktivieren." -#: src/gtk/connected-device.ui:410 +#: src/gtk/connected-device.ui:422 msgid "Re-center display shortcut" msgstr "Display-Zentrierung-Tastenkombination" -#: src/gtk/connected-device.ui:411 +#: src/gtk/connected-device.ui:423 msgid "Pin the virtual display to the current position." msgstr "Heften Sie das virtuelle Display an die aktuelle Position an." -#: src/gtk/connected-device.ui:439 +#: src/gtk/connected-device.ui:451 #, fuzzy msgid "Toggle zoom on focus shortcut" msgstr "Folgemodus-Tastenkombination umschalten" -#: src/gtk/connected-device.ui:440 +#: src/gtk/connected-device.ui:452 #, fuzzy msgid "Quickly toggle zoom on focus mode." msgstr "Schnell den Folgemodus wechseln." -#: src/gtk/connected-device.ui:468 +#: src/gtk/connected-device.ui:480 msgid "Toggle follow mode shortcut" msgstr "Folgemodus-Tastenkombination umschalten" -#: src/gtk/connected-device.ui:469 +#: src/gtk/connected-device.ui:481 msgid "Quickly toggle follow mode." msgstr "Schnell den Folgemodus wechseln." -#: src/gtk/connected-device.ui:504 src/gtk/connected-device.ui:514 +#: src/gtk/connected-device.ui:516 src/gtk/connected-device.ui:526 msgid "Advanced Settings" msgstr "Erweiterte Einstellungen" -#: src/gtk/connected-device.ui:518 +#: src/gtk/connected-device.ui:530 msgid "Find optimal display config" msgstr "Optimale Display-Konfiguration finden" -#: src/gtk/connected-device.ui:519 +#: src/gtk/connected-device.ui:531 msgid "" "Automatically modify the glasses display configuration for maximum " "resolution and best scaling when plugged in." @@ -424,87 +432,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:529 +#: src/gtk/connected-device.ui:541 msgid "Use highest refresh rate" msgstr "Höchste Bildwiederholrate verwenden" -#: src/gtk/connected-device.ui:530 +#: src/gtk/connected-device.ui:542 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:540 +#: src/gtk/connected-device.ui:552 msgid "Center on glasses' display" msgstr "" -#: src/gtk/connected-device.ui:541 +#: src/gtk/connected-device.ui:553 msgid "" "Center the viewport on the glasses' display, even if the display is not in " "the middle." msgstr "" -#: src/gtk/connected-device.ui:551 +#: src/gtk/connected-device.ui:563 msgid "Always primary display" msgstr "Immer primäres Display" -#: src/gtk/connected-device.ui:552 +#: src/gtk/connected-device.ui:564 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:562 +#: src/gtk/connected-device.ui:574 #, fuzzy msgid "Remove virtual displays on disable" msgstr "Gebogenes Display" -#: src/gtk/connected-device.ui:563 +#: src/gtk/connected-device.ui:575 msgid "Automatically remove virtual displays when the XR effect is disabled." msgstr "" -#: src/gtk/connected-device.ui:573 +#: src/gtk/connected-device.ui:585 msgid "Enable multi-tap detection" msgstr "" -#: src/gtk/connected-device.ui:574 +#: src/gtk/connected-device.ui:586 msgid "Enables double-tap to recenter and triple-tap to recalibrate." msgstr "" -#: src/gtk/connected-device.ui:584 +#: src/gtk/connected-device.ui:596 #, fuzzy msgid "All displays follow mode" msgstr "Gebogenes Display" -#: src/gtk/connected-device.ui:585 +#: src/gtk/connected-device.ui:597 msgid "Follow mode moves all displays, not just the focused one." msgstr "" -#: src/gtk/connected-device.ui:601 +#: src/gtk/connected-device.ui:613 msgid "Follow mode movement tracking" msgstr "" -#: src/gtk/connected-device.ui:602 +#: src/gtk/connected-device.ui:614 msgid "Choose which movements should be tracked in follow mode." msgstr "" -#: src/gtk/connected-device.ui:617 +#: src/gtk/connected-device.ui:629 msgid "Horizontal" msgstr "" -#: src/gtk/connected-device.ui:637 +#: src/gtk/connected-device.ui:649 msgid "Vertical" msgstr "" -#: src/gtk/connected-device.ui:657 +#: src/gtk/connected-device.ui:669 msgid "Tilt/roll" msgstr "" -#: src/gtk/connected-device.ui:675 +#: src/gtk/connected-device.ui:687 msgid "Movement look-ahead" msgstr "Bewegungsvorausschau" -#: src/gtk/connected-device.ui:676 +#: src/gtk/connected-device.ui:688 msgid "" "Counteracts input lag by predicting head-tracking position ahead of render " "time. Stick with default unless virtual display drags behind your head " @@ -515,15 +523,15 @@ msgstr "" "es sei denn, das virtuelle Display hängt hinter Ihren Kopfbewegungen " "hinterher, springt vor oder ist sehr wackelig." -#: src/gtk/connected-device.ui:694 +#: src/gtk/connected-device.ui:706 msgid "Default" msgstr "Standard" -#: src/gtk/connected-device.ui:706 +#: src/gtk/connected-device.ui:718 msgid "Text Scaling" msgstr "Textskalierung" -#: src/gtk/connected-device.ui:707 +#: src/gtk/connected-device.ui:719 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" @@ -729,9 +737,6 @@ msgstr "Über BreezyDesktop" #~ msgid "Widescreen mode" #~ msgstr "Breitbildmodus" -#~ msgid "Switch between flat and curved displays." -#~ msgstr "Zwischen flachen und gebogenen Displays wechseln." - #~ msgid "" #~ "Closer appears larger, further appears smaller. Controls depth when in " #~ "widescreen mode." diff --git a/ui/po/es.po b/ui/po/es.po index b037f9d..34377e9 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-12 08:49-0700\n" +"POT-Creation-Date: 2025-03-15 16:43-0700\n" "PO-Revision-Date: 2024-08-02 20:55-0700\n" "Last-Translator: \n" "Language-Team: Spanish \n" @@ -28,34 +28,38 @@ 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:141 +#: src/connecteddevice.py:142 msgid "Set Focused Display Distance" msgstr "Ajusta Distancia de Enfoque de la Pantalla" -#: src/connecteddevice.py:142 +#: src/connecteddevice.py:143 msgid "Use a closer value so the display zooms in when you look at it." -msgstr "Usa un valor más cercano para que la pantalla se acerque cuando la mires." +msgstr "" +"Usa un valor más cercano para que la pantalla se acerque cuando la mires." -#: src/connecteddevice.py:149 +#: src/connecteddevice.py:150 msgid "Set All Displays Distance" msgstr "Ajusta Todas las Distancias de Pantalla" -#: src/connecteddevice.py:150 +#: src/connecteddevice.py:151 msgid "Use a farther value so the displays are zoomed out when you look away." -msgstr "Usa un valor más alejado para que las pantallas se alejen cuando apartes la vista." +msgstr "" +"Usa un valor más alejado para que las pantallas se alejen cuando apartes la " +"vista." -#: src/connecteddevice.py:266 +#: src/connecteddevice.py:267 msgid "" "Unable to add virtual displays on this machine. Wayland and xdg-desktop-" "portal are required." msgstr "" -"No se pueden agregar pantallas virtuales en esta máquina. Se requiere Wayland y xdg-desktop-portal." +"No se pueden agregar pantallas virtuales en esta máquina. Se requiere " +"Wayland y xdg-desktop-portal." -#: src/connecteddevice.py:300 +#: src/connecteddevice.py:301 msgid "Focused display" msgstr "Pantalla enfocada" -#: src/connecteddevice.py:306 +#: src/connecteddevice.py:307 msgid "All displays" msgstr "Todas las pantallas" @@ -219,8 +223,8 @@ msgid "" " " msgstr "" "Acercar automáticamente una pantalla cuando la mires.\n" -"Establece tus distancias preferidas de enfoque y desenfoque en la sección " -"de Ajustes.\n" +"Establece tus distancias preferidas de enfoque y desenfoque en la sección de " +"Ajustes.\n" " " #: src/gtk/connected-device.ui:70 @@ -231,143 +235,153 @@ msgstr "Modo de seguimiento" msgid "Keep the focused display near the center of your view." msgstr "Mantener la pantalla enfocada cerca del centro de campo visual." -#: src/gtk/connected-device.ui:81 src/gtk/no-device.ui:34 +#: src/gtk/connected-device.ui:81 +msgid "Curved display" +msgstr "Pantalla curvada" + +#: src/gtk/connected-device.ui:82 +msgid "Switch between flat and curved displays." +msgstr "Cambiar entre pantallas planas y curvadas." + +#: src/gtk/connected-device.ui:93 src/gtk/no-device.ui:34 msgid "Disable physical displays" msgstr "Desactivar pantallas físicas" -#: src/gtk/connected-device.ui:82 src/gtk/no-device.ui:35 +#: src/gtk/connected-device.ui:94 src/gtk/no-device.ui:35 msgid "" "Automatically disable all physical displays when the XR effect is enabled." -msgstr "Desactivar automáticamente todas las pantallas físicas cuando el efecto XR esté habilitado." +msgstr "" +"Desactivar automáticamente todas las pantallas físicas cuando el efecto XR " +"esté habilitado." -#: src/gtk/connected-device.ui:92 +#: src/gtk/connected-device.ui:104 msgid "Virtual displays" msgstr "Pantallas virtuales" -#: src/gtk/connected-device.ui:108 +#: src/gtk/connected-device.ui:120 msgid "1080p" msgstr "1080p" -#: src/gtk/connected-device.ui:109 +#: src/gtk/connected-device.ui:121 msgid "1440p" msgstr "1440p" -#: src/gtk/connected-device.ui:110 +#: src/gtk/connected-device.ui:122 msgid "Add custom" msgstr "Añadir personalizada" -#: src/gtk/connected-device.ui:124 +#: src/gtk/connected-device.ui:136 msgid "Remove custom resolution" msgstr "Eliminar resolución personalizada" -#: src/gtk/connected-device.ui:144 +#: src/gtk/connected-device.ui:156 msgid "Rearrange displays" msgstr "Reorganizar pantallas" -#: src/gtk/connected-device.ui:162 +#: src/gtk/connected-device.ui:174 msgid "Adjustments" msgstr "Ajustes" -#: src/gtk/connected-device.ui:166 +#: src/gtk/connected-device.ui:178 msgid "Display distances" msgstr "Distancias de la pantalla" -#: src/gtk/connected-device.ui:167 +#: src/gtk/connected-device.ui:179 msgid "Set how close you want displays to appear." msgstr "Ajusta cómo de cerca quieres que aparezcan las pantallas." -#: src/gtk/connected-device.ui:188 src/gtk/connected-device.ui:209 -#: src/gtk/connected-device.ui:401 src/gtk/connected-device.ui:430 -#: src/gtk/connected-device.ui:459 src/gtk/connected-device.ui:488 +#: src/gtk/connected-device.ui:200 src/gtk/connected-device.ui:221 +#: src/gtk/connected-device.ui:413 src/gtk/connected-device.ui:442 +#: src/gtk/connected-device.ui:471 src/gtk/connected-device.ui:500 msgid "Change" msgstr "Cambiar" -#: src/gtk/connected-device.ui:222 +#: src/gtk/connected-device.ui:234 msgid "Follow threshold" msgstr "Umbral de seguimiento" -#: src/gtk/connected-device.ui:223 +#: src/gtk/connected-device.ui:235 msgid "How far away you can look before the display follows." msgstr "Hasta qué punto puedes mirar antes de que la pantalla siga." -#: src/gtk/connected-device.ui:246 +#: src/gtk/connected-device.ui:258 msgid "Display angling" msgstr "Inclinación de la pantalla" -#: src/gtk/connected-device.ui:247 +#: src/gtk/connected-device.ui:259 msgid "" "When there are multiple displays, choose how they should angle towards you." msgstr "Cuando hay múltiples pantallas, elige cómo deben inclinarse hacia ti." -#: src/gtk/connected-device.ui:261 +#: src/gtk/connected-device.ui:273 msgid "Automatic" msgstr "Automático" -#: src/gtk/connected-device.ui:262 +#: src/gtk/connected-device.ui:274 msgid "Side-angled" msgstr "Inclinación lateral" -#: src/gtk/connected-device.ui:263 +#: src/gtk/connected-device.ui:275 msgid "Top-angled" msgstr "Inclinación superior" -#: src/gtk/connected-device.ui:264 +#: src/gtk/connected-device.ui:276 msgid "Flat" msgstr "Plano" -#: src/gtk/connected-device.ui:274 +#: src/gtk/connected-device.ui:286 msgid "Display spacing" msgstr "Separación de pantallas" -#: src/gtk/connected-device.ui:275 +#: src/gtk/connected-device.ui:287 msgid "Put empty space between displays, when there are multiple." msgstr "Poner espacio vacío entre las pantallas, cuando haya varias." -#: src/gtk/connected-device.ui:305 +#: src/gtk/connected-device.ui:317 msgid "Viewport horizontal offset" msgstr "Desplazamiento horizontal del visor" -#: src/gtk/connected-device.ui:306 +#: src/gtk/connected-device.ui:318 msgid "Move the viewport to the left or right of its default position." msgstr "Mueve el visor a izquierda o derecha de su posición predeterminada." -#: src/gtk/connected-device.ui:323 +#: src/gtk/connected-device.ui:335 msgid "left" msgstr "izquierda" -#: src/gtk/connected-device.ui:325 src/gtk/connected-device.ui:355 +#: src/gtk/connected-device.ui:337 src/gtk/connected-device.ui:367 msgid "center" msgstr "centro" -#: src/gtk/connected-device.ui:327 +#: src/gtk/connected-device.ui:339 msgid "right" msgstr "derecha" -#: src/gtk/connected-device.ui:335 +#: src/gtk/connected-device.ui:347 msgid "Viewport vertical offset" msgstr "Desplazamiento vertical del visor" -#: src/gtk/connected-device.ui:336 +#: src/gtk/connected-device.ui:348 msgid "Move the viewport up or down from its default position." msgstr "Mueve el visor arriba o abajo de su posición predeterminada." -#: src/gtk/connected-device.ui:353 +#: src/gtk/connected-device.ui:365 msgid "down" msgstr "abajo" -#: src/gtk/connected-device.ui:357 +#: src/gtk/connected-device.ui:369 msgid "up" msgstr "arriba" -#: src/gtk/connected-device.ui:372 src/gtk/connected-device.ui:378 +#: src/gtk/connected-device.ui:384 src/gtk/connected-device.ui:390 msgid "Keyboard Shortcuts" msgstr "Atajos de teclado" -#: src/gtk/connected-device.ui:381 +#: src/gtk/connected-device.ui:393 msgid "XR Effect on/off shortcut" msgstr "Atajo encendido/apagado Efecto XR" -#: src/gtk/connected-device.ui:382 +#: src/gtk/connected-device.ui:394 msgid "" "Quickly enable or disable the XR Effect. You may need to enable the effect " "manually once in order to enable the shortcut." @@ -375,39 +389,39 @@ msgstr "" "Activa o desactiva rápidamente el Efecto XR. Es posible que necesites " "activar el efecto manualmente una vez para habilitar el atajo." -#: src/gtk/connected-device.ui:410 +#: src/gtk/connected-device.ui:422 msgid "Re-center display shortcut" msgstr "Atajo para recentrar la pantalla" -#: src/gtk/connected-device.ui:411 +#: src/gtk/connected-device.ui:423 msgid "Pin the virtual display to the current position." msgstr "Fije la pantalla virtual en la posición actual." -#: src/gtk/connected-device.ui:439 +#: src/gtk/connected-device.ui:451 msgid "Toggle zoom on focus shortcut" msgstr "Atajo para alternar el acercamiento al enfocar" -#: src/gtk/connected-device.ui:440 +#: src/gtk/connected-device.ui:452 msgid "Quickly toggle zoom on focus mode." msgstr "Modo para alternar rápidamente el acercamiento al enfocar." -#: src/gtk/connected-device.ui:468 +#: src/gtk/connected-device.ui:480 msgid "Toggle follow mode shortcut" msgstr "Atajo para alternar el modo de seguimiento" -#: src/gtk/connected-device.ui:469 +#: src/gtk/connected-device.ui:481 msgid "Quickly toggle follow mode." msgstr "Activar el modo de seguimiento." -#: src/gtk/connected-device.ui:504 src/gtk/connected-device.ui:514 +#: src/gtk/connected-device.ui:516 src/gtk/connected-device.ui:526 msgid "Advanced Settings" msgstr "Configuración Avanzada" -#: src/gtk/connected-device.ui:518 +#: src/gtk/connected-device.ui:530 msgid "Find optimal display config" msgstr "Encuentre la configuración de pantalla óptima" -#: src/gtk/connected-device.ui:519 +#: src/gtk/connected-device.ui:531 msgid "" "Automatically modify the glasses display configuration for maximum " "resolution and best scaling when plugged in." @@ -416,21 +430,21 @@ msgstr "" "obtener la máxima resolución y la mejor escalabilidad cuando estén " "enchufadas." -#: src/gtk/connected-device.ui:529 +#: src/gtk/connected-device.ui:541 msgid "Use highest refresh rate" msgstr "Utilizar la frecuencia de actualización más alta" -#: src/gtk/connected-device.ui:530 +#: src/gtk/connected-device.ui:542 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:540 +#: src/gtk/connected-device.ui:552 msgid "Center on glasses' display" msgstr "Centrar en la pantalla de las gafas" -#: src/gtk/connected-device.ui:541 +#: src/gtk/connected-device.ui:553 msgid "" "Center the viewport on the glasses' display, even if the display is not in " "the middle." @@ -438,64 +452,67 @@ msgstr "" "Centrar el visor en la pantalla de las gafas, incluso si la pantalla no está " "en el centro." -#: src/gtk/connected-device.ui:551 +#: src/gtk/connected-device.ui:563 msgid "Always primary display" msgstr "Siempre como pantalla principal" -#: src/gtk/connected-device.ui:552 +#: src/gtk/connected-device.ui:564 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:562 +#: src/gtk/connected-device.ui:574 msgid "Remove virtual displays on disable" msgstr "Eliminar pantallas virtuales al desactivar" -#: src/gtk/connected-device.ui:563 +#: src/gtk/connected-device.ui:575 msgid "Automatically remove virtual displays when the XR effect is disabled." -msgstr "Eliminar automáticamente las pantallas virtuales cuando se desactiva el efecto XR." +msgstr "" +"Eliminar automáticamente las pantallas virtuales cuando se desactiva el " +"efecto XR." -#: src/gtk/connected-device.ui:573 +#: src/gtk/connected-device.ui:585 msgid "Enable multi-tap detection" msgstr "Activar la detección de toques múltiples" -#: src/gtk/connected-device.ui:574 +#: src/gtk/connected-device.ui:586 msgid "Enables double-tap to recenter and triple-tap to recalibrate." -msgstr "Activa el doble toque para recentrar y el triple toque para recalibrar." +msgstr "" +"Activa el doble toque para recentrar y el triple toque para recalibrar." -#: src/gtk/connected-device.ui:584 +#: src/gtk/connected-device.ui:596 msgid "All displays follow mode" msgstr "Modo de seguimiento de todas las pantallas" -#: src/gtk/connected-device.ui:585 +#: src/gtk/connected-device.ui:597 msgid "Follow mode moves all displays, not just the focused one." msgstr "El modo de seguimiento mueve todas las pantallas, no solo la enfocada." -#: src/gtk/connected-device.ui:601 +#: src/gtk/connected-device.ui:613 msgid "Follow mode movement tracking" msgstr "Rastreo de movimiento de modo de seguimiento" -#: src/gtk/connected-device.ui:602 +#: src/gtk/connected-device.ui:614 msgid "Choose which movements should be tracked in follow mode." msgstr "Elige qué movimientos deben rastrearse en el modo de seguimiento." -#: src/gtk/connected-device.ui:617 +#: src/gtk/connected-device.ui:629 msgid "Horizontal" msgstr "Horizontal" -#: src/gtk/connected-device.ui:637 +#: src/gtk/connected-device.ui:649 msgid "Vertical" msgstr "Vertical" -#: src/gtk/connected-device.ui:657 +#: src/gtk/connected-device.ui:669 msgid "Tilt/roll" msgstr "Inclinación/giro" -#: src/gtk/connected-device.ui:675 +#: src/gtk/connected-device.ui:687 msgid "Movement look-ahead" msgstr "Anticipación de movimiento" -#: src/gtk/connected-device.ui:676 +#: src/gtk/connected-device.ui:688 msgid "" "Counteracts input lag by predicting head-tracking position ahead of render " "time. Stick with default unless virtual display drags behind your head " @@ -506,15 +523,15 @@ 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:694 +#: src/gtk/connected-device.ui:706 msgid "Default" msgstr "Predeterminado" -#: src/gtk/connected-device.ui:706 +#: src/gtk/connected-device.ui:718 msgid "Text Scaling" msgstr "Escalado de Texto" -#: src/gtk/connected-device.ui:707 +#: src/gtk/connected-device.ui:719 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 " @@ -719,9 +736,6 @@ msgstr "Acerca de BreezyDesktop" #~ msgid "Widescreen mode" #~ msgstr "Modo pantalla ancha" -#~ msgid "Switch between flat and curved displays." -#~ msgstr "Cambiar entre pantallas planas y curvadas." - #~ msgid "" #~ "Closer appears larger, further appears smaller. Controls depth when in " #~ "widescreen mode." diff --git a/ui/po/fr.po b/ui/po/fr.po index 623cecf..b0ebcd5 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-12 08:49-0700\n" +"POT-Creation-Date: 2025-03-15 16:43-0700\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:141 +#: src/connecteddevice.py:142 #, fuzzy msgid "Set Focused Display Distance" msgstr "Distance d'affichage" -#: src/connecteddevice.py:142 +#: src/connecteddevice.py:143 msgid "Use a closer value so the display zooms in when you look at it." msgstr "" -#: src/connecteddevice.py:149 +#: src/connecteddevice.py:150 #, fuzzy msgid "Set All Displays Distance" msgstr "Distance d'affichage" -#: src/connecteddevice.py:150 +#: src/connecteddevice.py:151 msgid "Use a farther value so the displays are zoomed out when you look away." msgstr "" -#: src/connecteddevice.py:266 +#: src/connecteddevice.py:267 msgid "" "Unable to add virtual displays on this machine. Wayland and xdg-desktop-" "portal are required." msgstr "" -#: src/connecteddevice.py:300 +#: src/connecteddevice.py:301 #, fuzzy msgid "Focused display" msgstr "Distance d'affichage" -#: src/connecteddevice.py:306 +#: src/connecteddevice.py:307 #, fuzzy msgid "All displays" msgstr "Affichage incurvé" @@ -234,148 +234,156 @@ msgstr "Mode de suivi" msgid "Keep the focused display near the center of your view." msgstr "Gardez l'affichage virtuel près du centre de votre champ de vision." -#: src/gtk/connected-device.ui:81 src/gtk/no-device.ui:34 +#: src/gtk/connected-device.ui:81 +msgid "Curved display" +msgstr "Affichage incurvé" + +#: src/gtk/connected-device.ui:82 +msgid "Switch between flat and curved displays." +msgstr "Basculez entre les affichages plats et incurvés." + +#: src/gtk/connected-device.ui:93 src/gtk/no-device.ui:34 msgid "Disable physical displays" msgstr "" -#: src/gtk/connected-device.ui:82 src/gtk/no-device.ui:35 +#: src/gtk/connected-device.ui:94 src/gtk/no-device.ui:35 msgid "" "Automatically disable all physical displays when the XR effect is enabled." msgstr "" -#: src/gtk/connected-device.ui:92 +#: src/gtk/connected-device.ui:104 #, fuzzy msgid "Virtual displays" msgstr "Affichage incurvé" -#: src/gtk/connected-device.ui:108 +#: src/gtk/connected-device.ui:120 msgid "1080p" msgstr "" -#: src/gtk/connected-device.ui:109 +#: src/gtk/connected-device.ui:121 msgid "1440p" msgstr "" -#: src/gtk/connected-device.ui:110 +#: src/gtk/connected-device.ui:122 msgid "Add custom" msgstr "" -#: src/gtk/connected-device.ui:124 +#: src/gtk/connected-device.ui:136 msgid "Remove custom resolution" msgstr "" -#: src/gtk/connected-device.ui:144 +#: src/gtk/connected-device.ui:156 #, fuzzy msgid "Rearrange displays" msgstr "Affichage incurvé" -#: src/gtk/connected-device.ui:162 +#: src/gtk/connected-device.ui:174 msgid "Adjustments" msgstr "Réglages" -#: src/gtk/connected-device.ui:166 +#: src/gtk/connected-device.ui:178 #, fuzzy msgid "Display distances" msgstr "Distance d'affichage" -#: src/gtk/connected-device.ui:167 +#: src/gtk/connected-device.ui:179 msgid "Set how close you want displays to appear." msgstr "" -#: src/gtk/connected-device.ui:188 src/gtk/connected-device.ui:209 -#: src/gtk/connected-device.ui:401 src/gtk/connected-device.ui:430 -#: src/gtk/connected-device.ui:459 src/gtk/connected-device.ui:488 +#: src/gtk/connected-device.ui:200 src/gtk/connected-device.ui:221 +#: src/gtk/connected-device.ui:413 src/gtk/connected-device.ui:442 +#: src/gtk/connected-device.ui:471 src/gtk/connected-device.ui:500 msgid "Change" msgstr "Changer" -#: src/gtk/connected-device.ui:222 +#: src/gtk/connected-device.ui:234 msgid "Follow threshold" msgstr "Seuil de suivi" -#: src/gtk/connected-device.ui:223 +#: src/gtk/connected-device.ui:235 msgid "How far away you can look before the display follows." msgstr "Distance jusqu'où vous pouvez regarder avant que l'affichage ne suive." -#: src/gtk/connected-device.ui:246 +#: src/gtk/connected-device.ui:258 #, fuzzy msgid "Display angling" msgstr "Taille de l'affichage" -#: src/gtk/connected-device.ui:247 +#: src/gtk/connected-device.ui:259 msgid "" "When there are multiple displays, choose how they should angle towards you." msgstr "" -#: src/gtk/connected-device.ui:261 +#: src/gtk/connected-device.ui:273 msgid "Automatic" msgstr "" -#: src/gtk/connected-device.ui:262 +#: src/gtk/connected-device.ui:274 msgid "Side-angled" msgstr "" -#: src/gtk/connected-device.ui:263 +#: src/gtk/connected-device.ui:275 msgid "Top-angled" msgstr "" -#: src/gtk/connected-device.ui:264 +#: src/gtk/connected-device.ui:276 msgid "Flat" msgstr "" -#: src/gtk/connected-device.ui:274 +#: src/gtk/connected-device.ui:286 #, fuzzy msgid "Display spacing" msgstr "Taille de l'affichage" -#: src/gtk/connected-device.ui:275 +#: src/gtk/connected-device.ui:287 msgid "Put empty space between displays, when there are multiple." msgstr "" -#: src/gtk/connected-device.ui:305 +#: src/gtk/connected-device.ui:317 msgid "Viewport horizontal offset" msgstr "" -#: src/gtk/connected-device.ui:306 +#: src/gtk/connected-device.ui:318 msgid "Move the viewport to the left or right of its default position." msgstr "" -#: src/gtk/connected-device.ui:323 +#: src/gtk/connected-device.ui:335 msgid "left" msgstr "" -#: src/gtk/connected-device.ui:325 src/gtk/connected-device.ui:355 +#: src/gtk/connected-device.ui:337 src/gtk/connected-device.ui:367 msgid "center" msgstr "" -#: src/gtk/connected-device.ui:327 +#: src/gtk/connected-device.ui:339 msgid "right" msgstr "" -#: src/gtk/connected-device.ui:335 +#: src/gtk/connected-device.ui:347 msgid "Viewport vertical offset" msgstr "" -#: src/gtk/connected-device.ui:336 +#: src/gtk/connected-device.ui:348 msgid "Move the viewport up or down from its default position." msgstr "" -#: src/gtk/connected-device.ui:353 +#: src/gtk/connected-device.ui:365 msgid "down" msgstr "" -#: src/gtk/connected-device.ui:357 +#: src/gtk/connected-device.ui:369 msgid "up" msgstr "" -#: src/gtk/connected-device.ui:372 src/gtk/connected-device.ui:378 +#: src/gtk/connected-device.ui:384 src/gtk/connected-device.ui:390 msgid "Keyboard Shortcuts" msgstr "Raccourcis clavier" -#: src/gtk/connected-device.ui:381 +#: src/gtk/connected-device.ui:393 msgid "XR Effect on/off shortcut" msgstr "Raccourci on/off de l'effet XR" -#: src/gtk/connected-device.ui:382 +#: src/gtk/connected-device.ui:394 msgid "" "Quickly enable or disable the XR Effect. You may need to enable the effect " "manually once in order to enable the shortcut." @@ -383,41 +391,41 @@ msgstr "" "Activez ou désactivez rapidement l'effet XR. Il se peut que vous deviez " "activer l'effet manuellement une fois pour activer le raccourci." -#: src/gtk/connected-device.ui:410 +#: src/gtk/connected-device.ui:422 msgid "Re-center display shortcut" msgstr "Raccourci de recentrage de l'affichage" -#: src/gtk/connected-device.ui:411 +#: src/gtk/connected-device.ui:423 msgid "Pin the virtual display to the current position." msgstr "Fixez l'affichage virtuel à la position actuelle." -#: src/gtk/connected-device.ui:439 +#: src/gtk/connected-device.ui:451 #, fuzzy msgid "Toggle zoom on focus shortcut" msgstr "Raccourci de basculement du mode de suivi" -#: src/gtk/connected-device.ui:440 +#: src/gtk/connected-device.ui:452 #, fuzzy msgid "Quickly toggle zoom on focus mode." msgstr "Basculer rapidement le mode de suivi." -#: src/gtk/connected-device.ui:468 +#: src/gtk/connected-device.ui:480 msgid "Toggle follow mode shortcut" msgstr "Raccourci de basculement du mode de suivi" -#: src/gtk/connected-device.ui:469 +#: src/gtk/connected-device.ui:481 msgid "Quickly toggle follow mode." msgstr "Basculer rapidement le mode de suivi." -#: src/gtk/connected-device.ui:504 src/gtk/connected-device.ui:514 +#: src/gtk/connected-device.ui:516 src/gtk/connected-device.ui:526 msgid "Advanced Settings" msgstr "Paramètres avancés" -#: src/gtk/connected-device.ui:518 +#: src/gtk/connected-device.ui:530 msgid "Find optimal display config" msgstr "Trouver la configuration d'affichage optimale" -#: src/gtk/connected-device.ui:519 +#: src/gtk/connected-device.ui:531 msgid "" "Automatically modify the glasses display configuration for maximum " "resolution and best scaling when plugged in." @@ -426,87 +434,87 @@ msgstr "" "résolution maximale et une meilleure mise à l'échelle lorsque elles sont " "branchées." -#: src/gtk/connected-device.ui:529 +#: src/gtk/connected-device.ui:541 msgid "Use highest refresh rate" msgstr "Utiliser le taux de rafraîchissement le plus élevé" -#: src/gtk/connected-device.ui:530 +#: src/gtk/connected-device.ui:542 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:540 +#: src/gtk/connected-device.ui:552 msgid "Center on glasses' display" msgstr "" -#: src/gtk/connected-device.ui:541 +#: src/gtk/connected-device.ui:553 msgid "" "Center the viewport on the glasses' display, even if the display is not in " "the middle." msgstr "" -#: src/gtk/connected-device.ui:551 +#: src/gtk/connected-device.ui:563 msgid "Always primary display" msgstr "Affichage principal en permanence" -#: src/gtk/connected-device.ui:552 +#: src/gtk/connected-device.ui:564 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:562 +#: src/gtk/connected-device.ui:574 #, fuzzy msgid "Remove virtual displays on disable" msgstr "Affichage incurvé" -#: src/gtk/connected-device.ui:563 +#: src/gtk/connected-device.ui:575 msgid "Automatically remove virtual displays when the XR effect is disabled." msgstr "" -#: src/gtk/connected-device.ui:573 +#: src/gtk/connected-device.ui:585 msgid "Enable multi-tap detection" msgstr "" -#: src/gtk/connected-device.ui:574 +#: src/gtk/connected-device.ui:586 msgid "Enables double-tap to recenter and triple-tap to recalibrate." msgstr "" -#: src/gtk/connected-device.ui:584 +#: src/gtk/connected-device.ui:596 #, fuzzy msgid "All displays follow mode" msgstr "Affichage incurvé" -#: src/gtk/connected-device.ui:585 +#: src/gtk/connected-device.ui:597 msgid "Follow mode moves all displays, not just the focused one." msgstr "" -#: src/gtk/connected-device.ui:601 +#: src/gtk/connected-device.ui:613 msgid "Follow mode movement tracking" msgstr "" -#: src/gtk/connected-device.ui:602 +#: src/gtk/connected-device.ui:614 msgid "Choose which movements should be tracked in follow mode." msgstr "" -#: src/gtk/connected-device.ui:617 +#: src/gtk/connected-device.ui:629 msgid "Horizontal" msgstr "" -#: src/gtk/connected-device.ui:637 +#: src/gtk/connected-device.ui:649 msgid "Vertical" msgstr "" -#: src/gtk/connected-device.ui:657 +#: src/gtk/connected-device.ui:669 msgid "Tilt/roll" msgstr "" -#: src/gtk/connected-device.ui:675 +#: src/gtk/connected-device.ui:687 msgid "Movement look-ahead" msgstr "Prédiction de mouvement" -#: src/gtk/connected-device.ui:676 +#: src/gtk/connected-device.ui:688 msgid "" "Counteracts input lag by predicting head-tracking position ahead of render " "time. Stick with default unless virtual display drags behind your head " @@ -516,15 +524,15 @@ 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:694 +#: src/gtk/connected-device.ui:706 msgid "Default" msgstr "Par défaut" -#: src/gtk/connected-device.ui:706 +#: src/gtk/connected-device.ui:718 msgid "Text Scaling" msgstr "Mise à l'échelle du texte" -#: src/gtk/connected-device.ui:707 +#: src/gtk/connected-device.ui:719 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 " @@ -731,9 +739,6 @@ msgstr "À propos de BreezyDesktop" #~ msgid "Widescreen mode" #~ msgstr "Mode grand écran" -#~ msgid "Switch between flat and curved displays." -#~ msgstr "Basculez entre les affichages plats et incurvés." - #~ msgid "" #~ "Closer appears larger, further appears smaller. Controls depth when in " #~ "widescreen mode." diff --git a/ui/po/it.po b/ui/po/it.po index b53a1f6..d37bccc 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-12 08:49-0700\n" +"POT-Creation-Date: 2025-03-15 16:43-0700\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:141 +#: src/connecteddevice.py:142 #, fuzzy msgid "Set Focused Display Distance" msgstr "Distanza del display" -#: src/connecteddevice.py:142 +#: src/connecteddevice.py:143 msgid "Use a closer value so the display zooms in when you look at it." msgstr "" -#: src/connecteddevice.py:149 +#: src/connecteddevice.py:150 #, fuzzy msgid "Set All Displays Distance" msgstr "Distanza del display" -#: src/connecteddevice.py:150 +#: src/connecteddevice.py:151 msgid "Use a farther value so the displays are zoomed out when you look away." msgstr "" -#: src/connecteddevice.py:266 +#: src/connecteddevice.py:267 msgid "" "Unable to add virtual displays on this machine. Wayland and xdg-desktop-" "portal are required." msgstr "" -#: src/connecteddevice.py:300 +#: src/connecteddevice.py:301 #, fuzzy msgid "Focused display" msgstr "Distanza del display" -#: src/connecteddevice.py:306 +#: src/connecteddevice.py:307 #, fuzzy msgid "All displays" msgstr "Display curvo" @@ -232,148 +232,156 @@ msgstr "Modalità di inseguimento" msgid "Keep the focused display near the center of your view." msgstr "Mantieni il display virtuale vicino al centro del tuo campo visivo." -#: src/gtk/connected-device.ui:81 src/gtk/no-device.ui:34 +#: src/gtk/connected-device.ui:81 +msgid "Curved display" +msgstr "" + +#: src/gtk/connected-device.ui:82 +msgid "Switch between flat and curved displays." +msgstr "Passa da display piatti a curvi." + +#: src/gtk/connected-device.ui:93 src/gtk/no-device.ui:34 msgid "Disable physical displays" msgstr "" -#: src/gtk/connected-device.ui:82 src/gtk/no-device.ui:35 +#: src/gtk/connected-device.ui:94 src/gtk/no-device.ui:35 msgid "" "Automatically disable all physical displays when the XR effect is enabled." msgstr "" -#: src/gtk/connected-device.ui:92 +#: src/gtk/connected-device.ui:104 #, fuzzy msgid "Virtual displays" msgstr "Display curvo" -#: src/gtk/connected-device.ui:108 +#: src/gtk/connected-device.ui:120 msgid "1080p" msgstr "" -#: src/gtk/connected-device.ui:109 +#: src/gtk/connected-device.ui:121 msgid "1440p" msgstr "" -#: src/gtk/connected-device.ui:110 +#: src/gtk/connected-device.ui:122 msgid "Add custom" msgstr "" -#: src/gtk/connected-device.ui:124 +#: src/gtk/connected-device.ui:136 msgid "Remove custom resolution" msgstr "" -#: src/gtk/connected-device.ui:144 +#: src/gtk/connected-device.ui:156 #, fuzzy msgid "Rearrange displays" msgstr "Display curvo" -#: src/gtk/connected-device.ui:162 +#: src/gtk/connected-device.ui:174 msgid "Adjustments" msgstr "Regolazioni" -#: src/gtk/connected-device.ui:166 +#: src/gtk/connected-device.ui:178 #, fuzzy msgid "Display distances" msgstr "Distanza del display" -#: src/gtk/connected-device.ui:167 +#: src/gtk/connected-device.ui:179 msgid "Set how close you want displays to appear." msgstr "" -#: src/gtk/connected-device.ui:188 src/gtk/connected-device.ui:209 -#: src/gtk/connected-device.ui:401 src/gtk/connected-device.ui:430 -#: src/gtk/connected-device.ui:459 src/gtk/connected-device.ui:488 +#: src/gtk/connected-device.ui:200 src/gtk/connected-device.ui:221 +#: src/gtk/connected-device.ui:413 src/gtk/connected-device.ui:442 +#: src/gtk/connected-device.ui:471 src/gtk/connected-device.ui:500 msgid "Change" msgstr "Cambia" -#: src/gtk/connected-device.ui:222 +#: src/gtk/connected-device.ui:234 msgid "Follow threshold" msgstr "Soglia di inseguimento" -#: src/gtk/connected-device.ui:223 +#: src/gtk/connected-device.ui:235 msgid "How far away you can look before the display follows." msgstr "Quanto lontano puoi guardare prima che il display ti segua." -#: src/gtk/connected-device.ui:246 +#: src/gtk/connected-device.ui:258 #, fuzzy msgid "Display angling" msgstr "Dimensione del display" -#: src/gtk/connected-device.ui:247 +#: src/gtk/connected-device.ui:259 msgid "" "When there are multiple displays, choose how they should angle towards you." msgstr "" -#: src/gtk/connected-device.ui:261 +#: src/gtk/connected-device.ui:273 msgid "Automatic" msgstr "" -#: src/gtk/connected-device.ui:262 +#: src/gtk/connected-device.ui:274 msgid "Side-angled" msgstr "" -#: src/gtk/connected-device.ui:263 +#: src/gtk/connected-device.ui:275 msgid "Top-angled" msgstr "" -#: src/gtk/connected-device.ui:264 +#: src/gtk/connected-device.ui:276 msgid "Flat" msgstr "" -#: src/gtk/connected-device.ui:274 +#: src/gtk/connected-device.ui:286 #, fuzzy msgid "Display spacing" msgstr "Dimensione del display" -#: src/gtk/connected-device.ui:275 +#: src/gtk/connected-device.ui:287 msgid "Put empty space between displays, when there are multiple." msgstr "" -#: src/gtk/connected-device.ui:305 +#: src/gtk/connected-device.ui:317 msgid "Viewport horizontal offset" msgstr "" -#: src/gtk/connected-device.ui:306 +#: src/gtk/connected-device.ui:318 msgid "Move the viewport to the left or right of its default position." msgstr "" -#: src/gtk/connected-device.ui:323 +#: src/gtk/connected-device.ui:335 msgid "left" msgstr "" -#: src/gtk/connected-device.ui:325 src/gtk/connected-device.ui:355 +#: src/gtk/connected-device.ui:337 src/gtk/connected-device.ui:367 msgid "center" msgstr "" -#: src/gtk/connected-device.ui:327 +#: src/gtk/connected-device.ui:339 msgid "right" msgstr "" -#: src/gtk/connected-device.ui:335 +#: src/gtk/connected-device.ui:347 msgid "Viewport vertical offset" msgstr "" -#: src/gtk/connected-device.ui:336 +#: src/gtk/connected-device.ui:348 msgid "Move the viewport up or down from its default position." msgstr "" -#: src/gtk/connected-device.ui:353 +#: src/gtk/connected-device.ui:365 msgid "down" msgstr "" -#: src/gtk/connected-device.ui:357 +#: src/gtk/connected-device.ui:369 msgid "up" msgstr "" -#: src/gtk/connected-device.ui:372 src/gtk/connected-device.ui:378 +#: src/gtk/connected-device.ui:384 src/gtk/connected-device.ui:390 msgid "Keyboard Shortcuts" msgstr "Scorciatoie da tastiera" -#: src/gtk/connected-device.ui:381 +#: src/gtk/connected-device.ui:393 msgid "XR Effect on/off shortcut" msgstr "Scorciatoia per on/off dell'effetto XR" -#: src/gtk/connected-device.ui:382 +#: src/gtk/connected-device.ui:394 msgid "" "Quickly enable or disable the XR Effect. You may need to enable the effect " "manually once in order to enable the shortcut." @@ -382,41 +390,41 @@ msgstr "" "abilitare l'effetto manualmente almeno una volta per abilitare la " "scorciatoia da tastiera." -#: src/gtk/connected-device.ui:410 +#: src/gtk/connected-device.ui:422 msgid "Re-center display shortcut" msgstr "Scorciatoia per ricentrare il display" -#: src/gtk/connected-device.ui:411 +#: src/gtk/connected-device.ui:423 msgid "Pin the virtual display to the current position." msgstr "Fissa il display virtuale alla posizione attuale." -#: src/gtk/connected-device.ui:439 +#: src/gtk/connected-device.ui:451 #, fuzzy msgid "Toggle zoom on focus shortcut" msgstr "Scorciatoia per attivare/disattivare la modalità di inseguimento" -#: src/gtk/connected-device.ui:440 +#: src/gtk/connected-device.ui:452 #, fuzzy msgid "Quickly toggle zoom on focus mode." msgstr "Attivazione/disattivazione rapida della modalità di inseguimento." -#: src/gtk/connected-device.ui:468 +#: src/gtk/connected-device.ui:480 msgid "Toggle follow mode shortcut" msgstr "Scorciatoia per attivare/disattivare la modalità di inseguimento" -#: src/gtk/connected-device.ui:469 +#: src/gtk/connected-device.ui:481 msgid "Quickly toggle follow mode." msgstr "Attivazione/disattivazione rapida della modalità di inseguimento." -#: src/gtk/connected-device.ui:504 src/gtk/connected-device.ui:514 +#: src/gtk/connected-device.ui:516 src/gtk/connected-device.ui:526 msgid "Advanced Settings" msgstr "Impostazioni avanzate" -#: src/gtk/connected-device.ui:518 +#: src/gtk/connected-device.ui:530 msgid "Find optimal display config" msgstr "Trova la configurazione ottimale del display" -#: src/gtk/connected-device.ui:519 +#: src/gtk/connected-device.ui:531 msgid "" "Automatically modify the glasses display configuration for maximum " "resolution and best scaling when plugged in." @@ -424,87 +432,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:529 +#: src/gtk/connected-device.ui:541 msgid "Use highest refresh rate" msgstr "Usa la frequenza di aggiornamento più elevata" -#: src/gtk/connected-device.ui:530 +#: src/gtk/connected-device.ui:542 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:540 +#: src/gtk/connected-device.ui:552 msgid "Center on glasses' display" msgstr "" -#: src/gtk/connected-device.ui:541 +#: src/gtk/connected-device.ui:553 msgid "" "Center the viewport on the glasses' display, even if the display is not in " "the middle." msgstr "" -#: src/gtk/connected-device.ui:551 +#: src/gtk/connected-device.ui:563 msgid "Always primary display" msgstr "Imposta sempre come display primario" -#: src/gtk/connected-device.ui:552 +#: src/gtk/connected-device.ui:564 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:562 +#: src/gtk/connected-device.ui:574 #, fuzzy msgid "Remove virtual displays on disable" msgstr "Display curvo" -#: src/gtk/connected-device.ui:563 +#: src/gtk/connected-device.ui:575 msgid "Automatically remove virtual displays when the XR effect is disabled." msgstr "" -#: src/gtk/connected-device.ui:573 +#: src/gtk/connected-device.ui:585 msgid "Enable multi-tap detection" msgstr "" -#: src/gtk/connected-device.ui:574 +#: src/gtk/connected-device.ui:586 msgid "Enables double-tap to recenter and triple-tap to recalibrate." msgstr "" -#: src/gtk/connected-device.ui:584 +#: src/gtk/connected-device.ui:596 #, fuzzy msgid "All displays follow mode" msgstr "Display curvo" -#: src/gtk/connected-device.ui:585 +#: src/gtk/connected-device.ui:597 msgid "Follow mode moves all displays, not just the focused one." msgstr "" -#: src/gtk/connected-device.ui:601 +#: src/gtk/connected-device.ui:613 msgid "Follow mode movement tracking" msgstr "" -#: src/gtk/connected-device.ui:602 +#: src/gtk/connected-device.ui:614 msgid "Choose which movements should be tracked in follow mode." msgstr "" -#: src/gtk/connected-device.ui:617 +#: src/gtk/connected-device.ui:629 msgid "Horizontal" msgstr "" -#: src/gtk/connected-device.ui:637 +#: src/gtk/connected-device.ui:649 msgid "Vertical" msgstr "" -#: src/gtk/connected-device.ui:657 +#: src/gtk/connected-device.ui:669 msgid "Tilt/roll" msgstr "" -#: src/gtk/connected-device.ui:675 +#: src/gtk/connected-device.ui:687 msgid "Movement look-ahead" msgstr "Anticipo del movimento" -#: src/gtk/connected-device.ui:676 +#: src/gtk/connected-device.ui:688 msgid "" "Counteracts input lag by predicting head-tracking position ahead of render " "time. Stick with default unless virtual display drags behind your head " @@ -515,15 +523,15 @@ 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:694 +#: src/gtk/connected-device.ui:706 msgid "Default" msgstr "Predefinito" -#: src/gtk/connected-device.ui:706 +#: src/gtk/connected-device.ui:718 msgid "Text Scaling" msgstr "Ridimensionamento del testo" -#: src/gtk/connected-device.ui:707 +#: src/gtk/connected-device.ui:719 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 " @@ -729,9 +737,6 @@ msgstr "Informazioni su BreezyDesktop" #~ msgid "Widescreen mode" #~ msgstr "Modalità widescreen" -#~ msgid "Switch between flat and curved displays." -#~ msgstr "Passa da display piatti a curvi." - #~ msgid "" #~ "Closer appears larger, further appears smaller. Controls depth when in " #~ "widescreen mode." diff --git a/ui/po/ja.po b/ui/po/ja.po index b2ce894..c4f6772 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-12 08:49-0700\n" +"POT-Creation-Date: 2025-03-15 16:43-0700\n" "PO-Revision-Date: 2024-08-02 20:55-0700\n" "Last-Translator: \n" "Language-Team: Japanese \n" @@ -31,33 +31,33 @@ msgstr "メガネを3Dモードに切り替え、表示の幅を2倍にします msgid "This feature is not currently supported for your device." msgstr "現在接続されているデバイスはこの機能に対応していません。" -#: src/connecteddevice.py:141 +#: src/connecteddevice.py:142 msgid "Set Focused Display Distance" msgstr "フォーカスされたディスプレイ距離" -#: src/connecteddevice.py:142 +#: src/connecteddevice.py:143 msgid "Use a closer value so the display zooms in when you look at it." msgstr "近くに設定すると見たディスプレイにズームインします。" -#: src/connecteddevice.py:149 +#: src/connecteddevice.py:150 msgid "Set All Displays Distance" msgstr "すべてのディスプレイ距離" -#: src/connecteddevice.py:150 +#: src/connecteddevice.py:151 msgid "Use a farther value so the displays are zoomed out when you look away." msgstr "遠くに設定すると視線の外れたディスプレイがズームアウトします。" -#: src/connecteddevice.py:266 +#: src/connecteddevice.py:267 msgid "" "Unable to add virtual displays on this machine. Wayland and xdg-desktop-" "portal are required." msgstr "仮想ディスプレイが追加できません。" -#: src/connecteddevice.py:300 +#: src/connecteddevice.py:301 msgid "Focused display" msgstr "フォーカスされたディスプレイ" -#: src/connecteddevice.py:306 +#: src/connecteddevice.py:307 msgid "All displays" msgstr "すべてのディスプレイ" @@ -231,143 +231,151 @@ msgstr "フォローモード" msgid "Keep the focused display near the center of your view." msgstr "仮想ディスプレイを視界の中心近くに保ちます。" -#: src/gtk/connected-device.ui:81 src/gtk/no-device.ui:34 +#: src/gtk/connected-device.ui:81 +msgid "Curved display" +msgstr "曲面ディスプレイ" + +#: src/gtk/connected-device.ui:82 +msgid "Switch between flat and curved displays." +msgstr "平面と曲面ディスプレイを切り替えます。" + +#: src/gtk/connected-device.ui:93 src/gtk/no-device.ui:34 msgid "Disable physical displays" msgstr "物理ディスプレイの無効化" -#: src/gtk/connected-device.ui:82 src/gtk/no-device.ui:35 +#: src/gtk/connected-device.ui:94 src/gtk/no-device.ui:35 msgid "" "Automatically disable all physical displays when the XR effect is enabled." msgstr "XRエフェクト有効時、自動的に物理ディスプレイを無効化する。" -#: src/gtk/connected-device.ui:92 +#: src/gtk/connected-device.ui:104 msgid "Virtual displays" msgstr "仮想ディスプレイ" -#: src/gtk/connected-device.ui:108 +#: src/gtk/connected-device.ui:120 msgid "1080p" msgstr "1080p" -#: src/gtk/connected-device.ui:109 +#: src/gtk/connected-device.ui:121 msgid "1440p" msgstr "1440p" -#: src/gtk/connected-device.ui:110 +#: src/gtk/connected-device.ui:122 msgid "Add custom" msgstr "カスタム解像度" -#: src/gtk/connected-device.ui:124 +#: src/gtk/connected-device.ui:136 msgid "Remove custom resolution" msgstr "カスタム解像度の削除" -#: src/gtk/connected-device.ui:144 +#: src/gtk/connected-device.ui:156 msgid "Rearrange displays" msgstr "ディスプレイの配置" -#: src/gtk/connected-device.ui:162 +#: src/gtk/connected-device.ui:174 msgid "Adjustments" msgstr "調整" -#: src/gtk/connected-device.ui:166 +#: src/gtk/connected-device.ui:178 msgid "Display distances" msgstr "ディスプレイ距離" -#: src/gtk/connected-device.ui:167 +#: src/gtk/connected-device.ui:179 msgid "Set how close you want displays to appear." msgstr "ディスプレイの表示距離を設定。" -#: src/gtk/connected-device.ui:188 src/gtk/connected-device.ui:209 -#: src/gtk/connected-device.ui:401 src/gtk/connected-device.ui:430 -#: src/gtk/connected-device.ui:459 src/gtk/connected-device.ui:488 +#: src/gtk/connected-device.ui:200 src/gtk/connected-device.ui:221 +#: src/gtk/connected-device.ui:413 src/gtk/connected-device.ui:442 +#: src/gtk/connected-device.ui:471 src/gtk/connected-device.ui:500 msgid "Change" msgstr "変更" -#: src/gtk/connected-device.ui:222 +#: src/gtk/connected-device.ui:234 msgid "Follow threshold" msgstr "フォローしきい値" -#: src/gtk/connected-device.ui:223 +#: src/gtk/connected-device.ui:235 msgid "How far away you can look before the display follows." msgstr "ディスプレイがフォロー(追従)を開始するまでの距離" -#: src/gtk/connected-device.ui:246 +#: src/gtk/connected-device.ui:258 msgid "Display angling" msgstr "ディスプレイの向き" -#: src/gtk/connected-device.ui:247 +#: src/gtk/connected-device.ui:259 msgid "" "When there are multiple displays, choose how they should angle towards you." msgstr "複数のディスプレイがある場合、ディスプレイの向きを選択します。" -#: src/gtk/connected-device.ui:261 +#: src/gtk/connected-device.ui:273 msgid "Automatic" msgstr "自動" -#: src/gtk/connected-device.ui:262 +#: src/gtk/connected-device.ui:274 msgid "Side-angled" msgstr "横向き" -#: src/gtk/connected-device.ui:263 +#: src/gtk/connected-device.ui:275 msgid "Top-angled" msgstr "縦向き" -#: src/gtk/connected-device.ui:264 +#: src/gtk/connected-device.ui:276 msgid "Flat" msgstr "平面" -#: src/gtk/connected-device.ui:274 +#: src/gtk/connected-device.ui:286 msgid "Display spacing" msgstr "ディスプレイの隙間" -#: src/gtk/connected-device.ui:275 +#: src/gtk/connected-device.ui:287 msgid "Put empty space between displays, when there are multiple." msgstr "複数のディスプレイがある場合、ディスプレイ間の隙間を設定します。" -#: src/gtk/connected-device.ui:305 +#: src/gtk/connected-device.ui:317 msgid "Viewport horizontal offset" msgstr "表示域の水平オフセット" -#: src/gtk/connected-device.ui:306 +#: src/gtk/connected-device.ui:318 msgid "Move the viewport to the left or right of its default position." msgstr "表示域を左右に移動させます。" -#: src/gtk/connected-device.ui:323 +#: src/gtk/connected-device.ui:335 msgid "left" msgstr "左" -#: src/gtk/connected-device.ui:325 src/gtk/connected-device.ui:355 +#: src/gtk/connected-device.ui:337 src/gtk/connected-device.ui:367 msgid "center" msgstr "中央" -#: src/gtk/connected-device.ui:327 +#: src/gtk/connected-device.ui:339 msgid "right" msgstr "→" -#: src/gtk/connected-device.ui:335 +#: src/gtk/connected-device.ui:347 msgid "Viewport vertical offset" msgstr "表示域の垂直オフセット" -#: src/gtk/connected-device.ui:336 +#: src/gtk/connected-device.ui:348 msgid "Move the viewport up or down from its default position." msgstr "表示域を上下に移動させます。" -#: src/gtk/connected-device.ui:353 +#: src/gtk/connected-device.ui:365 msgid "down" msgstr "下" -#: src/gtk/connected-device.ui:357 +#: src/gtk/connected-device.ui:369 msgid "up" msgstr "上" -#: src/gtk/connected-device.ui:372 src/gtk/connected-device.ui:378 +#: src/gtk/connected-device.ui:384 src/gtk/connected-device.ui:390 msgid "Keyboard Shortcuts" msgstr "キーボードショートカット" -#: src/gtk/connected-device.ui:381 +#: src/gtk/connected-device.ui:393 msgid "XR Effect on/off shortcut" msgstr "XRエフェクトの切り替え" -#: src/gtk/connected-device.ui:382 +#: src/gtk/connected-device.ui:394 msgid "" "Quickly enable or disable the XR Effect. You may need to enable the effect " "manually once in order to enable the shortcut." @@ -375,39 +383,39 @@ msgstr "" "XRエフェクトの有効・無効を切り替えます。このショートカットを有効にするために" "手動で1回XRエフェクトを有効にする必要があります。" -#: src/gtk/connected-device.ui:410 +#: src/gtk/connected-device.ui:422 msgid "Re-center display shortcut" msgstr "ディスプレイを中央へ移動" -#: src/gtk/connected-device.ui:411 +#: src/gtk/connected-device.ui:423 msgid "Pin the virtual display to the current position." msgstr "仮想ディスプレイを現在の視点に固定します。" -#: src/gtk/connected-device.ui:439 +#: src/gtk/connected-device.ui:451 msgid "Toggle zoom on focus shortcut" msgstr "フォーカス時のズーム切り替え" -#: src/gtk/connected-device.ui:440 +#: src/gtk/connected-device.ui:452 msgid "Quickly toggle zoom on focus mode." msgstr "フォーカス時のズームをすばやく切り替えます。" -#: src/gtk/connected-device.ui:468 +#: src/gtk/connected-device.ui:480 msgid "Toggle follow mode shortcut" msgstr "フォローモードの切り替え" -#: src/gtk/connected-device.ui:469 +#: src/gtk/connected-device.ui:481 msgid "Quickly toggle follow mode." msgstr "フォローモードのオン/オフをすばやく切り替えます。" -#: src/gtk/connected-device.ui:504 src/gtk/connected-device.ui:514 +#: src/gtk/connected-device.ui:516 src/gtk/connected-device.ui:526 msgid "Advanced Settings" msgstr "詳細設定" -#: src/gtk/connected-device.ui:518 +#: src/gtk/connected-device.ui:530 msgid "Find optimal display config" msgstr "ディスプレイ設定を最適化する" -#: src/gtk/connected-device.ui:519 +#: src/gtk/connected-device.ui:531 msgid "" "Automatically modify the glasses display configuration for maximum " "resolution and best scaling when plugged in." @@ -415,83 +423,89 @@ msgstr "" "メガネ接続時、最大解像度と最適なスケーリングのためにディスプレイ設定を自動的" "に変更します。" -#: src/gtk/connected-device.ui:529 +#: src/gtk/connected-device.ui:541 msgid "Use highest refresh rate" msgstr "最大のリフレッシュレートを使用する" -#: src/gtk/connected-device.ui:530 +#: src/gtk/connected-device.ui:542 msgid "Refresh rate may affect performance, disable this to set it manually." msgstr "" "リフレッシュレートはパフォーマンスに影響を与える可能性があります。手動で設定" "する場合は無効にしてください。" -#: src/gtk/connected-device.ui:540 +#: src/gtk/connected-device.ui:552 msgid "Center on glasses' display" msgstr "メガネのディスプレイを中央に" -#: src/gtk/connected-device.ui:541 +#: src/gtk/connected-device.ui:553 msgid "" "Center the viewport on the glasses' display, even if the display is not in " "the middle." -msgstr "ディスプレイが中央にない場合でも、表示域をメガネのディスプレイの中央に配置します。" +msgstr "" +"ディスプレイが中央にない場合でも、表示域をメガネのディスプレイの中央に配置し" +"ます。" -#: src/gtk/connected-device.ui:551 +#: src/gtk/connected-device.ui:563 msgid "Always primary display" msgstr "常にプライマリディスプレイにする" -#: src/gtk/connected-device.ui:552 +#: src/gtk/connected-device.ui:564 msgid "Automatically set the glasses as the primary display when plugged in." msgstr "メガネ接続時、自動的にプライマリディスプレイにします。" -#: src/gtk/connected-device.ui:562 +#: src/gtk/connected-device.ui:574 msgid "Remove virtual displays on disable" msgstr "無効時に仮想ディスプレイ削除" -#: src/gtk/connected-device.ui:563 +#: src/gtk/connected-device.ui:575 msgid "Automatically remove virtual displays when the XR effect is disabled." msgstr "XRエフェクト無効時に仮想ディスプレイを自動的に削除します。" -#: src/gtk/connected-device.ui:573 +#: src/gtk/connected-device.ui:585 msgid "Enable multi-tap detection" msgstr "マルチタップ認識を有効化" -#: src/gtk/connected-device.ui:574 +#: src/gtk/connected-device.ui:586 msgid "Enables double-tap to recenter and triple-tap to recalibrate." -msgstr "ダブルタップで中央へ移動、トリプルタップで再キャリブレーションを有効にします。" +msgstr "" +"ダブルタップで中央へ移動、トリプルタップで再キャリブレーションを有効にしま" +"す。" -#: src/gtk/connected-device.ui:584 +#: src/gtk/connected-device.ui:596 msgid "All displays follow mode" msgstr "全画面フォローモード" -#: src/gtk/connected-device.ui:585 +#: src/gtk/connected-device.ui:597 msgid "Follow mode moves all displays, not just the focused one." -msgstr "フォローモードはフォーカスされてるディスプレイだけでなく全ての画面が移動します。" +msgstr "" +"フォローモードはフォーカスされてるディスプレイだけでなく全ての画面が移動しま" +"す。" -#: src/gtk/connected-device.ui:601 +#: src/gtk/connected-device.ui:613 msgid "Follow mode movement tracking" msgstr "フォローモード移動設定" -#: src/gtk/connected-device.ui:602 +#: src/gtk/connected-device.ui:614 msgid "Choose which movements should be tracked in follow mode." msgstr "フォローモードで追跡する方法を選択します。" -#: src/gtk/connected-device.ui:617 +#: src/gtk/connected-device.ui:629 msgid "Horizontal" msgstr "水平" -#: src/gtk/connected-device.ui:637 +#: src/gtk/connected-device.ui:649 msgid "Vertical" msgstr "垂直" -#: src/gtk/connected-device.ui:657 +#: src/gtk/connected-device.ui:669 msgid "Tilt/roll" msgstr "傾き・回転" -#: src/gtk/connected-device.ui:675 +#: src/gtk/connected-device.ui:687 msgid "Movement look-ahead" msgstr "動きの先読み" -#: src/gtk/connected-device.ui:676 +#: src/gtk/connected-device.ui:688 msgid "" "Counteracts input lag by predicting head-tracking position ahead of render " "time. Stick with default unless virtual display drags behind your head " @@ -501,15 +515,15 @@ msgstr "" "ます。仮想ディスプレイが頭の動きに遅れたり、先に進んだり、非常に揺れたりする" "場合を除き、デフォルトのままで問題ありません。" -#: src/gtk/connected-device.ui:694 +#: src/gtk/connected-device.ui:706 msgid "Default" msgstr "デフォルト" -#: src/gtk/connected-device.ui:706 +#: src/gtk/connected-device.ui:718 msgid "Text Scaling" msgstr "テキストスケーリング" -#: src/gtk/connected-device.ui:707 +#: src/gtk/connected-device.ui:719 msgid "Scaling text below 1.0 will simulate a higher resolution display" msgstr "" "テキストを1.0未満にスケーリングすると、高解像度ディスプレイをシミュレートしま" @@ -712,9 +726,6 @@ msgstr "Breezy Desktopについて" #~ msgid "Widescreen mode" #~ msgstr "ワイドスクリーンモード" -#~ msgid "Switch between flat and curved displays." -#~ msgstr "平面と曲面ディスプレイを切り替えます。" - #~ msgid "" #~ "Closer appears larger, further appears smaller. Controls depth when in " #~ "widescreen mode." diff --git a/ui/po/mo/de/LC_MESSAGES/breezydesktop.mo b/ui/po/mo/de/LC_MESSAGES/breezydesktop.mo index 812e950..d3a9d90 100644 Binary files a/ui/po/mo/de/LC_MESSAGES/breezydesktop.mo and b/ui/po/mo/de/LC_MESSAGES/breezydesktop.mo differ diff --git a/ui/po/mo/es/LC_MESSAGES/breezydesktop.mo b/ui/po/mo/es/LC_MESSAGES/breezydesktop.mo index 048a704..a216226 100644 Binary files a/ui/po/mo/es/LC_MESSAGES/breezydesktop.mo and b/ui/po/mo/es/LC_MESSAGES/breezydesktop.mo differ diff --git a/ui/po/mo/fr/LC_MESSAGES/breezydesktop.mo b/ui/po/mo/fr/LC_MESSAGES/breezydesktop.mo index c8d36cb..d93c0bf 100644 Binary files a/ui/po/mo/fr/LC_MESSAGES/breezydesktop.mo and b/ui/po/mo/fr/LC_MESSAGES/breezydesktop.mo differ diff --git a/ui/po/mo/it/LC_MESSAGES/breezydesktop.mo b/ui/po/mo/it/LC_MESSAGES/breezydesktop.mo index 56522b1..4686867 100644 Binary files a/ui/po/mo/it/LC_MESSAGES/breezydesktop.mo and b/ui/po/mo/it/LC_MESSAGES/breezydesktop.mo differ diff --git a/ui/po/mo/ja/LC_MESSAGES/breezydesktop.mo b/ui/po/mo/ja/LC_MESSAGES/breezydesktop.mo index 60fc913..e3fd491 100644 Binary files a/ui/po/mo/ja/LC_MESSAGES/breezydesktop.mo and b/ui/po/mo/ja/LC_MESSAGES/breezydesktop.mo differ diff --git a/ui/po/mo/pt_BR/LC_MESSAGES/breezydesktop.mo b/ui/po/mo/pt_BR/LC_MESSAGES/breezydesktop.mo index f9fdcaa..e49a763 100644 Binary files a/ui/po/mo/pt_BR/LC_MESSAGES/breezydesktop.mo and b/ui/po/mo/pt_BR/LC_MESSAGES/breezydesktop.mo differ diff --git a/ui/po/mo/ru/LC_MESSAGES/breezydesktop.mo b/ui/po/mo/ru/LC_MESSAGES/breezydesktop.mo index 337a833..c3dc5b5 100644 Binary files a/ui/po/mo/ru/LC_MESSAGES/breezydesktop.mo and b/ui/po/mo/ru/LC_MESSAGES/breezydesktop.mo differ diff --git a/ui/po/mo/sv/LC_MESSAGES/breezydesktop.mo b/ui/po/mo/sv/LC_MESSAGES/breezydesktop.mo index aafc036..8aaa3b6 100644 Binary files a/ui/po/mo/sv/LC_MESSAGES/breezydesktop.mo and b/ui/po/mo/sv/LC_MESSAGES/breezydesktop.mo differ diff --git a/ui/po/mo/uk_UA/LC_MESSAGES/breezydesktop.mo b/ui/po/mo/uk_UA/LC_MESSAGES/breezydesktop.mo index f9f6b67..5a8a59f 100644 Binary files a/ui/po/mo/uk_UA/LC_MESSAGES/breezydesktop.mo and b/ui/po/mo/uk_UA/LC_MESSAGES/breezydesktop.mo differ diff --git a/ui/po/mo/zh_CN/LC_MESSAGES/breezydesktop.mo b/ui/po/mo/zh_CN/LC_MESSAGES/breezydesktop.mo index 38578a6..c55149b 100644 Binary files a/ui/po/mo/zh_CN/LC_MESSAGES/breezydesktop.mo and b/ui/po/mo/zh_CN/LC_MESSAGES/breezydesktop.mo differ diff --git a/ui/po/pl.po b/ui/po/pl.po index b5fded0..a6d3258 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-12 08:49-0700\n" +"POT-Creation-Date: 2025-03-15 16:43-0700\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:141 +#: src/connecteddevice.py:142 msgid "Set Focused Display Distance" msgstr "" -#: src/connecteddevice.py:142 +#: src/connecteddevice.py:143 msgid "Use a closer value so the display zooms in when you look at it." msgstr "" -#: src/connecteddevice.py:149 +#: src/connecteddevice.py:150 msgid "Set All Displays Distance" msgstr "" -#: src/connecteddevice.py:150 +#: src/connecteddevice.py:151 msgid "Use a farther value so the displays are zoomed out when you look away." msgstr "" -#: src/connecteddevice.py:266 +#: src/connecteddevice.py:267 msgid "" "Unable to add virtual displays on this machine. Wayland and xdg-desktop-" "portal are required." msgstr "" -#: src/connecteddevice.py:300 +#: src/connecteddevice.py:301 msgid "Focused display" msgstr "" -#: src/connecteddevice.py:306 +#: src/connecteddevice.py:307 msgid "All displays" msgstr "" @@ -226,276 +226,284 @@ msgstr "" msgid "Keep the focused display near the center of your view." msgstr "" -#: src/gtk/connected-device.ui:81 src/gtk/no-device.ui:34 +#: src/gtk/connected-device.ui:81 +msgid "Curved display" +msgstr "" + +#: src/gtk/connected-device.ui:82 +msgid "Switch between flat and curved displays." +msgstr "" + +#: src/gtk/connected-device.ui:93 src/gtk/no-device.ui:34 msgid "Disable physical displays" msgstr "" -#: src/gtk/connected-device.ui:82 src/gtk/no-device.ui:35 +#: src/gtk/connected-device.ui:94 src/gtk/no-device.ui:35 msgid "" "Automatically disable all physical displays when the XR effect is enabled." msgstr "" -#: src/gtk/connected-device.ui:92 +#: src/gtk/connected-device.ui:104 msgid "Virtual displays" msgstr "" -#: src/gtk/connected-device.ui:108 +#: src/gtk/connected-device.ui:120 msgid "1080p" msgstr "" -#: src/gtk/connected-device.ui:109 +#: src/gtk/connected-device.ui:121 msgid "1440p" msgstr "" -#: src/gtk/connected-device.ui:110 +#: src/gtk/connected-device.ui:122 msgid "Add custom" msgstr "" -#: src/gtk/connected-device.ui:124 +#: src/gtk/connected-device.ui:136 msgid "Remove custom resolution" msgstr "" -#: src/gtk/connected-device.ui:144 +#: src/gtk/connected-device.ui:156 msgid "Rearrange displays" msgstr "" -#: src/gtk/connected-device.ui:162 +#: src/gtk/connected-device.ui:174 msgid "Adjustments" msgstr "" -#: src/gtk/connected-device.ui:166 +#: src/gtk/connected-device.ui:178 msgid "Display distances" msgstr "" -#: src/gtk/connected-device.ui:167 +#: src/gtk/connected-device.ui:179 msgid "Set how close you want displays to appear." msgstr "" -#: src/gtk/connected-device.ui:188 src/gtk/connected-device.ui:209 -#: src/gtk/connected-device.ui:401 src/gtk/connected-device.ui:430 -#: src/gtk/connected-device.ui:459 src/gtk/connected-device.ui:488 +#: src/gtk/connected-device.ui:200 src/gtk/connected-device.ui:221 +#: src/gtk/connected-device.ui:413 src/gtk/connected-device.ui:442 +#: src/gtk/connected-device.ui:471 src/gtk/connected-device.ui:500 msgid "Change" msgstr "" -#: src/gtk/connected-device.ui:222 +#: src/gtk/connected-device.ui:234 msgid "Follow threshold" msgstr "" -#: src/gtk/connected-device.ui:223 +#: src/gtk/connected-device.ui:235 msgid "How far away you can look before the display follows." msgstr "" -#: src/gtk/connected-device.ui:246 +#: src/gtk/connected-device.ui:258 msgid "Display angling" msgstr "" -#: src/gtk/connected-device.ui:247 +#: src/gtk/connected-device.ui:259 msgid "" "When there are multiple displays, choose how they should angle towards you." msgstr "" -#: src/gtk/connected-device.ui:261 +#: src/gtk/connected-device.ui:273 msgid "Automatic" msgstr "" -#: src/gtk/connected-device.ui:262 +#: src/gtk/connected-device.ui:274 msgid "Side-angled" msgstr "" -#: src/gtk/connected-device.ui:263 +#: src/gtk/connected-device.ui:275 msgid "Top-angled" msgstr "" -#: src/gtk/connected-device.ui:264 +#: src/gtk/connected-device.ui:276 msgid "Flat" msgstr "" -#: src/gtk/connected-device.ui:274 +#: src/gtk/connected-device.ui:286 msgid "Display spacing" msgstr "" -#: src/gtk/connected-device.ui:275 +#: src/gtk/connected-device.ui:287 msgid "Put empty space between displays, when there are multiple." msgstr "" -#: src/gtk/connected-device.ui:305 +#: src/gtk/connected-device.ui:317 msgid "Viewport horizontal offset" msgstr "" -#: src/gtk/connected-device.ui:306 +#: src/gtk/connected-device.ui:318 msgid "Move the viewport to the left or right of its default position." msgstr "" -#: src/gtk/connected-device.ui:323 +#: src/gtk/connected-device.ui:335 msgid "left" msgstr "" -#: src/gtk/connected-device.ui:325 src/gtk/connected-device.ui:355 +#: src/gtk/connected-device.ui:337 src/gtk/connected-device.ui:367 msgid "center" msgstr "" -#: src/gtk/connected-device.ui:327 +#: src/gtk/connected-device.ui:339 msgid "right" msgstr "" -#: src/gtk/connected-device.ui:335 +#: src/gtk/connected-device.ui:347 msgid "Viewport vertical offset" msgstr "" -#: src/gtk/connected-device.ui:336 +#: src/gtk/connected-device.ui:348 msgid "Move the viewport up or down from its default position." msgstr "" -#: src/gtk/connected-device.ui:353 +#: src/gtk/connected-device.ui:365 msgid "down" msgstr "" -#: src/gtk/connected-device.ui:357 +#: src/gtk/connected-device.ui:369 msgid "up" msgstr "" -#: src/gtk/connected-device.ui:372 src/gtk/connected-device.ui:378 +#: src/gtk/connected-device.ui:384 src/gtk/connected-device.ui:390 msgid "Keyboard Shortcuts" msgstr "" -#: src/gtk/connected-device.ui:381 +#: src/gtk/connected-device.ui:393 msgid "XR Effect on/off shortcut" msgstr "" -#: src/gtk/connected-device.ui:382 +#: src/gtk/connected-device.ui:394 msgid "" "Quickly enable or disable the XR Effect. You may need to enable the effect " "manually once in order to enable the shortcut." msgstr "" -#: src/gtk/connected-device.ui:410 +#: src/gtk/connected-device.ui:422 msgid "Re-center display shortcut" msgstr "" -#: src/gtk/connected-device.ui:411 +#: src/gtk/connected-device.ui:423 msgid "Pin the virtual display to the current position." msgstr "" -#: src/gtk/connected-device.ui:439 +#: src/gtk/connected-device.ui:451 msgid "Toggle zoom on focus shortcut" msgstr "" -#: src/gtk/connected-device.ui:440 +#: src/gtk/connected-device.ui:452 msgid "Quickly toggle zoom on focus mode." msgstr "" -#: src/gtk/connected-device.ui:468 +#: src/gtk/connected-device.ui:480 msgid "Toggle follow mode shortcut" msgstr "" -#: src/gtk/connected-device.ui:469 +#: src/gtk/connected-device.ui:481 msgid "Quickly toggle follow mode." msgstr "" -#: src/gtk/connected-device.ui:504 src/gtk/connected-device.ui:514 +#: src/gtk/connected-device.ui:516 src/gtk/connected-device.ui:526 msgid "Advanced Settings" msgstr "" -#: src/gtk/connected-device.ui:518 +#: src/gtk/connected-device.ui:530 msgid "Find optimal display config" msgstr "" -#: src/gtk/connected-device.ui:519 +#: src/gtk/connected-device.ui:531 msgid "" "Automatically modify the glasses display configuration for maximum " "resolution and best scaling when plugged in." msgstr "" -#: src/gtk/connected-device.ui:529 +#: src/gtk/connected-device.ui:541 msgid "Use highest refresh rate" msgstr "" -#: src/gtk/connected-device.ui:530 +#: src/gtk/connected-device.ui:542 msgid "Refresh rate may affect performance, disable this to set it manually." msgstr "" -#: src/gtk/connected-device.ui:540 +#: src/gtk/connected-device.ui:552 msgid "Center on glasses' display" msgstr "" -#: src/gtk/connected-device.ui:541 +#: src/gtk/connected-device.ui:553 msgid "" "Center the viewport on the glasses' display, even if the display is not in " "the middle." msgstr "" -#: src/gtk/connected-device.ui:551 +#: src/gtk/connected-device.ui:563 msgid "Always primary display" msgstr "" -#: src/gtk/connected-device.ui:552 +#: src/gtk/connected-device.ui:564 msgid "Automatically set the glasses as the primary display when plugged in." msgstr "" -#: src/gtk/connected-device.ui:562 +#: src/gtk/connected-device.ui:574 msgid "Remove virtual displays on disable" msgstr "" -#: src/gtk/connected-device.ui:563 +#: src/gtk/connected-device.ui:575 msgid "Automatically remove virtual displays when the XR effect is disabled." msgstr "" -#: src/gtk/connected-device.ui:573 +#: src/gtk/connected-device.ui:585 msgid "Enable multi-tap detection" msgstr "" -#: src/gtk/connected-device.ui:574 +#: src/gtk/connected-device.ui:586 msgid "Enables double-tap to recenter and triple-tap to recalibrate." msgstr "" -#: src/gtk/connected-device.ui:584 +#: src/gtk/connected-device.ui:596 msgid "All displays follow mode" msgstr "" -#: src/gtk/connected-device.ui:585 +#: src/gtk/connected-device.ui:597 msgid "Follow mode moves all displays, not just the focused one." msgstr "" -#: src/gtk/connected-device.ui:601 +#: src/gtk/connected-device.ui:613 msgid "Follow mode movement tracking" msgstr "" -#: src/gtk/connected-device.ui:602 +#: src/gtk/connected-device.ui:614 msgid "Choose which movements should be tracked in follow mode." msgstr "" -#: src/gtk/connected-device.ui:617 +#: src/gtk/connected-device.ui:629 msgid "Horizontal" msgstr "" -#: src/gtk/connected-device.ui:637 +#: src/gtk/connected-device.ui:649 msgid "Vertical" msgstr "" -#: src/gtk/connected-device.ui:657 +#: src/gtk/connected-device.ui:669 msgid "Tilt/roll" msgstr "" -#: src/gtk/connected-device.ui:675 +#: src/gtk/connected-device.ui:687 msgid "Movement look-ahead" msgstr "" -#: src/gtk/connected-device.ui:676 +#: src/gtk/connected-device.ui:688 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:694 +#: src/gtk/connected-device.ui:706 msgid "Default" msgstr "" -#: src/gtk/connected-device.ui:706 +#: src/gtk/connected-device.ui:718 msgid "Text Scaling" msgstr "" -#: src/gtk/connected-device.ui:707 +#: src/gtk/connected-device.ui:719 msgid "Scaling text below 1.0 will simulate a higher resolution display" msgstr "" diff --git a/ui/po/pt_BR.po b/ui/po/pt_BR.po index 843ebf3..f5d70f0 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-12 08:49-0700\n" +"POT-Creation-Date: 2025-03-15 16:43-0700\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:141 +#: src/connecteddevice.py:142 #, fuzzy msgid "Set Focused Display Distance" msgstr "Расстояние дисплея" -#: src/connecteddevice.py:142 +#: src/connecteddevice.py:143 msgid "Use a closer value so the display zooms in when you look at it." msgstr "" -#: src/connecteddevice.py:149 +#: src/connecteddevice.py:150 #, fuzzy msgid "Set All Displays Distance" msgstr "Расстояние дисплея" -#: src/connecteddevice.py:150 +#: src/connecteddevice.py:151 msgid "Use a farther value so the displays are zoomed out when you look away." msgstr "" -#: src/connecteddevice.py:266 +#: src/connecteddevice.py:267 msgid "" "Unable to add virtual displays on this machine. Wayland and xdg-desktop-" "portal are required." msgstr "" -#: src/connecteddevice.py:300 +#: src/connecteddevice.py:301 #, fuzzy msgid "Focused display" msgstr "Расстояние дисплея" -#: src/connecteddevice.py:306 +#: src/connecteddevice.py:307 #, fuzzy msgid "All displays" msgstr "Изогнутый дисплей" @@ -232,189 +232,197 @@ msgstr "Режим следования" msgid "Keep the focused display near the center of your view." msgstr "Поддерживает виртуальный дисплей вблизи центра вашего зрения." -#: src/gtk/connected-device.ui:81 src/gtk/no-device.ui:34 +#: src/gtk/connected-device.ui:81 +msgid "Curved display" +msgstr "Изогнутый дисплей" + +#: src/gtk/connected-device.ui:82 +msgid "Switch between flat and curved displays." +msgstr "Переключается между плоскими и изогнутыми дисплеями." + +#: src/gtk/connected-device.ui:93 src/gtk/no-device.ui:34 msgid "Disable physical displays" msgstr "" -#: src/gtk/connected-device.ui:82 src/gtk/no-device.ui:35 +#: src/gtk/connected-device.ui:94 src/gtk/no-device.ui:35 msgid "" "Automatically disable all physical displays when the XR effect is enabled." msgstr "" -#: src/gtk/connected-device.ui:92 +#: src/gtk/connected-device.ui:104 #, fuzzy msgid "Virtual displays" msgstr "Изогнутый дисплей" -#: src/gtk/connected-device.ui:108 +#: src/gtk/connected-device.ui:120 msgid "1080p" msgstr "" -#: src/gtk/connected-device.ui:109 +#: src/gtk/connected-device.ui:121 msgid "1440p" msgstr "" -#: src/gtk/connected-device.ui:110 +#: src/gtk/connected-device.ui:122 msgid "Add custom" msgstr "" -#: src/gtk/connected-device.ui:124 +#: src/gtk/connected-device.ui:136 msgid "Remove custom resolution" msgstr "" -#: src/gtk/connected-device.ui:144 +#: src/gtk/connected-device.ui:156 #, fuzzy msgid "Rearrange displays" msgstr "Изогнутый дисплей" -#: src/gtk/connected-device.ui:162 +#: src/gtk/connected-device.ui:174 msgid "Adjustments" msgstr "Настройки" -#: src/gtk/connected-device.ui:166 +#: src/gtk/connected-device.ui:178 #, fuzzy msgid "Display distances" msgstr "Расстояние дисплея" -#: src/gtk/connected-device.ui:167 +#: src/gtk/connected-device.ui:179 msgid "Set how close you want displays to appear." msgstr "" -#: src/gtk/connected-device.ui:188 src/gtk/connected-device.ui:209 -#: src/gtk/connected-device.ui:401 src/gtk/connected-device.ui:430 -#: src/gtk/connected-device.ui:459 src/gtk/connected-device.ui:488 +#: src/gtk/connected-device.ui:200 src/gtk/connected-device.ui:221 +#: src/gtk/connected-device.ui:413 src/gtk/connected-device.ui:442 +#: src/gtk/connected-device.ui:471 src/gtk/connected-device.ui:500 msgid "Change" msgstr "Изменить" -#: src/gtk/connected-device.ui:222 +#: src/gtk/connected-device.ui:234 msgid "Follow threshold" msgstr "Порог следования" -#: src/gtk/connected-device.ui:223 +#: src/gtk/connected-device.ui:235 msgid "How far away you can look before the display follows." msgstr "" "Как далеко вы можете отвернуть взгляд, прежде чем дисплей последует за вами." -#: src/gtk/connected-device.ui:246 +#: src/gtk/connected-device.ui:258 #, fuzzy msgid "Display angling" msgstr "Размер дисплея" -#: src/gtk/connected-device.ui:247 +#: src/gtk/connected-device.ui:259 msgid "" "When there are multiple displays, choose how they should angle towards you." msgstr "" -#: src/gtk/connected-device.ui:261 +#: src/gtk/connected-device.ui:273 msgid "Automatic" msgstr "" -#: src/gtk/connected-device.ui:262 +#: src/gtk/connected-device.ui:274 msgid "Side-angled" msgstr "" -#: src/gtk/connected-device.ui:263 +#: src/gtk/connected-device.ui:275 msgid "Top-angled" msgstr "" -#: src/gtk/connected-device.ui:264 +#: src/gtk/connected-device.ui:276 msgid "Flat" msgstr "" -#: src/gtk/connected-device.ui:274 +#: src/gtk/connected-device.ui:286 #, fuzzy msgid "Display spacing" msgstr "Размер дисплея" -#: src/gtk/connected-device.ui:275 +#: src/gtk/connected-device.ui:287 msgid "Put empty space between displays, when there are multiple." msgstr "" -#: src/gtk/connected-device.ui:305 +#: src/gtk/connected-device.ui:317 msgid "Viewport horizontal offset" msgstr "" -#: src/gtk/connected-device.ui:306 +#: src/gtk/connected-device.ui:318 msgid "Move the viewport to the left or right of its default position." msgstr "" -#: src/gtk/connected-device.ui:323 +#: src/gtk/connected-device.ui:335 msgid "left" msgstr "" -#: src/gtk/connected-device.ui:325 src/gtk/connected-device.ui:355 +#: src/gtk/connected-device.ui:337 src/gtk/connected-device.ui:367 msgid "center" msgstr "" -#: src/gtk/connected-device.ui:327 +#: src/gtk/connected-device.ui:339 msgid "right" msgstr "" -#: src/gtk/connected-device.ui:335 +#: src/gtk/connected-device.ui:347 msgid "Viewport vertical offset" msgstr "" -#: src/gtk/connected-device.ui:336 +#: src/gtk/connected-device.ui:348 msgid "Move the viewport up or down from its default position." msgstr "" -#: src/gtk/connected-device.ui:353 +#: src/gtk/connected-device.ui:365 msgid "down" msgstr "" -#: src/gtk/connected-device.ui:357 +#: src/gtk/connected-device.ui:369 msgid "up" msgstr "" -#: src/gtk/connected-device.ui:372 src/gtk/connected-device.ui:378 +#: src/gtk/connected-device.ui:384 src/gtk/connected-device.ui:390 msgid "Keyboard Shortcuts" msgstr "Сочетания клавиш" -#: src/gtk/connected-device.ui:381 +#: src/gtk/connected-device.ui:393 msgid "XR Effect on/off shortcut" msgstr "" -#: src/gtk/connected-device.ui:382 +#: src/gtk/connected-device.ui:394 msgid "" "Quickly enable or disable the XR Effect. You may need to enable the effect " "manually once in order to enable the shortcut." msgstr "" -#: src/gtk/connected-device.ui:410 +#: src/gtk/connected-device.ui:422 msgid "Re-center display shortcut" msgstr "Сочетание клавиш для перецентровки дисплея" -#: src/gtk/connected-device.ui:411 +#: src/gtk/connected-device.ui:423 msgid "Pin the virtual display to the current position." msgstr "Фиксировать виртуальный дисплей в текущем положении." -#: src/gtk/connected-device.ui:439 +#: src/gtk/connected-device.ui:451 #, fuzzy msgid "Toggle zoom on focus shortcut" msgstr "Сочетание клавиш для переключения режима следования" -#: src/gtk/connected-device.ui:440 +#: src/gtk/connected-device.ui:452 #, fuzzy msgid "Quickly toggle zoom on focus mode." msgstr "Быстро переключать режим следования." -#: src/gtk/connected-device.ui:468 +#: src/gtk/connected-device.ui:480 msgid "Toggle follow mode shortcut" msgstr "Сочетание клавиш для переключения режима следования" -#: src/gtk/connected-device.ui:469 +#: src/gtk/connected-device.ui:481 msgid "Quickly toggle follow mode." msgstr "Быстро переключать режим следования." -#: src/gtk/connected-device.ui:504 src/gtk/connected-device.ui:514 +#: src/gtk/connected-device.ui:516 src/gtk/connected-device.ui:526 msgid "Advanced Settings" msgstr "Дополнительные настройки" -#: src/gtk/connected-device.ui:518 +#: src/gtk/connected-device.ui:530 msgid "Find optimal display config" msgstr "Найти оптимальную конфигурацию дисплея" -#: src/gtk/connected-device.ui:519 +#: src/gtk/connected-device.ui:531 msgid "" "Automatically modify the glasses display configuration for maximum " "resolution and best scaling when plugged in." @@ -422,87 +430,87 @@ msgstr "" "Автоматически изменять конфигурацию дисплея очков для максимального " "разрешения и лучшей масштабирования при подключении." -#: src/gtk/connected-device.ui:529 +#: src/gtk/connected-device.ui:541 msgid "Use highest refresh rate" msgstr "Использовать высшую частоту обновления" -#: src/gtk/connected-device.ui:530 +#: src/gtk/connected-device.ui:542 msgid "Refresh rate may affect performance, disable this to set it manually." msgstr "" "Частота обновления может повлиять на производительность, отключите это, " "чтобы установить ее вручную." -#: src/gtk/connected-device.ui:540 +#: src/gtk/connected-device.ui:552 msgid "Center on glasses' display" msgstr "" -#: src/gtk/connected-device.ui:541 +#: src/gtk/connected-device.ui:553 msgid "" "Center the viewport on the glasses' display, even if the display is not in " "the middle." msgstr "" -#: src/gtk/connected-device.ui:551 +#: src/gtk/connected-device.ui:563 msgid "Always primary display" msgstr "Всегда основной дисплей" -#: src/gtk/connected-device.ui:552 +#: src/gtk/connected-device.ui:564 msgid "Automatically set the glasses as the primary display when plugged in." msgstr "" "Автоматически устанавливать очки в качестве основного дисплея при " "подключении." -#: src/gtk/connected-device.ui:562 +#: src/gtk/connected-device.ui:574 #, fuzzy msgid "Remove virtual displays on disable" msgstr "Изогнутый дисплей" -#: src/gtk/connected-device.ui:563 +#: src/gtk/connected-device.ui:575 msgid "Automatically remove virtual displays when the XR effect is disabled." msgstr "" -#: src/gtk/connected-device.ui:573 +#: src/gtk/connected-device.ui:585 msgid "Enable multi-tap detection" msgstr "" -#: src/gtk/connected-device.ui:574 +#: src/gtk/connected-device.ui:586 msgid "Enables double-tap to recenter and triple-tap to recalibrate." msgstr "" -#: src/gtk/connected-device.ui:584 +#: src/gtk/connected-device.ui:596 #, fuzzy msgid "All displays follow mode" msgstr "Изогнутый дисплей" -#: src/gtk/connected-device.ui:585 +#: src/gtk/connected-device.ui:597 msgid "Follow mode moves all displays, not just the focused one." msgstr "" -#: src/gtk/connected-device.ui:601 +#: src/gtk/connected-device.ui:613 msgid "Follow mode movement tracking" msgstr "" -#: src/gtk/connected-device.ui:602 +#: src/gtk/connected-device.ui:614 msgid "Choose which movements should be tracked in follow mode." msgstr "" -#: src/gtk/connected-device.ui:617 +#: src/gtk/connected-device.ui:629 msgid "Horizontal" msgstr "" -#: src/gtk/connected-device.ui:637 +#: src/gtk/connected-device.ui:649 msgid "Vertical" msgstr "" -#: src/gtk/connected-device.ui:657 +#: src/gtk/connected-device.ui:669 msgid "Tilt/roll" msgstr "" -#: src/gtk/connected-device.ui:675 +#: src/gtk/connected-device.ui:687 msgid "Movement look-ahead" msgstr "Прогнозирование движения" -#: src/gtk/connected-device.ui:676 +#: src/gtk/connected-device.ui:688 msgid "" "Counteracts input lag by predicting head-tracking position ahead of render " "time. Stick with default unless virtual display drags behind your head " @@ -513,15 +521,15 @@ msgstr "" "виртуальный дисплей не отстает от движений вашей головы, не опережает или не " "очень трясётся." -#: src/gtk/connected-device.ui:694 +#: src/gtk/connected-device.ui:706 msgid "Default" msgstr "По умолчанию" -#: src/gtk/connected-device.ui:706 +#: src/gtk/connected-device.ui:718 msgid "Text Scaling" msgstr "" -#: src/gtk/connected-device.ui:707 +#: src/gtk/connected-device.ui:719 msgid "Scaling text below 1.0 will simulate a higher resolution display" msgstr "" @@ -723,9 +731,6 @@ msgstr "О BreezyDesktop" #~ msgid "Widescreen mode" #~ msgstr "Режим широкого экрана" -#~ msgid "Switch between flat and curved displays." -#~ msgstr "Переключается между плоскими и изогнутыми дисплеями." - #~ msgid "" #~ "Closer appears larger, further appears smaller. Controls depth when in " #~ "widescreen mode." diff --git a/ui/po/sv.po b/ui/po/sv.po index e8b7ee4..de63a95 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-12 08:49-0700\n" +"POT-Creation-Date: 2025-03-15 16:43-0700\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:141 +#: src/connecteddevice.py:142 #, fuzzy msgid "Set Focused Display Distance" msgstr "Avstånd till skärmen" -#: src/connecteddevice.py:142 +#: src/connecteddevice.py:143 msgid "Use a closer value so the display zooms in when you look at it." msgstr "" -#: src/connecteddevice.py:149 +#: src/connecteddevice.py:150 #, fuzzy msgid "Set All Displays Distance" msgstr "Avstånd till skärmen" -#: src/connecteddevice.py:150 +#: src/connecteddevice.py:151 msgid "Use a farther value so the displays are zoomed out when you look away." msgstr "" -#: src/connecteddevice.py:266 +#: src/connecteddevice.py:267 msgid "" "Unable to add virtual displays on this machine. Wayland and xdg-desktop-" "portal are required." msgstr "" -#: src/connecteddevice.py:300 +#: src/connecteddevice.py:301 #, fuzzy msgid "Focused display" msgstr "Avstånd till skärmen" -#: src/connecteddevice.py:306 +#: src/connecteddevice.py:307 #, fuzzy msgid "All displays" msgstr "Böjd skärm" @@ -232,148 +232,156 @@ msgstr "Följningsläge" msgid "Keep the focused display near the center of your view." msgstr "Håll den virtuella skärmen nära mitten av din syn." -#: src/gtk/connected-device.ui:81 src/gtk/no-device.ui:34 +#: src/gtk/connected-device.ui:81 +msgid "Curved display" +msgstr "Böjd skärm" + +#: src/gtk/connected-device.ui:82 +msgid "Switch between flat and curved displays." +msgstr "Växla mellan platt eller böjd skärm." + +#: src/gtk/connected-device.ui:93 src/gtk/no-device.ui:34 msgid "Disable physical displays" msgstr "" -#: src/gtk/connected-device.ui:82 src/gtk/no-device.ui:35 +#: src/gtk/connected-device.ui:94 src/gtk/no-device.ui:35 msgid "" "Automatically disable all physical displays when the XR effect is enabled." msgstr "" -#: src/gtk/connected-device.ui:92 +#: src/gtk/connected-device.ui:104 #, fuzzy msgid "Virtual displays" msgstr "Böjd skärm" -#: src/gtk/connected-device.ui:108 +#: src/gtk/connected-device.ui:120 msgid "1080p" msgstr "" -#: src/gtk/connected-device.ui:109 +#: src/gtk/connected-device.ui:121 msgid "1440p" msgstr "" -#: src/gtk/connected-device.ui:110 +#: src/gtk/connected-device.ui:122 msgid "Add custom" msgstr "" -#: src/gtk/connected-device.ui:124 +#: src/gtk/connected-device.ui:136 msgid "Remove custom resolution" msgstr "" -#: src/gtk/connected-device.ui:144 +#: src/gtk/connected-device.ui:156 #, fuzzy msgid "Rearrange displays" msgstr "Böjd skärm" -#: src/gtk/connected-device.ui:162 +#: src/gtk/connected-device.ui:174 msgid "Adjustments" msgstr "Justeringar" -#: src/gtk/connected-device.ui:166 +#: src/gtk/connected-device.ui:178 #, fuzzy msgid "Display distances" msgstr "Avstånd till skärmen" -#: src/gtk/connected-device.ui:167 +#: src/gtk/connected-device.ui:179 msgid "Set how close you want displays to appear." msgstr "" -#: src/gtk/connected-device.ui:188 src/gtk/connected-device.ui:209 -#: src/gtk/connected-device.ui:401 src/gtk/connected-device.ui:430 -#: src/gtk/connected-device.ui:459 src/gtk/connected-device.ui:488 +#: src/gtk/connected-device.ui:200 src/gtk/connected-device.ui:221 +#: src/gtk/connected-device.ui:413 src/gtk/connected-device.ui:442 +#: src/gtk/connected-device.ui:471 src/gtk/connected-device.ui:500 msgid "Change" msgstr "Ändra" -#: src/gtk/connected-device.ui:222 +#: src/gtk/connected-device.ui:234 msgid "Follow threshold" msgstr "Automatisk följtröskel" -#: src/gtk/connected-device.ui:223 +#: src/gtk/connected-device.ui:235 msgid "How far away you can look before the display follows." msgstr "Huvudrörelsetröskel för automatisk efterföljning." -#: src/gtk/connected-device.ui:246 +#: src/gtk/connected-device.ui:258 #, fuzzy msgid "Display angling" msgstr "Skärmens storlek" -#: src/gtk/connected-device.ui:247 +#: src/gtk/connected-device.ui:259 msgid "" "When there are multiple displays, choose how they should angle towards you." msgstr "" -#: src/gtk/connected-device.ui:261 +#: src/gtk/connected-device.ui:273 msgid "Automatic" msgstr "" -#: src/gtk/connected-device.ui:262 +#: src/gtk/connected-device.ui:274 msgid "Side-angled" msgstr "" -#: src/gtk/connected-device.ui:263 +#: src/gtk/connected-device.ui:275 msgid "Top-angled" msgstr "" -#: src/gtk/connected-device.ui:264 +#: src/gtk/connected-device.ui:276 msgid "Flat" msgstr "" -#: src/gtk/connected-device.ui:274 +#: src/gtk/connected-device.ui:286 #, fuzzy msgid "Display spacing" msgstr "Skärmens storlek" -#: src/gtk/connected-device.ui:275 +#: src/gtk/connected-device.ui:287 msgid "Put empty space between displays, when there are multiple." msgstr "" -#: src/gtk/connected-device.ui:305 +#: src/gtk/connected-device.ui:317 msgid "Viewport horizontal offset" msgstr "" -#: src/gtk/connected-device.ui:306 +#: src/gtk/connected-device.ui:318 msgid "Move the viewport to the left or right of its default position." msgstr "" -#: src/gtk/connected-device.ui:323 +#: src/gtk/connected-device.ui:335 msgid "left" msgstr "" -#: src/gtk/connected-device.ui:325 src/gtk/connected-device.ui:355 +#: src/gtk/connected-device.ui:337 src/gtk/connected-device.ui:367 msgid "center" msgstr "" -#: src/gtk/connected-device.ui:327 +#: src/gtk/connected-device.ui:339 msgid "right" msgstr "" -#: src/gtk/connected-device.ui:335 +#: src/gtk/connected-device.ui:347 msgid "Viewport vertical offset" msgstr "" -#: src/gtk/connected-device.ui:336 +#: src/gtk/connected-device.ui:348 msgid "Move the viewport up or down from its default position." msgstr "" -#: src/gtk/connected-device.ui:353 +#: src/gtk/connected-device.ui:365 msgid "down" msgstr "" -#: src/gtk/connected-device.ui:357 +#: src/gtk/connected-device.ui:369 msgid "up" msgstr "" -#: src/gtk/connected-device.ui:372 src/gtk/connected-device.ui:378 +#: src/gtk/connected-device.ui:384 src/gtk/connected-device.ui:390 msgid "Keyboard Shortcuts" msgstr "Tangentbordsgenvägar" -#: src/gtk/connected-device.ui:381 +#: src/gtk/connected-device.ui:393 msgid "XR Effect on/off shortcut" msgstr "XR-Effekt genväg på/av" -#: src/gtk/connected-device.ui:382 +#: src/gtk/connected-device.ui:394 msgid "" "Quickly enable or disable the XR Effect. You may need to enable the effect " "manually once in order to enable the shortcut." @@ -381,41 +389,41 @@ msgstr "" "Skifta snabbt mellan att slå av eller på XR-Effekt. Du kan behöva slå på den " "manuellt en gång för att genvägen ska fungera." -#: src/gtk/connected-device.ui:410 +#: src/gtk/connected-device.ui:422 msgid "Re-center display shortcut" msgstr "Om-centrering tangentbordsgenväg" -#: src/gtk/connected-device.ui:411 +#: src/gtk/connected-device.ui:423 msgid "Pin the virtual display to the current position." msgstr "Fäst den virtuella skärmen i den nuvarande positionen." -#: src/gtk/connected-device.ui:439 +#: src/gtk/connected-device.ui:451 #, fuzzy msgid "Toggle zoom on focus shortcut" msgstr "Växla följ läge kort" -#: src/gtk/connected-device.ui:440 +#: src/gtk/connected-device.ui:452 #, fuzzy msgid "Quickly toggle zoom on focus mode." msgstr "Växla snabbt följ läge." -#: src/gtk/connected-device.ui:468 +#: src/gtk/connected-device.ui:480 msgid "Toggle follow mode shortcut" msgstr "Växla följ läge kort" -#: src/gtk/connected-device.ui:469 +#: src/gtk/connected-device.ui:481 msgid "Quickly toggle follow mode." msgstr "Växla snabbt följ läge." -#: src/gtk/connected-device.ui:504 src/gtk/connected-device.ui:514 +#: src/gtk/connected-device.ui:516 src/gtk/connected-device.ui:526 msgid "Advanced Settings" msgstr "Avancerade inställningar" -#: src/gtk/connected-device.ui:518 +#: src/gtk/connected-device.ui:530 msgid "Find optimal display config" msgstr "Hitta optimal konfiguration till skärmen" -#: src/gtk/connected-device.ui:519 +#: src/gtk/connected-device.ui:531 msgid "" "Automatically modify the glasses display configuration for maximum " "resolution and best scaling when plugged in." @@ -423,85 +431,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:529 +#: src/gtk/connected-device.ui:541 msgid "Use highest refresh rate" msgstr "Använd högsta uppdateringsfrekvens" -#: src/gtk/connected-device.ui:530 +#: src/gtk/connected-device.ui:542 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:540 +#: src/gtk/connected-device.ui:552 msgid "Center on glasses' display" msgstr "" -#: src/gtk/connected-device.ui:541 +#: src/gtk/connected-device.ui:553 msgid "" "Center the viewport on the glasses' display, even if the display is not in " "the middle." msgstr "" -#: src/gtk/connected-device.ui:551 +#: src/gtk/connected-device.ui:563 msgid "Always primary display" msgstr "Alltid primär skärm" -#: src/gtk/connected-device.ui:552 +#: src/gtk/connected-device.ui:564 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:562 +#: src/gtk/connected-device.ui:574 #, fuzzy msgid "Remove virtual displays on disable" msgstr "Böjd skärm" -#: src/gtk/connected-device.ui:563 +#: src/gtk/connected-device.ui:575 msgid "Automatically remove virtual displays when the XR effect is disabled." msgstr "" -#: src/gtk/connected-device.ui:573 +#: src/gtk/connected-device.ui:585 msgid "Enable multi-tap detection" msgstr "" -#: src/gtk/connected-device.ui:574 +#: src/gtk/connected-device.ui:586 msgid "Enables double-tap to recenter and triple-tap to recalibrate." msgstr "" -#: src/gtk/connected-device.ui:584 +#: src/gtk/connected-device.ui:596 #, fuzzy msgid "All displays follow mode" msgstr "Böjd skärm" -#: src/gtk/connected-device.ui:585 +#: src/gtk/connected-device.ui:597 msgid "Follow mode moves all displays, not just the focused one." msgstr "" -#: src/gtk/connected-device.ui:601 +#: src/gtk/connected-device.ui:613 msgid "Follow mode movement tracking" msgstr "" -#: src/gtk/connected-device.ui:602 +#: src/gtk/connected-device.ui:614 msgid "Choose which movements should be tracked in follow mode." msgstr "" -#: src/gtk/connected-device.ui:617 +#: src/gtk/connected-device.ui:629 msgid "Horizontal" msgstr "" -#: src/gtk/connected-device.ui:637 +#: src/gtk/connected-device.ui:649 msgid "Vertical" msgstr "" -#: src/gtk/connected-device.ui:657 +#: src/gtk/connected-device.ui:669 msgid "Tilt/roll" msgstr "" -#: src/gtk/connected-device.ui:675 +#: src/gtk/connected-device.ui:687 msgid "Movement look-ahead" msgstr "Rörs förväntning" -#: src/gtk/connected-device.ui:676 +#: src/gtk/connected-device.ui:688 msgid "" "Counteracts input lag by predicting head-tracking position ahead of render " "time. Stick with default unless virtual display drags behind your head " @@ -510,15 +518,15 @@ 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:694 +#: src/gtk/connected-device.ui:706 msgid "Default" msgstr "Standard" -#: src/gtk/connected-device.ui:706 +#: src/gtk/connected-device.ui:718 msgid "Text Scaling" msgstr "Textskalning" -#: src/gtk/connected-device.ui:707 +#: src/gtk/connected-device.ui:719 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" @@ -720,9 +728,6 @@ msgstr "Om BreezyDesktop" #~ msgid "Widescreen mode" #~ msgstr "Bredbildsläge" -#~ msgid "Switch between flat and curved displays." -#~ msgstr "Växla mellan platt eller böjd skärm." - #~ msgid "" #~ "Closer appears larger, further appears smaller. Controls depth when in " #~ "widescreen mode." diff --git a/ui/po/uk_UA.po b/ui/po/uk_UA.po index 109c2f5..c49f522 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-12 08:49-0700\n" +"POT-Creation-Date: 2025-03-15 16:43-0700\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:141 +#: src/connecteddevice.py:142 #, fuzzy msgid "Set Focused Display Distance" msgstr "Відстань дисплея" -#: src/connecteddevice.py:142 +#: src/connecteddevice.py:143 msgid "Use a closer value so the display zooms in when you look at it." msgstr "" -#: src/connecteddevice.py:149 +#: src/connecteddevice.py:150 #, fuzzy msgid "Set All Displays Distance" msgstr "Відстань дисплея" -#: src/connecteddevice.py:150 +#: src/connecteddevice.py:151 msgid "Use a farther value so the displays are zoomed out when you look away." msgstr "" -#: src/connecteddevice.py:266 +#: src/connecteddevice.py:267 msgid "" "Unable to add virtual displays on this machine. Wayland and xdg-desktop-" "portal are required." msgstr "" -#: src/connecteddevice.py:300 +#: src/connecteddevice.py:301 #, fuzzy msgid "Focused display" msgstr "Відстань дисплея" -#: src/connecteddevice.py:306 +#: src/connecteddevice.py:307 #, fuzzy msgid "All displays" msgstr "Викривлений дисплей" @@ -231,190 +231,198 @@ msgstr "Режим слідування" msgid "Keep the focused display near the center of your view." msgstr "Зберігае віртуальний дисплей поблизу центру вашого зору." -#: src/gtk/connected-device.ui:81 src/gtk/no-device.ui:34 +#: src/gtk/connected-device.ui:81 +msgid "Curved display" +msgstr "Викривлений дисплей" + +#: src/gtk/connected-device.ui:82 +msgid "Switch between flat and curved displays." +msgstr "Переключается між плоскими і викривленими дисплеями." + +#: src/gtk/connected-device.ui:93 src/gtk/no-device.ui:34 msgid "Disable physical displays" msgstr "" -#: src/gtk/connected-device.ui:82 src/gtk/no-device.ui:35 +#: src/gtk/connected-device.ui:94 src/gtk/no-device.ui:35 msgid "" "Automatically disable all physical displays when the XR effect is enabled." msgstr "" -#: src/gtk/connected-device.ui:92 +#: src/gtk/connected-device.ui:104 #, fuzzy msgid "Virtual displays" msgstr "Викривлений дисплей" -#: src/gtk/connected-device.ui:108 +#: src/gtk/connected-device.ui:120 msgid "1080p" msgstr "" -#: src/gtk/connected-device.ui:109 +#: src/gtk/connected-device.ui:121 msgid "1440p" msgstr "" -#: src/gtk/connected-device.ui:110 +#: src/gtk/connected-device.ui:122 msgid "Add custom" msgstr "" -#: src/gtk/connected-device.ui:124 +#: src/gtk/connected-device.ui:136 msgid "Remove custom resolution" msgstr "" -#: src/gtk/connected-device.ui:144 +#: src/gtk/connected-device.ui:156 #, fuzzy msgid "Rearrange displays" msgstr "Викривлений дисплей" -#: src/gtk/connected-device.ui:162 +#: src/gtk/connected-device.ui:174 msgid "Adjustments" msgstr "Налаштування" -#: src/gtk/connected-device.ui:166 +#: src/gtk/connected-device.ui:178 #, fuzzy msgid "Display distances" msgstr "Відстань дисплея" -#: src/gtk/connected-device.ui:167 +#: src/gtk/connected-device.ui:179 msgid "Set how close you want displays to appear." msgstr "" -#: src/gtk/connected-device.ui:188 src/gtk/connected-device.ui:209 -#: src/gtk/connected-device.ui:401 src/gtk/connected-device.ui:430 -#: src/gtk/connected-device.ui:459 src/gtk/connected-device.ui:488 +#: src/gtk/connected-device.ui:200 src/gtk/connected-device.ui:221 +#: src/gtk/connected-device.ui:413 src/gtk/connected-device.ui:442 +#: src/gtk/connected-device.ui:471 src/gtk/connected-device.ui:500 msgid "Change" msgstr "Змінити" -#: src/gtk/connected-device.ui:222 +#: src/gtk/connected-device.ui:234 msgid "Follow threshold" msgstr "Поріг слідування" -#: src/gtk/connected-device.ui:223 +#: src/gtk/connected-device.ui:235 msgid "How far away you can look before the display follows." msgstr "" "Як далеко ви можете відвернути ваш взор, перш ніж дисплей почне слідувати за " "вами." -#: src/gtk/connected-device.ui:246 +#: src/gtk/connected-device.ui:258 #, fuzzy msgid "Display angling" msgstr "Розмір дисплея" -#: src/gtk/connected-device.ui:247 +#: src/gtk/connected-device.ui:259 msgid "" "When there are multiple displays, choose how they should angle towards you." msgstr "" -#: src/gtk/connected-device.ui:261 +#: src/gtk/connected-device.ui:273 msgid "Automatic" msgstr "" -#: src/gtk/connected-device.ui:262 +#: src/gtk/connected-device.ui:274 msgid "Side-angled" msgstr "" -#: src/gtk/connected-device.ui:263 +#: src/gtk/connected-device.ui:275 msgid "Top-angled" msgstr "" -#: src/gtk/connected-device.ui:264 +#: src/gtk/connected-device.ui:276 msgid "Flat" msgstr "" -#: src/gtk/connected-device.ui:274 +#: src/gtk/connected-device.ui:286 #, fuzzy msgid "Display spacing" msgstr "Розмір дисплея" -#: src/gtk/connected-device.ui:275 +#: src/gtk/connected-device.ui:287 msgid "Put empty space between displays, when there are multiple." msgstr "" -#: src/gtk/connected-device.ui:305 +#: src/gtk/connected-device.ui:317 msgid "Viewport horizontal offset" msgstr "" -#: src/gtk/connected-device.ui:306 +#: src/gtk/connected-device.ui:318 msgid "Move the viewport to the left or right of its default position." msgstr "" -#: src/gtk/connected-device.ui:323 +#: src/gtk/connected-device.ui:335 msgid "left" msgstr "" -#: src/gtk/connected-device.ui:325 src/gtk/connected-device.ui:355 +#: src/gtk/connected-device.ui:337 src/gtk/connected-device.ui:367 msgid "center" msgstr "" -#: src/gtk/connected-device.ui:327 +#: src/gtk/connected-device.ui:339 msgid "right" msgstr "" -#: src/gtk/connected-device.ui:335 +#: src/gtk/connected-device.ui:347 msgid "Viewport vertical offset" msgstr "" -#: src/gtk/connected-device.ui:336 +#: src/gtk/connected-device.ui:348 msgid "Move the viewport up or down from its default position." msgstr "" -#: src/gtk/connected-device.ui:353 +#: src/gtk/connected-device.ui:365 msgid "down" msgstr "" -#: src/gtk/connected-device.ui:357 +#: src/gtk/connected-device.ui:369 msgid "up" msgstr "" -#: src/gtk/connected-device.ui:372 src/gtk/connected-device.ui:378 +#: src/gtk/connected-device.ui:384 src/gtk/connected-device.ui:390 msgid "Keyboard Shortcuts" msgstr "Сполучення клавіш" -#: src/gtk/connected-device.ui:381 +#: src/gtk/connected-device.ui:393 msgid "XR Effect on/off shortcut" msgstr "" -#: src/gtk/connected-device.ui:382 +#: src/gtk/connected-device.ui:394 msgid "" "Quickly enable or disable the XR Effect. You may need to enable the effect " "manually once in order to enable the shortcut." msgstr "" -#: src/gtk/connected-device.ui:410 +#: src/gtk/connected-device.ui:422 msgid "Re-center display shortcut" msgstr "Сполучення клавіш для центрування дисплея" -#: src/gtk/connected-device.ui:411 +#: src/gtk/connected-device.ui:423 msgid "Pin the virtual display to the current position." msgstr "Фіксувати віртуальний дисплей у поточній позиції." -#: src/gtk/connected-device.ui:439 +#: src/gtk/connected-device.ui:451 #, fuzzy msgid "Toggle zoom on focus shortcut" msgstr "Сполучення клавіш для перемикання режиму слідування" -#: src/gtk/connected-device.ui:440 +#: src/gtk/connected-device.ui:452 #, fuzzy msgid "Quickly toggle zoom on focus mode." msgstr "Швидко перемикати режим слідування." -#: src/gtk/connected-device.ui:468 +#: src/gtk/connected-device.ui:480 msgid "Toggle follow mode shortcut" msgstr "Сполучення клавіш для перемикання режиму слідування" -#: src/gtk/connected-device.ui:469 +#: src/gtk/connected-device.ui:481 msgid "Quickly toggle follow mode." msgstr "Швидко перемикати режим слідування." -#: src/gtk/connected-device.ui:504 src/gtk/connected-device.ui:514 +#: src/gtk/connected-device.ui:516 src/gtk/connected-device.ui:526 msgid "Advanced Settings" msgstr "Додаткові налаштування" -#: src/gtk/connected-device.ui:518 +#: src/gtk/connected-device.ui:530 msgid "Find optimal display config" msgstr "Знайти оптимальну конфігурацію дисплея" -#: src/gtk/connected-device.ui:519 +#: src/gtk/connected-device.ui:531 msgid "" "Automatically modify the glasses display configuration for maximum " "resolution and best scaling when plugged in." @@ -422,85 +430,85 @@ msgstr "" "Автоматично змінює конфігурацію дисплея окулярів для максимальної роздільної " "здатності і найкращого масштабування при підключенні." -#: src/gtk/connected-device.ui:529 +#: src/gtk/connected-device.ui:541 msgid "Use highest refresh rate" msgstr "Використовувати найвищу частоту оновлення" -#: src/gtk/connected-device.ui:530 +#: src/gtk/connected-device.ui:542 msgid "Refresh rate may affect performance, disable this to set it manually." msgstr "" "Частота оновлення може вплинути на продуктивність, вимкніть це, щоб " "встановити її вручну." -#: src/gtk/connected-device.ui:540 +#: src/gtk/connected-device.ui:552 msgid "Center on glasses' display" msgstr "" -#: src/gtk/connected-device.ui:541 +#: src/gtk/connected-device.ui:553 msgid "" "Center the viewport on the glasses' display, even if the display is not in " "the middle." msgstr "" -#: src/gtk/connected-device.ui:551 +#: src/gtk/connected-device.ui:563 msgid "Always primary display" msgstr "Завжди основний дисплей" -#: src/gtk/connected-device.ui:552 +#: src/gtk/connected-device.ui:564 msgid "Automatically set the glasses as the primary display when plugged in." msgstr "Автоматично встановлює окуляри як основний дисплей при підключенні." -#: src/gtk/connected-device.ui:562 +#: src/gtk/connected-device.ui:574 #, fuzzy msgid "Remove virtual displays on disable" msgstr "Викривлений дисплей" -#: src/gtk/connected-device.ui:563 +#: src/gtk/connected-device.ui:575 msgid "Automatically remove virtual displays when the XR effect is disabled." msgstr "" -#: src/gtk/connected-device.ui:573 +#: src/gtk/connected-device.ui:585 msgid "Enable multi-tap detection" msgstr "" -#: src/gtk/connected-device.ui:574 +#: src/gtk/connected-device.ui:586 msgid "Enables double-tap to recenter and triple-tap to recalibrate." msgstr "" -#: src/gtk/connected-device.ui:584 +#: src/gtk/connected-device.ui:596 #, fuzzy msgid "All displays follow mode" msgstr "Викривлений дисплей" -#: src/gtk/connected-device.ui:585 +#: src/gtk/connected-device.ui:597 msgid "Follow mode moves all displays, not just the focused one." msgstr "" -#: src/gtk/connected-device.ui:601 +#: src/gtk/connected-device.ui:613 msgid "Follow mode movement tracking" msgstr "" -#: src/gtk/connected-device.ui:602 +#: src/gtk/connected-device.ui:614 msgid "Choose which movements should be tracked in follow mode." msgstr "" -#: src/gtk/connected-device.ui:617 +#: src/gtk/connected-device.ui:629 msgid "Horizontal" msgstr "" -#: src/gtk/connected-device.ui:637 +#: src/gtk/connected-device.ui:649 msgid "Vertical" msgstr "" -#: src/gtk/connected-device.ui:657 +#: src/gtk/connected-device.ui:669 msgid "Tilt/roll" msgstr "" -#: src/gtk/connected-device.ui:675 +#: src/gtk/connected-device.ui:687 msgid "Movement look-ahead" msgstr "Прогнозування руху" -#: src/gtk/connected-device.ui:676 +#: src/gtk/connected-device.ui:688 msgid "" "Counteracts input lag by predicting head-tracking position ahead of render " "time. Stick with default unless virtual display drags behind your head " @@ -511,15 +519,15 @@ msgstr "" "віртуальний дисплей відстає від рухів вашої голови, випереджає або дуже " "тремтить." -#: src/gtk/connected-device.ui:694 +#: src/gtk/connected-device.ui:706 msgid "Default" msgstr "За замовчуванням" -#: src/gtk/connected-device.ui:706 +#: src/gtk/connected-device.ui:718 msgid "Text Scaling" msgstr "" -#: src/gtk/connected-device.ui:707 +#: src/gtk/connected-device.ui:719 msgid "Scaling text below 1.0 will simulate a higher resolution display" msgstr "" @@ -720,9 +728,6 @@ msgstr "Про BreezyDesktop" #~ msgid "Widescreen mode" #~ msgstr "Режим широкого екрану" -#~ msgid "Switch between flat and curved displays." -#~ msgstr "Переключается між плоскими і викривленими дисплеями." - #~ msgid "" #~ "Closer appears larger, further appears smaller. Controls depth when in " #~ "widescreen mode." diff --git a/ui/po/zh_CN.po b/ui/po/zh_CN.po index c70074f..73bf651 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-12 08:49-0700\n" +"POT-Creation-Date: 2025-03-15 16:43-0700\n" "PO-Revision-Date: 2024-08-02 20:55-0700\n" "Last-Translator: \n" "Language-Team: Chinese (simplified) \n" @@ -26,34 +26,33 @@ msgstr "切换到并排模式,并将显示宽度翻倍。" msgid "This feature is not currently supported for your device." msgstr "您的设备目前不支援此功能。" -#: src/connecteddevice.py:141 +#: src/connecteddevice.py:142 msgid "Set Focused Display Distance" msgstr "设定注视中的屏幕的距离" -#: src/connecteddevice.py:142 +#: src/connecteddevice.py:143 msgid "Use a closer value so the display zooms in when you look at it." msgstr "近的数值会将您所看向的屏幕放大" -#: src/connecteddevice.py:149 +#: src/connecteddevice.py:150 msgid "Set All Displays Distance" msgstr "设定所有屏幕的距离" -#: src/connecteddevice.py:150 +#: src/connecteddevice.py:151 msgid "Use a farther value so the displays are zoomed out when you look away." msgstr "远的数值会将您所看向的屏幕缩小" -#: src/connecteddevice.py:266 +#: src/connecteddevice.py:267 msgid "" "Unable to add virtual displays on this machine. Wayland and xdg-desktop-" "portal are required." -msgstr "" -"无法增加模拟显示。需要安装xdg-desktop-portal和Wayland" +msgstr "无法增加模拟显示。需要安装xdg-desktop-portal和Wayland" -#: src/connecteddevice.py:300 +#: src/connecteddevice.py:301 msgid "Focused display" msgstr "注视中的屏幕" -#: src/connecteddevice.py:306 +#: src/connecteddevice.py:307 msgid "All displays" msgstr "所有的屏幕" @@ -227,261 +226,269 @@ msgstr "跟随模式" msgid "Keep the focused display near the center of your view." msgstr "将注视中的屏幕保持在视野中心附近。" -#: src/gtk/connected-device.ui:81 src/gtk/no-device.ui:34 +#: src/gtk/connected-device.ui:81 +msgid "Curved display" +msgstr "曲面显示" + +#: src/gtk/connected-device.ui:82 +msgid "Switch between flat and curved displays." +msgstr "平板和曲面显示模式之间切换。" + +#: src/gtk/connected-device.ui:93 src/gtk/no-device.ui:34 msgid "Disable physical displays" msgstr "将所有具体屏幕关闭" -#: src/gtk/connected-device.ui:82 src/gtk/no-device.ui:35 +#: src/gtk/connected-device.ui:94 src/gtk/no-device.ui:35 msgid "" "Automatically disable all physical displays when the XR effect is enabled." msgstr "XR效果开启时将所有具体屏幕自动关闭" -#: src/gtk/connected-device.ui:92 +#: src/gtk/connected-device.ui:104 msgid "Virtual displays" msgstr "模拟屏幕" -#: src/gtk/connected-device.ui:108 +#: src/gtk/connected-device.ui:120 msgid "1080p" msgstr "1080p" -#: src/gtk/connected-device.ui:109 +#: src/gtk/connected-device.ui:121 msgid "1440p" msgstr "1440p" -#: src/gtk/connected-device.ui:110 +#: src/gtk/connected-device.ui:122 msgid "Add custom" msgstr "增加客制化解析度" -#: src/gtk/connected-device.ui:124 +#: src/gtk/connected-device.ui:136 msgid "Remove custom resolution" msgstr "删除客制化解析度" -#: src/gtk/connected-device.ui:144 +#: src/gtk/connected-device.ui:156 msgid "Rearrange displays" msgstr "改变屏幕顺序" -#: src/gtk/connected-device.ui:162 +#: src/gtk/connected-device.ui:174 msgid "Adjustments" msgstr "调整" -#: src/gtk/connected-device.ui:166 +#: src/gtk/connected-device.ui:178 msgid "Display distances" msgstr "屏幕距离" -#: src/gtk/connected-device.ui:167 +#: src/gtk/connected-device.ui:179 msgid "Set how close you want displays to appear." msgstr "设定您所希望屏幕离你的距离有多近" -#: src/gtk/connected-device.ui:188 src/gtk/connected-device.ui:209 -#: src/gtk/connected-device.ui:401 src/gtk/connected-device.ui:430 -#: src/gtk/connected-device.ui:459 src/gtk/connected-device.ui:488 +#: src/gtk/connected-device.ui:200 src/gtk/connected-device.ui:221 +#: src/gtk/connected-device.ui:413 src/gtk/connected-device.ui:442 +#: src/gtk/connected-device.ui:471 src/gtk/connected-device.ui:500 msgid "Change" msgstr "更改" -#: src/gtk/connected-device.ui:222 +#: src/gtk/connected-device.ui:234 msgid "Follow threshold" msgstr "跟随触发值" -#: src/gtk/connected-device.ui:223 +#: src/gtk/connected-device.ui:235 msgid "How far away you can look before the display follows." msgstr "显示内容开始进行跟随模式前您可以看得多远。" -#: src/gtk/connected-device.ui:246 +#: src/gtk/connected-device.ui:258 msgid "Display angling" msgstr "屏幕角度" -#: src/gtk/connected-device.ui:247 +#: src/gtk/connected-device.ui:259 msgid "" "When there are multiple displays, choose how they should angle towards you." msgstr "有多屏幕时,选择屏幕向您倾斜的角度" -#: src/gtk/connected-device.ui:261 +#: src/gtk/connected-device.ui:273 msgid "Automatic" msgstr "自动" -#: src/gtk/connected-device.ui:262 +#: src/gtk/connected-device.ui:274 msgid "Side-angled" msgstr "侧边弯曲" -#: src/gtk/connected-device.ui:263 +#: src/gtk/connected-device.ui:275 msgid "Top-angled" msgstr "上下弯曲" -#: src/gtk/connected-device.ui:264 +#: src/gtk/connected-device.ui:276 msgid "Flat" msgstr "平面" -#: src/gtk/connected-device.ui:274 +#: src/gtk/connected-device.ui:286 msgid "Display spacing" msgstr "屏幕之间缝隙的距差" -#: src/gtk/connected-device.ui:275 +#: src/gtk/connected-device.ui:287 msgid "Put empty space between displays, when there are multiple." msgstr "把多屏幕之间插入一个空间" -#: src/gtk/connected-device.ui:305 +#: src/gtk/connected-device.ui:317 msgid "Viewport horizontal offset" msgstr "眼镜视口特定水平偏移" -#: src/gtk/connected-device.ui:306 +#: src/gtk/connected-device.ui:318 msgid "Move the viewport to the left or right of its default position." msgstr "将眼镜视口从默认位置左右移动" -#: src/gtk/connected-device.ui:323 +#: src/gtk/connected-device.ui:335 msgid "left" msgstr "左" -#: src/gtk/connected-device.ui:325 src/gtk/connected-device.ui:355 +#: src/gtk/connected-device.ui:337 src/gtk/connected-device.ui:367 msgid "center" msgstr "中" -#: src/gtk/connected-device.ui:327 +#: src/gtk/connected-device.ui:339 msgid "right" msgstr "右" -#: src/gtk/connected-device.ui:335 +#: src/gtk/connected-device.ui:347 msgid "Viewport vertical offset" msgstr "眼镜视口特定垂直偏移" -#: src/gtk/connected-device.ui:336 +#: src/gtk/connected-device.ui:348 msgid "Move the viewport up or down from its default position." msgstr "将眼镜视口从默认位置上下移动" -#: src/gtk/connected-device.ui:353 +#: src/gtk/connected-device.ui:365 msgid "down" msgstr "下" -#: src/gtk/connected-device.ui:357 +#: src/gtk/connected-device.ui:369 msgid "up" msgstr "上" -#: src/gtk/connected-device.ui:372 src/gtk/connected-device.ui:378 +#: src/gtk/connected-device.ui:384 src/gtk/connected-device.ui:390 msgid "Keyboard Shortcuts" msgstr "键盘快捷键" -#: src/gtk/connected-device.ui:381 +#: src/gtk/connected-device.ui:393 msgid "XR Effect on/off shortcut" msgstr "XR效果 开/关 快捷键" -#: src/gtk/connected-device.ui:382 +#: src/gtk/connected-device.ui:394 msgid "" "Quickly enable or disable the XR Effect. You may need to enable the effect " "manually once in order to enable the shortcut." msgstr "快速启用或禁用 XR 效果。您可能需要先手动启用一次该效果,才能设此快捷键" -#: src/gtk/connected-device.ui:410 +#: src/gtk/connected-device.ui:422 msgid "Re-center display shortcut" msgstr "重新居中显示快捷键" -#: src/gtk/connected-device.ui:411 +#: src/gtk/connected-device.ui:423 msgid "Pin the virtual display to the current position." msgstr "将虚拟显示固定在当前位置。" -#: src/gtk/connected-device.ui:439 +#: src/gtk/connected-device.ui:451 msgid "Toggle zoom on focus shortcut" msgstr "切换注视自动放大模式快捷键" -#: src/gtk/connected-device.ui:440 +#: src/gtk/connected-device.ui:452 msgid "Quickly toggle zoom on focus mode." msgstr "快速地切换注视自动放大模式。" -#: src/gtk/connected-device.ui:468 +#: src/gtk/connected-device.ui:480 msgid "Toggle follow mode shortcut" msgstr "切换跟随模式快捷键" -#: src/gtk/connected-device.ui:469 +#: src/gtk/connected-device.ui:481 msgid "Quickly toggle follow mode." msgstr "快速切换跟随模式。" -#: src/gtk/connected-device.ui:504 src/gtk/connected-device.ui:514 +#: src/gtk/connected-device.ui:516 src/gtk/connected-device.ui:526 msgid "Advanced Settings" msgstr "高级设定" -#: src/gtk/connected-device.ui:518 +#: src/gtk/connected-device.ui:530 msgid "Find optimal display config" msgstr "寻找最佳显示设定" -#: src/gtk/connected-device.ui:519 +#: src/gtk/connected-device.ui:531 msgid "" "Automatically modify the glasses display configuration for maximum " "resolution and best scaling when plugged in." msgstr "连接时,可以自动修改眼镜显示设定以表现出最大解析度和最佳的对比。" -#: src/gtk/connected-device.ui:529 +#: src/gtk/connected-device.ui:541 msgid "Use highest refresh rate" msgstr "使用最高刷新率" -#: src/gtk/connected-device.ui:530 +#: src/gtk/connected-device.ui:542 msgid "Refresh rate may affect performance, disable this to set it manually." msgstr "刷新率可能会影响性能,禁用此功能即可手动设置。" -#: src/gtk/connected-device.ui:540 +#: src/gtk/connected-device.ui:552 msgid "Center on glasses' display" msgstr "视口眼镜屏幕固定" -#: src/gtk/connected-device.ui:541 +#: src/gtk/connected-device.ui:553 msgid "" "Center the viewport on the glasses' display, even if the display is not in " "the middle." msgstr "将眼镜视口对齐眼镜的主要屏幕, 即便此屏幕不在正中间" -#: src/gtk/connected-device.ui:551 +#: src/gtk/connected-device.ui:563 msgid "Always primary display" msgstr "每次设置为主要显示" -#: src/gtk/connected-device.ui:552 +#: src/gtk/connected-device.ui:564 msgid "Automatically set the glasses as the primary display when plugged in." msgstr "连接时,自动将眼镜设置为主要显示。" -#: src/gtk/connected-device.ui:562 +#: src/gtk/connected-device.ui:574 msgid "Remove virtual displays on disable" msgstr "自动模拟屏幕删除" -#: src/gtk/connected-device.ui:563 +#: src/gtk/connected-device.ui:575 msgid "Automatically remove virtual displays when the XR effect is disabled." msgstr "XR效果关闭时自动删除所有模拟屏幕" -#: src/gtk/connected-device.ui:573 +#: src/gtk/connected-device.ui:585 msgid "Enable multi-tap detection" msgstr "开启多点触控检测" -#: src/gtk/connected-device.ui:574 +#: src/gtk/connected-device.ui:586 msgid "Enables double-tap to recenter and triple-tap to recalibrate." msgstr "打开双击重新定位和三击重新校准手势" -#: src/gtk/connected-device.ui:584 +#: src/gtk/connected-device.ui:596 msgid "All displays follow mode" msgstr "全屏幕跟随模式" -#: src/gtk/connected-device.ui:585 +#: src/gtk/connected-device.ui:597 msgid "Follow mode moves all displays, not just the focused one." msgstr "让跟随模式移动所有的屏幕而不只是注视中的屏幕" -#: src/gtk/connected-device.ui:601 +#: src/gtk/connected-device.ui:613 msgid "Follow mode movement tracking" msgstr "跟随模式感应" -#: src/gtk/connected-device.ui:602 +#: src/gtk/connected-device.ui:614 msgid "Choose which movements should be tracked in follow mode." msgstr "选择那一些动作会被感应到" -#: src/gtk/connected-device.ui:617 +#: src/gtk/connected-device.ui:629 msgid "Horizontal" msgstr "水平动作" -#: src/gtk/connected-device.ui:637 +#: src/gtk/connected-device.ui:649 msgid "Vertical" msgstr "垂直动作" -#: src/gtk/connected-device.ui:657 +#: src/gtk/connected-device.ui:669 msgid "Tilt/roll" msgstr "倾斜及滚转动作" -#: src/gtk/connected-device.ui:675 +#: src/gtk/connected-device.ui:687 msgid "Movement look-ahead" msgstr "移动预测" -#: src/gtk/connected-device.ui:676 +#: src/gtk/connected-device.ui:688 msgid "" "Counteracts input lag by predicting head-tracking position ahead of render " "time. Stick with default unless virtual display drags behind your head " @@ -490,15 +497,15 @@ msgstr "" "透过预测头部追踪位置,提前于渲染时间进行预测来抵消输入延迟。除非虚拟显示滞后" "于头部,提前跳动或非常抖动,请尽量使用默认设置。" -#: src/gtk/connected-device.ui:694 +#: src/gtk/connected-device.ui:706 msgid "Default" msgstr "默认" -#: src/gtk/connected-device.ui:706 +#: src/gtk/connected-device.ui:718 msgid "Text Scaling" msgstr "字体大小比例" -#: src/gtk/connected-device.ui:707 +#: src/gtk/connected-device.ui:719 msgid "Scaling text below 1.0 will simulate a higher resolution display" msgstr "字体缩放小于1.0,将模拟解析度更高的显示效果" @@ -696,9 +703,6 @@ msgstr "关于 Breezy Desktop" #~ msgid "Widescreen mode" #~ msgstr "宽屏模式" -#~ msgid "Switch between flat and curved displays." -#~ msgstr "平板和曲面显示模式之间切换。" - #~ msgid "" #~ "Closer appears larger, further appears smaller. Controls depth when in " #~ "widescreen mode." diff --git a/ui/src/connecteddevice.py b/ui/src/connecteddevice.py index 3a4f78e..28e8bce 100644 --- a/ui/src/connecteddevice.py +++ b/ui/src/connecteddevice.py @@ -36,6 +36,7 @@ class ConnectedDevice(Gtk.Box): follow_threshold_scale = Gtk.Template.Child() follow_threshold_adjustment = Gtk.Template.Child() follow_mode_switch = Gtk.Template.Child() + curved_display_switch = Gtk.Template.Child() top_features_group = Gtk.Template.Child() virtual_displays_row = Gtk.Template.Child() add_virtual_display_menu = Gtk.Template.Child() @@ -86,7 +87,7 @@ class ConnectedDevice(Gtk.Box): # self.display_size_scale, self.follow_mode_switch, self.follow_threshold_scale, - # self.curved_display_switch, + self.curved_display_switch, self.add_virtual_display_menu, self.add_virtual_display_button, self.change_all_displays_distance_button, @@ -109,7 +110,7 @@ class ConnectedDevice(Gtk.Box): # self.settings.bind('display-size', self.display_size_adjustment, 'value', Gio.SettingsBindFlags.DEFAULT) 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('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) @@ -430,13 +431,3 @@ class ConnectedDevice(Gtk.Box): def _launch_display_settings(self, *args): self._settings_displays_app_info.launch() - -def reload_display_distance_toggle_button(widget): - distance = SettingsManager.get_instance().settings.get_double(widget.get_name()) - if distance: widget.set_label(str(distance)) - -def on_set_display_distance_toggle(widget): - settings = SettingsManager.get_instance().settings - distance = settings.get_double('display-distance') - settings.set_double(widget.get_name(), distance) - reload_display_distance_toggle_button(widget) diff --git a/ui/src/gtk/connected-device.ui b/ui/src/gtk/connected-device.ui index 4025201..9a465a6 100644 --- a/ui/src/gtk/connected-device.ui +++ b/ui/src/gtk/connected-device.ui @@ -76,6 +76,18 @@ + + + Curved display + Switch between flat and curved displays. + 2 + + + 3 + + + + Disable physical displays