From 6267e54ad7fc6b50bc8b4d71bd948daed4bf33fd Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Thu, 23 Oct 2025 09:00:52 +0200 Subject: [PATCH] brightness: animate change for laptop screens, prevent pitch black w/ anti flashbang --- .../quickshell/ii/services/Brightness.qml | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/dots/.config/quickshell/ii/services/Brightness.qml b/dots/.config/quickshell/ii/services/Brightness.qml index 7a1b2aa63..116fbd4c0 100644 --- a/dots/.config/quickshell/ii/services/Brightness.qml +++ b/dots/.config/quickshell/ii/services/Brightness.qml @@ -90,12 +90,25 @@ Singleton { property real brightnessMultiplier: 1.0 property real multipliedBrightness: Math.max(0, Math.min(1, brightness * brightnessMultiplier)) property bool ready: false + property bool animateChanges: !monitor.isDdc onBrightnessChanged: { - if (monitor.ready) { - root.brightnessChanged(); + if (!monitor.ready) return; + root.brightnessChanged(); + } + + Behavior on multipliedBrightness { + enabled: monitor.animateChanges + NumberAnimation { + duration: 200 + easing.type: Easing.BezierSpline + easing.bezierCurve: Appearance.animationCurves.expressiveEffects } } + onMultipliedBrightnessChanged: { + if (monitor.animationEnabled) syncBrightness(); + else setTimer.restart(); + } function initialize() { monitor.ready = false; @@ -124,7 +137,7 @@ Singleton { } function syncBrightness() { - const brightnessValue = monitor.multipliedBrightness + const brightnessValue = Math.max(monitor.multipliedBrightness, root.minimumBrightnessAllowed) const rounded = Math.round(brightnessValue * monitor.rawMaxBrightness); setProc.command = isDdc ? ["ddcutil", "-b", busNum, "setvcp", "10", rounded] : ["brightnessctl", "--class", "backlight", "s", rounded, "--quiet"]; setProc.startDetached(); @@ -133,12 +146,10 @@ Singleton { function setBrightness(value: real): void { value = Math.max(root.minimumBrightnessAllowed, Math.min(1, value)); monitor.brightness = value; - setTimer.restart(); } function setBrightnessMultiplier(value: real): void { monitor.brightnessMultiplier = value; - setTimer.restart(); } Component.onCompleted: {