matrixion/resources/qml/ui/Spinner.qml

141 lines
3.8 KiB
QML
Raw Normal View History

// SPDX-FileCopyrightText: Nheko Contributors
2021-03-12 07:09:57 +03:00
//
// SPDX-License-Identifier: GPL-3.0-or-later
2021-07-09 05:39:27 +03:00
import "./animations"
2023-06-02 01:43:38 +03:00
import QtQuick
import QtQuick.Effects
2021-07-09 05:39:27 +03:00
2021-03-12 07:09:57 +03:00
Item {
id: spinner
readonly property real a: Math.PI / 6
readonly property var anims: [anim1, anim2, anim3, anim4, anim5, anim6]
2023-10-31 05:11:03 +03:00
readonly property int barCount: 6
readonly property var colors: ["#c0def5", "#87aade", "white"]
property var foreground: "#333"
2021-07-09 05:39:27 +03:00
readonly property int glowDuration: 300
2023-10-31 05:11:03 +03:00
readonly property int pauseDuration: barCount * 150
property bool running: true
property int spacing: 0
2021-03-12 07:09:57 +03:00
height: 40
width: barCount * (height * 0.375)
Row {
id: row
2023-10-31 05:11:03 +03:00
transform: Matrix4x4 {
matrix: Qt.matrix4x4(Math.cos(spinner.a), -Math.sin(spinner.a), 0, 0, 0, Math.cos(spinner.a), 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)
}
2021-03-12 07:09:57 +03:00
Rectangle {
id: rect1
color: "white"
2023-10-31 05:11:03 +03:00
height: spinner.height / 3.5
width: ((spinner.width / spinner.barCount) - (spinner.spacing)) * 1.5
2021-03-12 07:09:57 +03:00
}
Rectangle {
id: rect2
color: spinner.colors[0]
2023-10-31 05:11:03 +03:00
height: spinner.height
width: (spinner.width / spinner.barCount) - spinner.spacing
2021-03-12 07:09:57 +03:00
}
Rectangle {
id: rect3
color: spinner.colors[1]
2023-10-31 05:11:03 +03:00
height: spinner.height
width: (spinner.width / spinner.barCount) - spinner.spacing
2021-03-12 07:09:57 +03:00
}
Rectangle {
id: rect4
color: spinner.colors[2]
2023-10-31 05:11:03 +03:00
height: spinner.height
width: (spinner.width / spinner.barCount) - spinner.spacing
2021-03-12 07:09:57 +03:00
}
Rectangle {
id: rect5
color: "white"
2023-10-31 05:11:03 +03:00
height: spinner.height / 3.5
width: (spinner.width / (spinner.barCount + 1)) - spinner.spacing
2021-03-12 07:09:57 +03:00
}
Rectangle {
id: rect6
color: "white"
2023-10-31 05:11:03 +03:00
height: spinner.height
width: (spinner.width / spinner.barCount) - spinner.spacing
2021-03-12 07:09:57 +03:00
}
2021-07-09 05:39:27 +03:00
BlinkAnimation {
2021-03-12 07:09:57 +03:00
id: anim1
2021-07-10 18:21:15 +03:00
2021-07-09 05:39:27 +03:00
glowDuration: spinner.glowDuration
2021-07-10 18:21:15 +03:00
offset: 0 / spinner.barCount
2023-10-31 05:11:03 +03:00
pauseDuration: spinner.pauseDuration
running: spinner.running
target: rect1
2021-03-12 07:09:57 +03:00
}
2021-07-09 05:39:27 +03:00
BlinkAnimation {
2021-03-12 07:09:57 +03:00
id: anim2
2021-07-10 18:21:15 +03:00
2021-07-09 05:39:27 +03:00
glowDuration: spinner.glowDuration
2021-07-10 18:21:15 +03:00
offset: 1 / spinner.barCount
2023-10-31 05:11:03 +03:00
pauseDuration: spinner.pauseDuration
running: spinner.running
target: rect2
2021-03-12 07:09:57 +03:00
}
2021-07-09 05:39:27 +03:00
BlinkAnimation {
2021-03-12 07:09:57 +03:00
id: anim3
2021-07-10 18:21:15 +03:00
2021-07-09 05:39:27 +03:00
glowDuration: spinner.glowDuration
2021-07-10 18:21:15 +03:00
offset: 2 / spinner.barCount
2023-10-31 05:11:03 +03:00
pauseDuration: spinner.pauseDuration
running: spinner.running
target: rect3
2021-03-12 07:09:57 +03:00
}
2021-07-09 05:39:27 +03:00
BlinkAnimation {
2021-03-12 07:09:57 +03:00
id: anim4
2021-07-10 18:21:15 +03:00
2021-07-09 05:39:27 +03:00
glowDuration: spinner.glowDuration
2021-07-10 18:21:15 +03:00
offset: 3 / spinner.barCount
2023-10-31 05:11:03 +03:00
pauseDuration: spinner.pauseDuration
running: spinner.running
target: rect4
2021-03-12 07:09:57 +03:00
}
2021-07-09 05:39:27 +03:00
BlinkAnimation {
2021-03-12 07:09:57 +03:00
id: anim5
2021-07-10 18:21:15 +03:00
2021-07-09 05:39:27 +03:00
glowDuration: spinner.glowDuration
2021-07-10 18:21:15 +03:00
offset: 4 / spinner.barCount
2023-10-31 05:11:03 +03:00
pauseDuration: spinner.pauseDuration
running: spinner.running
target: rect5
2021-03-12 07:09:57 +03:00
}
2021-07-09 05:39:27 +03:00
BlinkAnimation {
2021-03-12 07:09:57 +03:00
id: anim6
2021-07-10 18:21:15 +03:00
2021-07-09 05:39:27 +03:00
glowDuration: spinner.glowDuration
2021-07-10 18:21:15 +03:00
offset: 5 / spinner.barCount
2023-10-31 05:11:03 +03:00
pauseDuration: spinner.pauseDuration
running: spinner.running
target: rect6
2021-03-12 07:09:57 +03:00
}
}
2023-06-02 01:43:38 +03:00
MultiEffect {
2021-03-12 07:09:57 +03:00
anchors.fill: row
2023-06-02 01:43:38 +03:00
shadowBlur: 14
shadowColor: spinner.foreground
2023-10-31 05:11:03 +03:00
shadowEnabled: true
2021-03-12 07:09:57 +03:00
source: row
transform: Matrix4x4 {
matrix: Qt.matrix4x4(Math.cos(spinner.a), -Math.sin(spinner.a), 0, 0, 0, Math.cos(spinner.a), 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)
}
}
}