summary refs log tree commit diff
path: root/resources
diff options
context:
space:
mode:
authorJoseph Donofry <joedonofry@gmail.com>2023-01-13 20:23:07 -0500
committerGitHub <noreply@github.com>2023-01-14 02:23:07 +0100
commit8835040db61d039af4bab34e36b1e634bb9d1d1f (patch)
treeb1290f7631682f1d9285f706688658926e7b8f22 /resources
parentTranslated using Weblate (Japanese) (diff)
downloadnheko-8835040db61d039af4bab34e36b1e634bb9d1d1f.tar.xz
Pause ParticleEmitter when not in use (#1284)
* Pause ParticleEmitter when not in use

* Use timer instead to pause particle system
Diffstat (limited to 'resources')
-rw-r--r--resources/qml/TimelineView.qml64
1 files changed, 43 insertions, 21 deletions
diff --git a/resources/qml/TimelineView.qml b/resources/qml/TimelineView.qml
index b82cba65..0d47746c 100644
--- a/resources/qml/TimelineView.qml
+++ b/resources/qml/TimelineView.qml
@@ -25,6 +25,7 @@ Item {
     property var room: null
     property var roomPreview: null
     property bool showBackButton: false
+    property bool shouldEffectsRun: false
     clip: true
 
     onRoomChanged: if (room != null) room.triggerSpecialEffects()
@@ -344,7 +345,10 @@ Item {
         onClicked: Rooms.resetCurrentRoom()
     }
 
-    ParticleSystem { id: confettiParticleSystem }
+    ParticleSystem { id: confettiParticleSystem 
+        Component.onCompleted: pause();
+        paused: !shouldEffectsRun
+    }
 
     Emitter {
         id: confettiEmitter
@@ -356,6 +360,7 @@ Item {
         emitRate: Math.min(400 * Math.sqrt(parent.width * parent.height) / 870, 1000)
         lifeSpan: 15000
         system: confettiParticleSystem
+        maximumEmitted: 500
         velocityFromMovement: 8
         size: 16
         sizeVariation: 4
@@ -365,27 +370,27 @@ Item {
             xVariation: Math.min(4 * parent.width / 7, 450)
             yVariation: 250
         }
+    }
 
-        ImageParticle {
-            system: confettiParticleSystem
-            source: "qrc:/confettiparticle.svg"
-            rotationVelocity: 0
-            rotationVelocityVariation: 360
-            colorVariation: 1
-            color: "white"
-            entryEffect: ImageParticle.None
-            xVector: PointDirection {
-                x: 1
-                y: 0
-                xVariation: 0.2
-                yVariation: 0.2
-            }
-            yVector: PointDirection {
-                x: 0
-                y: 0.5
-                xVariation: 0.2
-                yVariation: 0.2
-            }
+    ImageParticle {
+        system: confettiParticleSystem
+        source: "qrc:/confettiparticle.svg"
+        rotationVelocity: 0
+        rotationVelocityVariation: 360
+        colorVariation: 1
+        color: "white"
+        entryEffect: ImageParticle.None
+        xVector: PointDirection {
+            x: 1
+            y: 0
+            xVariation: 0.2
+            yVariation: 0.2
+        }
+        yVector: PointDirection {
+            x: 0
+            y: 0.5
+            xVariation: 0.2
+            yVariation: 0.2
         }
     }
 
@@ -401,6 +406,14 @@ Item {
         roomid: room ? room.roomId : ""
     }
 
+    Timer {
+        id: effectsTimer
+        onTriggered: shouldEffectsRun = false;
+        interval: confettiEmitter.lifeSpan
+        repeat: false
+        running: false
+    }
+
     Connections {
         function onOpenReadReceiptsDialog(rr) {
             var dialog = readReceiptsDialog.createObject(timelineRoot, {
@@ -424,10 +437,19 @@ Item {
             if (!Settings.fancyEffects)
                 return
 
+            shouldEffectsRun = true;
             confettiEmitter.pulse(parent.height * 2)
             room.markSpecialEffectsDone()
         }
 
+        function onConfettiDone()
+        {
+            if (!Settings.fancyEffects)
+                return
+
+            effectsTimer.start();
+        }
+
         target: room
     }