Warning, /utilities/kweather/src/qml/backgrounds/components/Snow.qml is written in an unsupported language. File is not indexed.
0001 /*
0002 * SPDX-FileCopyrightText: 2020 Han Young <hanyoung@protonmail.com>
0003 * SPDX-FileCopyrightText: 2020 Devin Lin <espidev@gmail.com>
0004 *
0005 * SPDX-License-Identifier: GPL-2.0-or-later
0006 */
0007 import QtQuick
0008 import QtQuick.Layouts
0009 Canvas {
0010 id: mycanvas
0011
0012 property var particles: []
0013
0014 renderStrategy: Canvas.Threaded
0015 onPaint: {
0016 var ctx = getContext("2d");
0017 ctx.strokeStyle = 'rgba(255,255,255,0.5)';
0018 ctx.lineWidth = 3;
0019 ctx.lineCap = 'round';
0020 ctx.clearRect(0, 0, width, height);
0021
0022 function draw() {
0023 for (var c = 0; c < particles.length; c++) {
0024 var p = particles[c];
0025 ctx.beginPath();
0026 context.arc(p.x, p.y + p.ys, p.l, 0, 2 * Math.PI, false);
0027 context.fillStyle = Qt.rgba(255,255,255,p.a);
0028 context.fill();
0029 }
0030 move();
0031 }
0032
0033 function move() {
0034 for (var b = 0; b < particles.length; b++) {
0035 var p = particles[b];
0036 p.y += p.ys;
0037 if (p.x < 1 || p.x > width || p.y > height) {
0038 p.x = Math.random() * width;
0039 p.y = -20;
0040 }
0041 }
0042 }
0043 draw();
0044 }
0045 Timer {
0046 id: animationTimer
0047 interval: 16
0048 running: true
0049 repeat: true
0050 onTriggered: parent.requestPaint()
0051 }
0052
0053 Component.onCompleted: {
0054 var init = [];
0055 var maxParts = 80;
0056
0057 for (var a = 0; a < maxParts; a++) {
0058 init.push({
0059 x: Math.random() * width,
0060 y: Math.random() * height,
0061 l: 5 + Math.random() * 10,
0062 ys: Math.random(),
0063 a: 0.4 + Math.random() * 0.6
0064 })
0065 }
0066
0067 particles = [];
0068 for (var b = 0; b < maxParts; b++) {
0069 particles[b] = init[b];
0070 }
0071 }
0072 }