diff options
Diffstat (limited to 'accounts/gkleen@sif/shell/quickshell/Services/Brightness.qml')
-rw-r--r-- | accounts/gkleen@sif/shell/quickshell/Services/Brightness.qml | 68 |
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..545ef24f --- /dev/null +++ b/accounts/gkleen@sif/shell/quickshell/Services/Brightness.qml | |||
@@ -0,0 +1,68 @@ | |||
1 | pragma Singleton | ||
2 | |||
3 | import QtQml | ||
4 | import Quickshell | ||
5 | import Quickshell.Io | ||
6 | import Custom as Custom | ||
7 | |||
8 | Singleton { | ||
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 | onLoaded: root.currBrightness = root.calcCurrBrightness() | ||
30 | } | ||
31 | Connections { | ||
32 | target: maxFile | ||
33 | 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 | } | ||