basic functionality: falling snow
authorRobin Krens <robin@robinkrens.nl>
Tue, 24 Nov 2020 19:52:08 +0000 (20:52 +0100)
committerRobin Krens <robin@robinkrens.nl>
Tue, 24 Nov 2020 19:52:08 +0000 (20:52 +0100)
contents/ui/main.qml
contents/ui/snowWindow.qml

index 4b6503b..f19618d 100644 (file)
@@ -30,24 +30,75 @@ import QtQuick.Controls 1.2
 
 Item {
        id: root;
+       
+       property var snow: [];
+       readonly property int snowCount: 100;
+       readonly property int screenWidth: Qt.application.screens[0].width;
+       readonly property int screenHeight: Qt.application.screens[0].height;
+       
        Button {
+
+               id: letitsnow;
+
                anchors.centerIn: parent;
                text: "Let it snow!";
 
                onClicked: {
-                       var snow = [];
-                       for (var i = 0; i < 10; i++) {
+                       
+                       //var screenWidth = Qt.application.screens[0].width;
+                       //var screenHeight = Qt.application.screens[0].height;
+                       
+                       for (var i = 0; i < snowCount; i++) {
+                               
+                               var component = Qt.createComponent("snowWindow.qml");
+                               
+                               snow[i] = component.createObject(root);
                                
-                               snow[i] = Qt.createComponent("snowWindow.qml");
-                               var snowWindow = snow[i].createObject(root);
-                               snowWindow.x = Math.random() * 500;
-                               snowWindow.y = Math.random() * 500;
-                               //snowWindow.opacity = 0.9;
-                               //snowWindow.flags = Qt.WA_TransparentForMouseEvents | Qt.X11BypassWindowManagerHint;
-
-                               //snowWindow.flags =  Qt.WA_TransparentForMouseEvents| Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint;
-                               snowWindow.showMaximized();
+                               snow[i].x = Math.random() * screenWidth;
+                               snow[i].y = Math.random() * screenHeight;
+                               
+                               snow[i].showMaximized();
                        }
-        }
-    }
+                       
+                       snowFalling.running = true;
+               }
+       }
+
+       Timer {
+
+               id: snowFalling
+
+               function test() {
+               }
+
+               interval: 50; running: false; repeat: true
+               
+               onTriggered: {
+                       
+                       for (var i = 0; i < snowCount; i++) {
+                               if(snow[i].dir == 0) {
+                                       snow[i].x += 2;
+                               } else {
+                                       snow[i].x -= 2;
+                               }
+                               
+                               if (snow[i].disposition++ % snow[i].swirl == 0) {
+                                       snow[i].dir = !snow[i].dir;
+                               }
+
+                               if(snow[i].x > screenWidth) {
+                                       snow[i].x = 0;
+                               } else if (snow[i].x < 0) {
+                                       snow[i].x = 1440;
+                               }
+
+                               snow[i].y += 2;
+
+                               if (snow[i].y > screenHeight) {
+                                       snow[i].y = 0;
+                               }
+                       }
+               }
+       }
+
 }
index fa51e65..56960fb 100644 (file)
@@ -25,26 +25,20 @@ import QtQuick.Window 2.2
 ApplicationWindow {
        
        id: root;
-       
-       width: 30; height: 30;
-       x: 500; y: 500;
-       //color: "transparent";
-       opacity: 0.5;
-       title: qsTr("Snowy")
-
-       flags: Qt.WindowStaysOnTopHint | Qt.FramelessWindowHint | Qt.WA_TransparentForMouseEvents | Qt.WA_TranslucentBackground | Qt.X11BypassWindowManagerHint;
-
 
-       //flags: Qt.WA_TranslucentBackground | Qt.X11BypassWindowManagerHint | Qt.WA_TransparentForMouseEvents;
+       property int dir: (Math.random() * 100) % 2; /* could go either left or right */
+       property int swirl: (Math.random() * 1000) % 55 + 2; /* random falling 'swirl' */
+       property int disposition: 0;
 
-       //flags: Qt.WA_TranslucentBackground | Qt.WA_TransparentForMouseEvents| Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint;
+       width: 3; height: 3;
+       //x: 500; y: 500;
+       opacity: 1;
+       //title: qsTr("Snowy")
 
-       //flags: Qt.WindowStaysOnTopHint | Qt.FramelessWindowHint | Qt.WA_TransparentForMouseEvents | Qt.WA_TranslucentBackground;
-       //color: "transparent";
+       flags: Qt.WindowStaysOnTopHint 
+               | Qt.FramelessWindowHint
+               | Qt.WA_TransparentForMouseEvents
+               | Qt.WA_TranslucentBackground 
+               | Qt.X11BypassWindowManagerHint;
 
-    //         Text {
-    //         anchors.centerIn: parent
-    //         color: "red";
-    //         text: qsTr("Hello World.")
-    //         }
 }