Pause ParticleEmitter when not in use (#1284)

* Pause ParticleEmitter when not in use

* Use timer instead to pause particle system
This commit is contained in:
Joseph Donofry 2023-01-13 20:23:07 -05:00 committed by GitHub
parent e25fd5f4fc
commit 8835040db6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 45 additions and 21 deletions

View File

@ -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
}

View File

@ -1998,6 +1998,7 @@ void
TimelineModel::markSpecialEffectsDone()
{
needsSpecialEffects_ = false;
emit confettiDone();
}
QString

View File

@ -451,6 +451,7 @@ signals:
void newCallEvent(const mtx::events::collections::TimelineEvents &event);
void scrollToIndex(int index);
void confetti();
void confettiDone();
void lastMessageChanged();
void notificationsChanged();