nosignal-shell/modules/lock/LockSurface.qml
2025-06-23 19:33:55 +10:00

114 lines
2.3 KiB
QML

import "root:/widgets"
import "root:/services"
import "root:/config"
import Quickshell.Wayland
import QtQuick
import QtQuick.Effects
WlSessionLockSurface {
id: root
required property WlSessionLock lock
property bool locked
function unlock(): void {
locked = false;
background.opacity = 0;
animDelay.start();
}
Component.onCompleted: locked = true
color: "transparent"
Timer {
id: animDelay
interval: Appearance.anim.durations.large
onTriggered: root.lock.locked = false
}
ScreencopyView {
id: screencopy
anchors.fill: parent
captureSource: root.screen
visible: false
}
MultiEffect {
id: background
anchors.fill: parent
source: screencopy
autoPaddingEnabled: false
blurEnabled: true
blur: root.locked ? 1 : 0
blurMax: 64
blurMultiplier: 1
Behavior on opacity {
Anim {}
}
Behavior on blur {
Anim {}
}
}
Backgrounds {
id: backgrounds
locked: root.locked
weatherWidth: weather.implicitWidth
visible: false
}
MultiEffect {
anchors.fill: source
source: backgrounds
shadowEnabled: true
blurMax: 15
shadowColor: Qt.alpha(Colours.palette.m3shadow, 0.7)
}
Clock {
anchors.horizontalCenter: parent.horizontalCenter
anchors.bottom: parent.top
anchors.bottomMargin: -backgrounds.clockBottom
locked: root.locked
}
Input {
anchors.horizontalCenter: parent.horizontalCenter
anchors.top: parent.bottom
anchors.topMargin: -backgrounds.inputTop
lock: root
}
WeatherInfo {
id: weather
anchors.top: parent.bottom
anchors.right: parent.left
anchors.topMargin: -backgrounds.weatherTop
anchors.rightMargin: -backgrounds.weatherRight
}
MediaPlaying {
anchors.bottom: parent.top
anchors.right: parent.left
anchors.bottomMargin: -backgrounds.mediaBottom
anchors.rightMargin: -backgrounds.mediaRight
}
component Anim: NumberAnimation {
duration: Appearance.anim.durations.large
easing.type: Easing.BezierSpline
easing.bezierCurve: Appearance.anim.curves.standard
}
}