From f35f8e018fcc751a8f8ebfad6fc8c0ce9ed0f2a8 Mon Sep 17 00:00:00 2001 From: Sighthesia Date: Sat, 25 Oct 2025 01:22:35 +0800 Subject: [PATCH] BrightnessService: add switch to toggle minimum brightness limit --- Assets/Translations/de.json | 6 +++++- Assets/Translations/en.json | 6 +++++- Assets/Translations/es.json | 6 +++++- Assets/Translations/fr.json | 6 +++++- Assets/Translations/pt.json | 6 +++++- Assets/Translations/zh-CN.json | 6 +++++- Commons/Settings.qml | 1 + Modules/Settings/Tabs/DisplayTab.qml | 8 ++++++++ Services/BrightnessService.qml | 12 ++++++------ 9 files changed, 45 insertions(+), 12 deletions(-) diff --git a/Assets/Translations/de.json b/Assets/Translations/de.json index 5579f765..3c5eb48c 100644 --- a/Assets/Translations/de.json +++ b/Assets/Translations/de.json @@ -162,6 +162,10 @@ "brightness-step": { "label": "Helligkeits-Schrittgröße", "description": "Schrittgröße für Helligkeitsänderungen anpassen (Mausrad und Tastenkombinationen)." + }, + "enforce-minimum": { + "label": "Mindesthelligkeit erzwingen (1%)", + "description": "Löst das Problem, dass die Hintergrundbeleuchtung auf einigen Displays bei 0% Helligkeit vollständig ausgeschaltet wird." } }, "night-light": { @@ -1731,4 +1735,4 @@ "note": "Nur ein paar Grundeinstellungen – alle Optionen befinden sich in den Einstellungen" } } -} +} \ No newline at end of file diff --git a/Assets/Translations/en.json b/Assets/Translations/en.json index 79d95ab4..caafa9e5 100644 --- a/Assets/Translations/en.json +++ b/Assets/Translations/en.json @@ -162,6 +162,10 @@ "brightness-step": { "label": "Brightness step size", "description": "Adjust the step size for brightness changes (scroll wheel and keyboard shortcuts)." + }, + "enforce-minimum": { + "label": "Enforce minimum brightness (1%)", + "description": "Solves the problem of backlight completely turning off on some displays at 0% brightness." } }, "night-light": { @@ -1731,4 +1735,4 @@ "note": "Just a few basics to get you started - full options are in Settings" } } -} +} \ No newline at end of file diff --git a/Assets/Translations/es.json b/Assets/Translations/es.json index aaae9d49..53307a64 100644 --- a/Assets/Translations/es.json +++ b/Assets/Translations/es.json @@ -162,6 +162,10 @@ "brightness-step": { "label": "Tamaño del paso de brillo", "description": "Ajusta el tamaño del paso para los cambios de brillo (rueda de desplazamiento y atajos de teclado)." + }, + "enforce-minimum": { + "label": "Forzar brillo mínimo (1%)", + "description": "Resuelve el problema de la retroiluminación que se apaga completamente en algunas pantallas al 0% de brillo." } }, "night-light": { @@ -1731,4 +1735,4 @@ "note": "Solo algunos conceptos básicos para empezar: todas las opciones están en Configuración." } } -} +} \ No newline at end of file diff --git a/Assets/Translations/fr.json b/Assets/Translations/fr.json index f2304dcb..2fe776d1 100644 --- a/Assets/Translations/fr.json +++ b/Assets/Translations/fr.json @@ -162,6 +162,10 @@ "brightness-step": { "label": "Incrément de luminosité", "description": "Ajustez l'incrément pour les changements de luminosité (molette de la souris et raccourcis clavier)." + }, + "enforce-minimum": { + "label": "Imposer une luminosité minimale (1%)", + "description": "Résout le problème de l'extinction complète du rétroéclairage sur certains écrans à 0% de luminosité." } }, "night-light": { @@ -1731,4 +1735,4 @@ "note": "Quelques réglages de base pour démarrer — toutes les options sont dans Paramètres" } } -} +} \ No newline at end of file diff --git a/Assets/Translations/pt.json b/Assets/Translations/pt.json index 8dfe9ab7..9db8c6d9 100644 --- a/Assets/Translations/pt.json +++ b/Assets/Translations/pt.json @@ -162,6 +162,10 @@ "brightness-step": { "label": "Tamanho do passo do brilho", "description": "Ajuste o tamanho do passo para alterações de brilho (roda do mouse e atalhos de teclado)." + }, + "enforce-minimum": { + "label": "Forçar brilho mínimo (1%)", + "description": "Resolve o problema da retroiluminação apagar completamente em alguns monitores com brilho em 0%." } }, "night-light": { @@ -1731,4 +1735,4 @@ "note": "Apenas alguns ajustes básicos para começar - o restante está em Configurações" } } -} +} \ No newline at end of file diff --git a/Assets/Translations/zh-CN.json b/Assets/Translations/zh-CN.json index a7d6556d..c294bd47 100644 --- a/Assets/Translations/zh-CN.json +++ b/Assets/Translations/zh-CN.json @@ -162,6 +162,10 @@ "brightness-step": { "label": "亮度步长", "description": "调整亮度变化的步长(滚轮和键盘快捷键)。" + }, + "enforce-minimum": { + "label": "限制最小亮度为 1%", + "description": "解决亮度为 0% 时部分显示器背光完全关闭的问题。" } }, "night-light": { @@ -1731,4 +1735,4 @@ "note": "先进行一些基础设置——更多选项可在“设置”中找到" } } -} +} \ No newline at end of file diff --git a/Commons/Settings.qml b/Commons/Settings.qml index 709cebba..9b89176e 100644 --- a/Commons/Settings.qml +++ b/Commons/Settings.qml @@ -352,6 +352,7 @@ Singleton { // brightness property JsonObject brightness: JsonObject { property int brightnessStep: 5 + property bool enforceMinimum: true } property JsonObject colorSchemes: JsonObject { diff --git a/Modules/Settings/Tabs/DisplayTab.qml b/Modules/Settings/Tabs/DisplayTab.qml index 7efaf6d7..8d626d0f 100644 --- a/Modules/Settings/Tabs/DisplayTab.qml +++ b/Modules/Settings/Tabs/DisplayTab.qml @@ -155,6 +155,14 @@ ColumnLayout { suffix: "%" onValueChanged: Settings.data.brightness.brightnessStep = value } + + NToggle { + Layout.fillWidth: true + label: I18n.tr("settings.display.monitors.enforce-minimum.label") + description: I18n.tr("settings.display.monitors.enforce-minimum.description") + checked: Settings.data.brightness.enforceMinimum + onToggled: checked => Settings.data.brightness.enforceMinimum = checked + } } NDivider { diff --git a/Services/BrightnessService.qml b/Services/BrightnessService.qml index 12244706..cf510c07 100644 --- a/Services/BrightnessService.qml +++ b/Services/BrightnessService.qml @@ -233,7 +233,8 @@ Singleton { } } - readonly property real stepSize: Settings.data.brightness.brightnessStep / 100.0 + readonly property real stepSize: Settings.data.brightness.brightnessStep / 100.0 + readonly property real minBrightnessValue: (Settings.data.brightness.enforceMinimum ? 0.01 : 0.0) // Timer for debouncing rapid changes readonly property Timer timer: Timer { @@ -253,9 +254,9 @@ Singleton { function increaseBrightness(): void { const value = !isNaN(monitor.queuedBrightness) ? monitor.queuedBrightness : monitor.brightness - // Set to step size if currently at minimum brightness - if (value <= 0.01) { - setBrightnessDebounced(Math.max(stepSize, 0.01)) + // Enforce minimum brightness if enabled + if (Settings.data.brightness.enforceMinimum && value <= minBrightnessValue) { + setBrightnessDebounced(Math.max(stepSize, minBrightnessValue)) } else { // Normal brightness increase setBrightnessDebounced(value + stepSize) @@ -268,8 +269,7 @@ Singleton { } function setBrightness(value: real): void { - // Enforce a minimum brightness of 1% (0.01) to avoid completely turning off the backlight - value = Math.max(0.01, Math.min(1, value)) + value = Math.max(minBrightnessValue, Math.min(1, value)) var rounded = Math.round(value * 100) if (timer.running) {