1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
// Config created by Keyitdev https://git.rp1.hu/gabeszm/sddm-rave-theme
// Copyright (C) 2022-2025 Keyitdev
// Distributed under the GPLv3+ License https://www.gnu.org/licenses/gpl-3.0.html
import QtQuick 2.15
Canvas {
id: particleCanvas
anchors.fill: parent
property int particleCount: 55
property var particles: []
property real time: 0
function initParticles() {
var arr = []
for (var i = 0; i < particleCount; i++) {
arr.push({
x: Math.random() * width,
y: Math.random() * height,
vx: (Math.random() - 0.5) * 0.35,
vy: (Math.random() - 0.5) * 0.35,
baseR: Math.random() * 2.0 + 0.8,
hue: Math.random() * 360,
hueSpeed: (Math.random() - 0.5) * 0.4,
phase: Math.random() * Math.PI * 2,
opacity: Math.random() * 0.45 + 0.15,
glowR: Math.random() * 18 + 8
})
}
particles = arr
}
onPaint: {
var ctx = getContext("2d")
ctx.clearRect(0, 0, width, height)
for (var i = 0; i < particles.length; i++) {
var p = particles[i]
var r = p.baseR * (0.75 + 0.25 * Math.sin(p.phase + time * 2.2))
// Glow halo
var grd = ctx.createRadialGradient(p.x, p.y, 0, p.x, p.y, p.glowR)
grd.addColorStop(0, "hsla(" + p.hue + ",100%,72%," + (p.opacity * 0.55) + ")")
grd.addColorStop(1, "hsla(" + p.hue + ",100%,72%,0)")
ctx.beginPath()
ctx.arc(p.x, p.y, p.glowR, 0, Math.PI * 2)
ctx.fillStyle = grd
ctx.fill()
// Core dot
ctx.beginPath()
ctx.arc(p.x, p.y, r, 0, Math.PI * 2)
ctx.fillStyle = "hsla(" + p.hue + ",100%,88%," + p.opacity + ")"
ctx.fill()
}
}
Timer {
interval: 16
repeat: true
running: true
onTriggered: {
particleCanvas.time += 0.016
var pts = particleCanvas.particles
var W = particleCanvas.width
var H = particleCanvas.height
var t = particleCanvas.time
for (var i = 0; i < pts.length; i++) {
var p = pts[i]
p.x += p.vx + Math.sin(t * 0.9 + p.phase) * 0.28
p.y += p.vy + Math.cos(t * 0.7 + p.phase) * 0.28
p.hue += p.hueSpeed
p.phase += 0.008
var margin = p.glowR
if (p.x < -margin) p.x = W + margin
if (p.x > W + margin) p.x = -margin
if (p.y < -margin) p.y = H + margin
if (p.y > H + margin) p.y = -margin
}
particleCanvas.requestPaint()
}
}
Component.onCompleted: {
// kis késleltetés hogy a méret biztosan kész legyen
Qt.callLater(initParticles)
}
}
|