Files
dotfiles/.config/quickshell/nucleus-shell/modules/interface/polkit/Prompt.qml

151 lines
4.2 KiB
QML

import QtQuick
import QtQuick.Layouts
import QtQuick.Effects
import Quickshell
import Quickshell.Wayland
import qs.config
import qs.services
import qs.modules.components
PanelWindow {
id: window
property bool isClosing: false
default property alias content: contentContainer.data
signal fadeOutFinished()
anchors {
top: true
left: true
right: true
bottom: true
}
WlrLayershell.layer: WlrLayer.Overlay
WlrLayershell.exclusionMode: ExclusionMode.Ignore
WlrLayershell.keyboardFocus: WlrKeyboardFocus.Exclusive
color: "transparent"
WlrLayershell.namespace: "nucleus:prompt"
function closeWithAnimation() {
if (isClosing) return
isClosing = true
fadeOutAnim.start()
}
Item {
anchors.fill: parent
Keys.onPressed: {
if (event.key === Qt.Key_Escape) {
window.closeWithAnimation()
}
}
ScreencopyView {
id: screencopy
visible: hasContent
captureSource: window.screen
anchors.fill: parent
opacity: 0
scale: 1
layer.enabled: true
layer.effect: MultiEffect {
blurEnabled: true
blur: 1
blurMax: 32
brightness: -0.05
layer.enabled: true
layer.effect: MultiEffect {
autoPaddingEnabled: false
blurEnabled: true
blur: 1
blurMax: 32
}
}
}
NumberAnimation {
id: fadeInAnim
target: screencopy
property: "opacity"
from: 0
to: 1
duration: Metrics.chronoDuration("normal")
easing.type: Appearance.animation.easing
running: screencopy.visible && !window.isClosing
}
ParallelAnimation {
id: scaleInAnim
running: screencopy.visible && !window.isClosing
NumberAnimation {
target: contentContainer
property: "scale"
from: 0.9
to: 1
duration: Metrics.chronoDuration("normal")
easing.type: Appearance.animation.easing
}
ColorAnimation {
target: window
property: "color"
from: "transparent"
to: Appearance.m3colors.m3surface
duration: Metrics.chronoDuration("normal")
easing.type: Appearance.animation.easing
}
NumberAnimation {
target: contentContainer
property: "opacity"
from: 0
to: 1
duration: Metrics.chronoDuration("normal")
easing.type: Appearance.animation.easing
}
}
ParallelAnimation {
id: fadeOutAnim
NumberAnimation {
target: screencopy
property: "opacity"
to: 0
duration: Metrics.chronoDuration("normal")
easing.type: Appearance.animation.easing
}
ColorAnimation {
target: window
property: "color"
to: "transparent"
duration: Metrics.chronoDuration("normal")
easing.type: Appearance.animation.easing
}
NumberAnimation {
target: contentContainer
property: "opacity"
to: 0
duration: Metrics.chronoDuration("normal")
easing.type: Appearance.animation.easing
}
NumberAnimation {
target: contentContainer
property: "scale"
to: 0.9
duration: Metrics.chronoDuration("normal")
easing.type: Appearance.animation.easing
}
onFinished: {
window.visible = false
window.fadeOutFinished()
}
}
Item {
id: contentContainer
anchors.fill: parent
opacity: 0
scale: 0.9
}
}
}