shift-shell/lookandfeel/contents/splash/Splash.qml
Marco Allegretti 753909a6ce Move shell and KWin surfaces to shared motion
Apply Motion tokens to startup, applet configuration, lockscreen controls, logout and splash transitions, KWin effects, and the mobile task switcher. Preserve timing-specific behavior where it drives runtime state.
2026-05-21 11:14:42 +02:00

102 lines
No EOL
3.4 KiB
QML

/*
SPDX-FileCopyrightText: 2026 Marco Allegretti
SPDX-License-Identifier: EUPL-1.2
*/
import QtQuick
import org.kde.kirigami as Kirigami
import org.kde.plasma.private.mobileshell as MobileShell
Rectangle {
id: root
color: "#0e0f16"
property int stage
readonly property bool busy: stage > 1 && stage < 6
readonly property int longAnimationDuration: MobileShell.Motion.duration(MobileShell.Motion.EffectsDefault)
readonly property int veryLongAnimationDuration: MobileShell.Motion.duration(MobileShell.Motion.EffectsSlow)
readonly property int spinnerAnimationDuration: Math.round(MobileShell.Motion.duration(MobileShell.Motion.EffectsSlow) * 3.5)
Item {
id: content
anchors.centerIn: parent
width: Math.min(parent.width, Kirigami.Units.gridUnit * 24)
height: Kirigami.Units.gridUnit * 12
opacity: root.stage > 1 ? 1 : 0
Behavior on opacity {
OpacityAnimator {
duration: root.veryLongAnimationDuration
easing.type: MobileShell.Motion.easing(MobileShell.Motion.EffectsSlow)
}
}
Text {
id: wordmark
anchors.centerIn: parent
text: "SHIFT"
color: "#fcfcfc"
font.family: "Atkinson Hyperlegible Next"
font.pixelSize: Math.round(Kirigami.Units.gridUnit * 3.2)
font.weight: Font.DemiBold
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
}
Rectangle {
width: Math.round(Kirigami.Units.gridUnit * 5)
height: Math.max(2, Math.round(Kirigami.Units.devicePixelRatio * 2))
radius: height / 2
color: "#2eb8a8"
anchors.top: wordmark.bottom
anchors.topMargin: Kirigami.Units.largeSpacing
anchors.horizontalCenter: parent.horizontalCenter
}
Item {
id: busyIndicator
width: Kirigami.Units.gridUnit * 1.6
height: width
anchors.horizontalCenter: parent.horizontalCenter
anchors.top: wordmark.bottom
anchors.topMargin: Kirigami.Units.gridUnit * 2.2
opacity: root.busy ? 1 : 0
Behavior on opacity {
OpacityAnimator {
duration: root.longAnimationDuration
easing.type: MobileShell.Motion.easing(MobileShell.Motion.EffectsDefault)
}
}
Rectangle {
anchors.fill: parent
radius: width / 2
color: "transparent"
border.width: Math.max(2, Math.round(Kirigami.Units.devicePixelRatio * 2))
border.color: "#2eb8a8"
opacity: 0.28
}
Rectangle {
width: parent.width
height: Math.max(2, Math.round(Kirigami.Units.devicePixelRatio * 2))
radius: height / 2
color: "#2eb8a8"
anchors.horizontalCenter: parent.horizontalCenter
anchors.top: parent.top
}
RotationAnimator on rotation {
from: 0
to: 360
duration: root.spinnerAnimationDuration
loops: Animation.Infinite
running: root.busy && MobileShell.Motion.enabled
}
}
}
}