summaryrefslogtreecommitdiff
path: root/modules/osd/Osd.qml
blob: 3f6d8bc36f8b86415074c565ad886efd686c278e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
import "root:/widgets"
import "root:/services"
import "root:/config"
import Quickshell
import QtQuick

Variants {
    model: Quickshell.screens

    Scope {
        id: root

        required property ShellScreen modelData
        readonly property Brightness.Monitor monitor: Brightness.getMonitorForScreen(modelData)
        property bool osdVisible
        property bool hovered

        function show(): void {
            root.osdVisible = true;
            timer.restart();
        }

        Connections {
            target: Audio

            function onMutedChanged(): void {
                root.show();
            }

            function onVolumeChanged(): void {
                root.show();
            }
        }

        Connections {
            target: root.monitor

            function onBrightnessChanged(): void {
                root.show();
            }
        }

        Timer {
            id: timer

            interval: OsdConfig.hideDelay
            onTriggered: {
                if (!root.hovered)
                    root.osdVisible = false;
            }
        }

        LazyLoader {
            loading: true

            StyledWindow {
                id: win

                screen: root.modelData
                name: "osd"
                visible: wrapper.shouldBeVisible

                mask: Region {
                    item: wrapper
                }

                anchors.left: true
                anchors.right: true
                height: wrapper.height

                Background {
                    id: bg

                    anchors.verticalCenter: parent.verticalCenter
                    anchors.right: parent.right

                    wrapperHeight: wrapper.height
                    realWrapperWidth: Math.min(wrapper.width, content.width)
                }

                Wrapper {
                    id: wrapper

                    anchors.verticalCenter: parent.verticalCenter
                    anchors.right: parent.right

                    implicitHeight: content.height + bg.rounding * 2

                    osdVisible: root.osdVisible
                    contentWidth: content.width

                    Content {
                        id: content

                        monitor: root.monitor
                    }
                }

                HoverHandler {
                    id: hoverHandler

                    onHoveredChanged: {
                        root.hovered = hovered;
                        if (hovered)
                            timer.stop();
                        else
                            root.osdVisible = false;
                    }
                }
            }
        }
    }
}