forked from Shinonome/dots-hyprland
hefty: bar: popup choreography
This commit is contained in:
@@ -0,0 +1,19 @@
|
||||
pragma ComponentBehavior: Bound
|
||||
import QtQuick
|
||||
import ".."
|
||||
|
||||
Item {
|
||||
id: root
|
||||
|
||||
property real progress: 0
|
||||
default property Item child
|
||||
implicitWidth: child.implicitWidth
|
||||
implicitHeight: child.implicitHeight
|
||||
|
||||
children: [child]
|
||||
|
||||
property var animation: Appearance.animation.elementMoveSmall.numberAnimation.createObject(this)
|
||||
Behavior on progress {
|
||||
animation: root.animation
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
pragma ComponentBehavior: Bound
|
||||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
|
||||
GridLayout {
|
||||
id: root
|
||||
|
||||
property bool vertical: true
|
||||
columns: vertical ? 1 : -1
|
||||
property real totalDuration: 250
|
||||
property real interval: totalDuration / count
|
||||
|
||||
default property list<AbstractChoreographable> choreographableChildren
|
||||
readonly property int count: choreographableChildren.length
|
||||
children: choreographableChildren
|
||||
|
||||
property bool shown: true
|
||||
onShownChanged: {
|
||||
// When hiding, hide all at once
|
||||
if (!shown) {
|
||||
for (var i = 0; i < count; i++) {
|
||||
choreographableChildren[i].progress = 0;
|
||||
}
|
||||
}
|
||||
// When showing, choreograph
|
||||
root.choreographIndex = 0;
|
||||
}
|
||||
property int choreographIndex: count
|
||||
Timer {
|
||||
id: choreographTimer
|
||||
interval: root.interval
|
||||
property bool step: root.shown && root.choreographIndex < root.count
|
||||
running: step
|
||||
repeat: step
|
||||
onTriggered: {
|
||||
const index = root.choreographIndex;
|
||||
root.choreographableChildren[index].progress = 1;
|
||||
root.choreographIndex++;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
pragma ComponentBehavior: Bound
|
||||
import QtQuick
|
||||
|
||||
AbstractChoreographable {
|
||||
id: root
|
||||
|
||||
progress: 0
|
||||
property bool vertical: true
|
||||
property bool reverseDirection: false
|
||||
property real distance: 15
|
||||
|
||||
readonly property real directionMultiplier: reverseDirection ? -1 : 1
|
||||
|
||||
Component.onCompleted: syncProgress()
|
||||
onProgressChanged: syncProgress()
|
||||
|
||||
function syncProgress() {
|
||||
const progressDistance = distance * (1 - progress) * directionMultiplier;
|
||||
root.child.opacity = progress
|
||||
if (vertical) {
|
||||
root.child.y = progressDistance
|
||||
} else {
|
||||
root.child.x = progressDistance
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user