summaryrefslogtreecommitdiffstats
path: root/src/animations/xyanimation.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/animations/xyanimation.cpp')
-rw-r--r--src/animations/xyanimation.cpp80
1 files changed, 53 insertions, 27 deletions
diff --git a/src/animations/xyanimation.cpp b/src/animations/xyanimation.cpp
index 104f84a6..2b9ada51 100644
--- a/src/animations/xyanimation.cpp
+++ b/src/animations/xyanimation.cpp
@@ -29,8 +29,10 @@ QTCOMMERCIALCHART_BEGIN_NAMESPACE
XYAnimation::XYAnimation(XYChart *item):ChartAnimation(item),
m_item(item),
m_dirty(false),
- m_type(MoveDownAnimation)
+ m_type(NewAnimation)
{
+ setDuration(ChartAnimationDuration);
+ setEasingCurve(QEasingCurve::OutQuart);
}
XYAnimation::~XYAnimation()
@@ -39,38 +41,48 @@ XYAnimation::~XYAnimation()
void XYAnimation::setAnimationType(Animation type)
{
- if (state() != QAbstractAnimation::Stopped) stop();
+ if (state() != QAbstractAnimation::Stopped) stop();
m_type=type;
}
-void XYAnimation::setValues(QVector<QPointF> &oldPoints, QVector<QPointF> &newPoints, int index)
+void XYAnimation::setValues(const QVector<QPointF> &oldPoints, const QVector<QPointF> &newPoints, int index)
{
- if (state() != QAbstractAnimation::Stopped) stop();
+ if (state() != QAbstractAnimation::Stopped) stop();
- int x = oldPoints.count();
- int y = newPoints.count();
-
- if (x != y && abs(x - y) != 1) {
- m_oldPoints = newPoints;
- oldPoints.resize(newPoints.size());
- setKeyValueAt(0.0, qVariantFromValue(oldPoints));
- setKeyValueAt(1.0, qVariantFromValue(newPoints));
- m_dirty = false;
+ if (m_item->isDirty()) {
+ m_oldPoints = oldPoints;
+ m_newPoints = newPoints;
+ m_dirty=false;
}
else {
- if (m_dirty) {
+ if(m_dirty) {
+ m_newPoints = newPoints;
m_oldPoints = oldPoints;
- m_dirty = false;
+ m_dirty=false;
+ }
+ }
+
+ int x = m_oldPoints.count();
+ int y = m_newPoints.count();
+
+ if (abs(x - y) == 1) {
+ if (y < x){
+ if(!newPoints.isEmpty()) m_newPoints.insert(index,newPoints[index]);
+ m_index=index;if(newPoints.isEmpty())
+ m_dirty=true;
+ }
+ if (y > x){
+ m_oldPoints.insert(index, x > 0 ? m_oldPoints[index-1] : newPoints[index]);//add
}
- oldPoints = newPoints;
- if (y < x)
- m_oldPoints.remove(index); //remove
- if (y > x)
- m_oldPoints.insert(index, x > 0 ? m_oldPoints[index-1] : newPoints[index]); //add
- setKeyValueAt(0.0, qVariantFromValue(m_oldPoints));
- setKeyValueAt(1.0, qVariantFromValue(newPoints));
- Q_ASSERT(m_oldPoints.count() == newPoints.count());
+ }else{
+ m_newPoints=newPoints;
+ m_dirty=false;
+ m_oldPoints.resize(m_newPoints.size());
}
+
+ setKeyValueAt(0.0, qVariantFromValue(m_oldPoints));
+ setKeyValueAt(1.0, qVariantFromValue(m_newPoints));
+
}
QVariant XYAnimation::interpolated(const QVariant &start, const QVariant &end, qreal progress ) const
@@ -81,8 +93,10 @@ QVariant XYAnimation::interpolated(const QVariant &start, const QVariant &end, q
switch (m_type) {
- case MoveDownAnimation: {
-
+ case ReplacePointAnimation:
+ case AddPointAnimation:
+ case RemovePointAnimation:
+ {
if (startVector.count() != endVector.count())
break;
@@ -94,7 +108,7 @@ QVariant XYAnimation::interpolated(const QVariant &start, const QVariant &end, q
}
break;
- case LineDrawAnimation: {
+ case NewAnimation: {
for(int i = 0; i < endVector.count() * qBound(qreal(0), progress, qreal(1)); i++)
result << endVector[i];
}
@@ -110,11 +124,23 @@ QVariant XYAnimation::interpolated(const QVariant &start, const QVariant &end, q
void XYAnimation::updateCurrentValue (const QVariant &value)
{
if(state()!=QAbstractAnimation::Stopped){ //workaround
- m_dirty = true;
QVector<QPointF> vector = qVariantValue<QVector<QPointF> >(value);
m_item->setGeometryPoints(vector);
m_item->updateGeometry();
+ m_item->setDirty(true);
}
}
+void XYAnimation::updateState( QAbstractAnimation::State newState, QAbstractAnimation::State oldState )
+{
+ if(oldState == QAbstractAnimation::Running && newState == QAbstractAnimation::Stopped)
+ {
+ if(m_item->isDirty() && m_type==RemovePointAnimation){
+ if(!m_newPoints.isEmpty()) m_newPoints.remove(m_index);
+ m_item->setGeometryPoints(m_newPoints);
+ }
+ }
+}
+
+#include "moc_chartanimation_p.cpp"
QTCOMMERCIALCHART_END_NAMESPACE