Files
Button/qml/BackgroundLayer.qml
T
2026-06-17 04:55:15 +03:00

93 lines
3.5 KiB
QML

import QtQuick 2.12
import QtGraphicalEffects 1.12
Item {
id: root
property var bg: settingsContainer
property int bx1: 0
property int by1: 0
property int br1: 200
property int bx2: 0
property int by2: 0
property int br2: 200
Rectangle {
anchors.fill: parent
color: "black"
}
// Solid color
Rectangle {
anchors.fill: parent
visible: settingsContainer.backgroundType === "solid"
color: settingsContainer.backgroundColor1
}
// Image background
Image {
anchors.fill: parent
visible: settingsContainer.backgroundType === "image" && source != ""
fillMode: Image.PreserveAspectCrop
source: {
var p = settingsContainer.backgroundImage
if (!p) return ""
if (p.indexOf("file://") === 0 || p.indexOf("qrc:") === 0 || p.indexOf("http") === 0) return p
if (p.charAt(0) === "/" || /^[A-Za-z]:[\\\/]/.test(p)) return "file://" + p
return "file://" + settingsContainer.iconsDir + "/" + p
}
}
// Animated gradient (default)
Item {
anchors.fill: parent
visible: settingsContainer.backgroundType === "gradient"
RadialGradient {
anchors.fill: parent
horizontalOffset: bx1
verticalOffset: by1
horizontalRadius: br1
verticalRadius: br1
gradient: Gradient {
GradientStop { position: 0.0; color: settingsContainer.backgroundColor1 }
GradientStop { position: 1.0; color: "transparent" }
}
Behavior on horizontalOffset { NumberAnimation { duration: 5000; easing.type: Easing.Linear } }
Behavior on verticalOffset { NumberAnimation { duration: 5000; easing.type: Easing.Linear } }
Behavior on horizontalRadius { NumberAnimation { duration: 5000; easing.type: Easing.Linear } }
Behavior on verticalRadius { NumberAnimation { duration: 5000; easing.type: Easing.Linear } }
}
RadialGradient {
anchors.fill: parent
horizontalOffset: bx2
verticalOffset: by2
horizontalRadius: br2
verticalRadius: br2
gradient: Gradient {
GradientStop { position: 0.0; color: settingsContainer.backgroundColor2 }
GradientStop { position: 1.0; color: "transparent" }
}
Behavior on horizontalOffset { NumberAnimation { duration: 5000; easing.type: Easing.Linear } }
Behavior on verticalOffset { NumberAnimation { duration: 5000; easing.type: Easing.Linear } }
Behavior on horizontalRadius { NumberAnimation { duration: 5000; easing.type: Easing.Linear } }
Behavior on verticalRadius { NumberAnimation { duration: 5000; easing.type: Easing.Linear } }
}
Timer {
running: settingsContainer.backgroundAnimated && settingsContainer.backgroundType === "gradient"
repeat: true
interval: 2500
triggeredOnStart: true
onTriggered: {
bx1 = Math.random() * root.width - root.width / 2
by1 = Math.random() * root.height - root.height / 2
br1 = Math.random() * 300 + 200
bx2 = Math.random() * root.width - root.width / 2
by2 = Math.random() * root.height - root.height / 2
br2 = Math.random() * 300 + 200
}
}
}
}