aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/particles/qquickimageparticle.cpp53
-rw-r--r--src/particles/qquickimageparticle_p.h2
2 files changed, 27 insertions, 28 deletions
diff --git a/src/particles/qquickimageparticle.cpp b/src/particles/qquickimageparticle.cpp
index d2f418021a..2b03d7889a 100644
--- a/src/particles/qquickimageparticle.cpp
+++ b/src/particles/qquickimageparticle.cpp
@@ -729,6 +729,7 @@ QQuickImageParticle::QQuickImageParticle(QQuickItem* parent)
, m_explicitAnimation(false)
, m_bypassOptimizations(false)
, perfLevel(Unknown)
+ , m_targetPerfLevel(Unknown)
, m_debugMode(false)
, m_entryEffect(Fade)
, m_startedImageLoading(0)
@@ -842,8 +843,7 @@ void QQuickImageParticle::setColor(const QColor &color)
m_color = color;
emit colorChanged();
m_explicitColor = true;
- if (perfLevel < ColoredPoint)
- reset();
+ checkPerfLevel(ColoredPoint);
}
void QQuickImageParticle::setColorVariation(qreal var)
@@ -853,8 +853,7 @@ void QQuickImageParticle::setColorVariation(qreal var)
m_color_variation = var;
emit colorVariationChanged();
m_explicitColor = true;
- if (perfLevel < ColoredPoint)
- reset();
+ checkPerfLevel(ColoredPoint);
}
void QQuickImageParticle::setAlphaVariation(qreal arg)
@@ -864,8 +863,7 @@ void QQuickImageParticle::setAlphaVariation(qreal arg)
emit alphaVariationChanged(arg);
}
m_explicitColor = true;
- if (perfLevel < ColoredPoint)
- reset();
+ checkPerfLevel(ColoredPoint);
}
void QQuickImageParticle::setAlpha(qreal arg)
@@ -875,8 +873,7 @@ void QQuickImageParticle::setAlpha(qreal arg)
emit alphaChanged(arg);
}
m_explicitColor = true;
- if (perfLevel < ColoredPoint)
- reset();
+ checkPerfLevel(ColoredPoint);
}
void QQuickImageParticle::setRedVariation(qreal arg)
@@ -886,8 +883,7 @@ void QQuickImageParticle::setRedVariation(qreal arg)
emit redVariationChanged(arg);
}
m_explicitColor = true;
- if (perfLevel < ColoredPoint)
- reset();
+ checkPerfLevel(ColoredPoint);
}
void QQuickImageParticle::setGreenVariation(qreal arg)
@@ -897,8 +893,7 @@ void QQuickImageParticle::setGreenVariation(qreal arg)
emit greenVariationChanged(arg);
}
m_explicitColor = true;
- if (perfLevel < ColoredPoint)
- reset();
+ checkPerfLevel(ColoredPoint);
}
void QQuickImageParticle::setBlueVariation(qreal arg)
@@ -908,8 +903,7 @@ void QQuickImageParticle::setBlueVariation(qreal arg)
emit blueVariationChanged(arg);
}
m_explicitColor = true;
- if (perfLevel < ColoredPoint)
- reset();
+ checkPerfLevel(ColoredPoint);
}
void QQuickImageParticle::setRotation(qreal arg)
@@ -919,8 +913,7 @@ void QQuickImageParticle::setRotation(qreal arg)
emit rotationChanged(arg);
}
m_explicitRotation = true;
- if (perfLevel < Deformable)
- reset();
+ checkPerfLevel(Deformable);
}
void QQuickImageParticle::setRotationVariation(qreal arg)
@@ -930,8 +923,7 @@ void QQuickImageParticle::setRotationVariation(qreal arg)
emit rotationVariationChanged(arg);
}
m_explicitRotation = true;
- if (perfLevel < Deformable)
- reset();
+ checkPerfLevel(Deformable);
}
void QQuickImageParticle::setRotationVelocity(qreal arg)
@@ -941,8 +933,7 @@ void QQuickImageParticle::setRotationVelocity(qreal arg)
emit rotationVelocityChanged(arg);
}
m_explicitRotation = true;
- if (perfLevel < Deformable)
- reset();
+ checkPerfLevel(Deformable);
}
void QQuickImageParticle::setRotationVelocityVariation(qreal arg)
@@ -952,8 +943,7 @@ void QQuickImageParticle::setRotationVelocityVariation(qreal arg)
emit rotationVelocityVariationChanged(arg);
}
m_explicitRotation = true;
- if (perfLevel < Deformable)
- reset();
+ checkPerfLevel(Deformable);
}
void QQuickImageParticle::setAutoRotation(bool arg)
@@ -963,8 +953,7 @@ void QQuickImageParticle::setAutoRotation(bool arg)
emit autoRotationChanged(arg);
}
m_explicitRotation = true;
- if (perfLevel < Deformable)
- reset();
+ checkPerfLevel(Deformable);
}
void QQuickImageParticle::setXVector(QQuickDirection* arg)
@@ -974,8 +963,7 @@ void QQuickImageParticle::setXVector(QQuickDirection* arg)
emit xVectorChanged(arg);
}
m_explicitDeformation = true;
- if (perfLevel < Deformable)
- reset();
+ checkPerfLevel(Deformable);
}
void QQuickImageParticle::setYVector(QQuickDirection* arg)
@@ -985,8 +973,7 @@ void QQuickImageParticle::setYVector(QQuickDirection* arg)
emit yVectorChanged(arg);
}
m_explicitDeformation = true;
- if (perfLevel < Deformable)
- reset();
+ checkPerfLevel(Deformable);
}
void QQuickImageParticle::setSpritesInterpolate(bool arg)
@@ -1200,6 +1187,14 @@ QQuickParticleData* QQuickImageParticle::getShadowDatum(QQuickParticleData* datu
return m_shadowData[datum->groupId][datum->index];
}
+void QQuickImageParticle::checkPerfLevel(PerformanceLevel level)
+{
+ if (m_targetPerfLevel < level) {
+ m_targetPerfLevel = level;
+ reset();
+ }
+}
+
bool QQuickImageParticle::loadingSomething()
{
return (m_image && m_image->pix.isLoading())
@@ -1319,6 +1314,8 @@ void QQuickImageParticle::finishBuildParticleNodes(QSGNode** node)
if (perfLevel >= ColoredPoint && !m_color.isValid())
m_color = QColor(Qt::white);//Hidden default, but different from unset
+ m_targetPerfLevel = perfLevel;
+
clearShadows();
if (m_material)
m_material = nullptr;
diff --git a/src/particles/qquickimageparticle_p.h b/src/particles/qquickimageparticle_p.h
index 78e914ec4c..0df098a05e 100644
--- a/src/particles/qquickimageparticle_p.h
+++ b/src/particles/qquickimageparticle_p.h
@@ -447,6 +447,8 @@ private:
bool m_bypassOptimizations;
PerformanceLevel perfLevel;
+ PerformanceLevel m_targetPerfLevel;
+ void checkPerfLevel(PerformanceLevel level);
bool m_debugMode;