summaryrefslogtreecommitdiff
path: root/accounts/gkleen@sif/shell/quickshell/Services/Brightness.qml
diff options
context:
space:
mode:
Diffstat (limited to 'accounts/gkleen@sif/shell/quickshell/Services/Brightness.qml')
-rw-r--r--accounts/gkleen@sif/shell/quickshell/Services/Brightness.qml68
1 files changed, 68 insertions, 0 deletions
diff --git a/accounts/gkleen@sif/shell/quickshell/Services/Brightness.qml b/accounts/gkleen@sif/shell/quickshell/Services/Brightness.qml
new file mode 100644
index 00000000..87c7c05b
--- /dev/null
+++ b/accounts/gkleen@sif/shell/quickshell/Services/Brightness.qml
@@ -0,0 +1,68 @@
1pragma Singleton
2
3import QtQml
4import Quickshell
5import Quickshell.Io
6import Custom as Custom
7
8Singleton {
9 id: root
10
11 property string subsystem: "backlight"
12 property string device: "intel_backlight"
13
14 property real currBrightness
15 property real exponent: 4
16
17 function calcCurrBrightness() {
18 if (!currFile.loaded || !maxFile.loaded)
19 return undefined;
20 const curr = Number(currFile.text());
21 const max = Number(maxFile.text());
22 const val = Math.pow(curr / max, 1 / root.exponent);
23 return val;
24 }
25
26 Component.onCompleted: root.currBrightness = root.calcCurrBrightness()
27 Connections {
28 target: currFile
29 function onLoaded() { root.currBrightness = root.calcCurrBrightness(); }
30 }
31 Connections {
32 target: maxFile
33 function onLoaded() { root.currBrightness = root.calcCurrBrightness(); }
34 }
35
36 onCurrBrightnessChanged: {
37 root.currBrightness = Math.max(0, Math.min(1, root.currBrightness));
38
39 const prev = root.calcCurrBrightness();
40 if (typeof prev === 'undefined' || Math.abs(root.currBrightness - prev) < 0.01)
41 return;
42
43 const max = Number(maxFile.text());
44 const actual = Number(currFile.text());
45 let curr = Math.max(0, Math.min(max, Math.pow(root.currBrightness, root.exponent) * max));
46 if (Math.round(curr) == actual && curr < actual)
47 curr = Math.max(0, actual - 1);
48 else if (Math.round(curr) == actual && curr > actual)
49 curr = Math.min(max, actual + 1);
50 // root.currBrightness = Math.pow(curr / max, 1 / root.exponent);
51 Custom.Systemd.setBrightness(root.subsystem, root.device, Math.round(curr));
52 }
53
54 FileView {
55 id: currFile
56 path: `/sys/class/${root.subsystem}/${root.device}/brightness`
57 blockAllReads: true
58 watchChanges: true
59 onFileChanged: reload()
60 }
61 FileView {
62 id: maxFile
63 path: `/sys/class/${root.subsystem}/${root.device}/max_brightness`
64 blockAllReads: true
65 watchChanges: true
66 onFileChanged: reload()
67 }
68}