import QtQuick import qs.config import qs.services import qs.widgets SettingsPage { title: "Displays" lede: SystemSettings.monitorDescription || "Reading the active display…" SettingsCard { title: SystemSettings.monitorName || "Active display" subtitle: `${SystemSettings.monitorWidth} × ${SystemSettings.monitorHeight} at ${SystemSettings.monitorRefreshRate.toFixed(0)} Hz · ${SystemSettings.monitorScale.toFixed(1)}× scale · ${SystemSettings.monitorFormat}` TextRow { label: "Color mode"; detail: "Wide-gamut SDR desktop at 10-bit"; value: SystemSettings.colorPreset || "wide" } TextRow { label: "Variable refresh"; detail: SystemSettings.monitorVrrActive ? "Active for current fullscreen content" : "Ready when game or video content requests it"; value: SystemSettings.monitorVrrActive ? "Active" : "Standby"; divider: false } } SettingsCard { title: "Gaming display policy" subtitle: "These values apply immediately and are restored when Panama starts." SettingRow { label: "Game-aware HDR" detail: "Enter HDR only for fullscreen content that requests it" controlWidth: 48 SettingsToggle { anchors.right: parent.right; anchors.verticalCenter: parent.verticalCenter; checked: SystemSettings.autoHdr; onToggled: value => SystemSettings.setAutoHdr(value) } } SettingRow { label: "Content-aware VRR" detail: "Enable variable refresh only for game and video content" controlWidth: 48 SettingsToggle { anchors.right: parent.right; anchors.verticalCenter: parent.verticalCenter; checked: SystemSettings.vrrPolicy === 3; onToggled: value => SystemSettings.setVrrPolicy(value ? 3 : 0) } } SettingRow { label: "Direct scanout for games" detail: "Bypass compositing only for windows classified as games" divider: false controlWidth: 48 SettingsToggle { anchors.right: parent.right; anchors.verticalCenter: parent.verticalCenter; checked: SystemSettings.directScanoutPolicy === 2; onToggled: value => SystemSettings.setDirectScanoutPolicy(value ? 2 : 0) } } } SettingsCard { title: "Night Light" SettingRow { label: "Warm display colors" detail: NightLight.automatic ? "Following the evening schedule" : "Manual control" controlWidth: 48 SettingsToggle { anchors.right: parent.right; anchors.verticalCenter: parent.verticalCenter; checked: NightLight.active; onToggled: NightLight.toggle() } } SettingRow { label: "Color temperature" detail: `${NightLight.temperature} K` divider: false controlWidth: 230 ValueSlider { anchors.fill: parent value: (6500 - NightLight.temperature) / 4000 icon: "weather-clear-night-symbolic" onMoved: value => NightLight.temperature = Math.round((6500 - value * 4000) / 50) * 50 } } } Rectangle { width: parent.width height: warningText.implicitHeight + 30 radius: Theme.cardRadius color: Theme.alpha(Theme.warn, 0.085) border.width: 1 border.color: Theme.alpha(Theme.warn, 0.22) Text { id: warningText anchors.fill: parent anchors.margins: 15 text: "Full-time desktop HDR stays unavailable here because the current compositor path can break screenshots, OBS, Sunshine, and lock-screen capture. Game-aware HDR keeps the desktop dependable without giving up HDR games." color: Theme.mix(Theme.fg, Theme.warn, 0.25) font.family: Theme.fontFamily font.pixelSize: Theme.fontSizeSmall wrapMode: Text.WordWrap } } }