diff options
Diffstat (limited to 'raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/Modules/Lock/FadeToLockWindow.qml')
| -rw-r--r-- | raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/Modules/Lock/FadeToLockWindow.qml | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/Modules/Lock/FadeToLockWindow.qml b/raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/Modules/Lock/FadeToLockWindow.qml new file mode 100644 index 0000000..c73a59a --- /dev/null +++ b/raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/Modules/Lock/FadeToLockWindow.qml @@ -0,0 +1,102 @@ +pragma ComponentBehavior: Bound + +import QtQuick +import Quickshell +import Quickshell.Wayland +import qs.Common + +PanelWindow { + id: root + + property bool active: false + + signal fadeCompleted + signal fadeCancelled + + visible: active + color: "transparent" + + WlrLayershell.namespace: "dms:fade-to-lock" + WlrLayershell.layer: WlrLayershell.Overlay + WlrLayershell.exclusiveZone: -1 + WlrLayershell.keyboardFocus: active ? WlrKeyboardFocus.Exclusive : WlrKeyboardFocus.None + + anchors { + left: true + right: true + top: true + bottom: true + } + + Rectangle { + id: fadeOverlay + anchors.fill: parent + color: "black" + opacity: 0 + + onOpacityChanged: { + if (opacity >= 0.99 && root.active) { + root.fadeCompleted(); + } + } + } + + SequentialAnimation { + id: fadeSeq + running: false + + NumberAnimation { + target: fadeOverlay + property: "opacity" + from: 0.0 + to: 1.0 + duration: SettingsData.fadeToLockGracePeriod * 1000 + easing.type: Easing.OutCubic + } + } + + function startFade() { + if (!SettingsData.fadeToLockEnabled) + return; + active = true; + fadeOverlay.opacity = 0.0; + fadeSeq.stop(); + fadeSeq.start(); + } + + function cancelFade() { + fadeSeq.stop(); + fadeOverlay.opacity = 0.0; + active = false; + fadeCancelled(); + } + + MouseArea { + anchors.fill: parent + enabled: root.active + onClicked: root.cancelFade() + onPressed: root.cancelFade() + } + + FocusScope { + anchors.fill: parent + focus: root.active + + Keys.onPressed: event => { + root.cancelFade(); + event.accepted = true; + } + } + + Component.onCompleted: { + if (active) { + forceActiveFocus(); + } + } + + onActiveChanged: { + if (active) { + forceActiveFocus(); + } + } +} |