diff options
author | Michal Klocek <michal.klocek@digia.com> | 2012-05-28 16:04:37 +0300 |
---|---|---|
committer | Michal Klocek <michal.klocek@digia.com> | 2012-05-29 10:10:45 +0300 |
commit | b11722f8058842260f9b7e1e72418768d24ff91b (patch) | |
tree | 79907367dfb81c0c4c40fa7fd1873b862860cd34 /src/animations | |
parent | 8cad7c5eba8c408925cdd7743b1bef72c1a9c998 (diff) |
adds QLineAnimation fixes
Diffstat (limited to 'src/animations')
-rw-r--r-- | src/animations/splineanimation.cpp | 2 | ||||
-rw-r--r-- | src/animations/splineanimation_p.h | 2 | ||||
-rw-r--r-- | src/animations/xyanimation.cpp | 81 | ||||
-rw-r--r-- | src/animations/xyanimation_p.h | 3 |
4 files changed, 47 insertions, 41 deletions
diff --git a/src/animations/splineanimation.cpp b/src/animations/splineanimation.cpp index 51fce1ac..8229744f 100644 --- a/src/animations/splineanimation.cpp +++ b/src/animations/splineanimation.cpp @@ -37,7 +37,7 @@ SplineAnimation::~SplineAnimation() { } -void SplineAnimation::setValues(QVector<QPointF> &oldPoints, QVector<QPointF> &newPoints, QVector<QPointF> &oldControlPoints, QVector<QPointF> &newControlPoints, int index) +void SplineAnimation::setup(QVector<QPointF> &oldPoints, QVector<QPointF> &newPoints, QVector<QPointF> &oldControlPoints, QVector<QPointF> &newControlPoints, int index) { int x = oldPoints.count(); int y = newPoints.count(); diff --git a/src/animations/splineanimation_p.h b/src/animations/splineanimation_p.h index 6f1d8da1..6ca2f422 100644 --- a/src/animations/splineanimation_p.h +++ b/src/animations/splineanimation_p.h @@ -34,7 +34,7 @@ class SplineAnimation : public XYAnimation public: SplineAnimation(SplineChartItem *item); ~SplineAnimation(); - void setValues(QVector<QPointF> &oldPoints, QVector<QPointF> &newPoints, QVector<QPointF> &oldContorlPoints, QVector<QPointF> &newControlPoints, int index); + void setup(QVector<QPointF> &oldPoints, QVector<QPointF> &newPoints, QVector<QPointF> &oldContorlPoints, QVector<QPointF> &newControlPoints, int index = -1); protected: QVariant interpolated(const QVariant &start, const QVariant &end, qreal progress) const; diff --git a/src/animations/xyanimation.cpp b/src/animations/xyanimation.cpp index 2b9ada51..e93e6fb7 100644 --- a/src/animations/xyanimation.cpp +++ b/src/animations/xyanimation.cpp @@ -39,50 +39,53 @@ XYAnimation::~XYAnimation() { } -void XYAnimation::setAnimationType(Animation type) +void XYAnimation::setup(const QVector<QPointF> &oldPoints, const QVector<QPointF> &newPoints, int index) { - if (state() != QAbstractAnimation::Stopped) stop(); - m_type=type; -} + m_type = NewAnimation; -void XYAnimation::setValues(const QVector<QPointF> &oldPoints, const QVector<QPointF> &newPoints, int index) -{ - if (state() != QAbstractAnimation::Stopped) stop(); + if (state() != QAbstractAnimation::Stopped){ + stop(); + m_dirty=false; + } - if (m_item->isDirty()) { - m_oldPoints = oldPoints; - m_newPoints = newPoints; - m_dirty=false; - } - else { - if(m_dirty) { - m_newPoints = newPoints; - m_oldPoints = oldPoints; - m_dirty=false; - } - } + if(!m_dirty){ + m_dirty = true; + m_oldPoints = oldPoints; + } - int x = m_oldPoints.count(); - int y = m_newPoints.count(); + m_newPoints = newPoints; - 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 - } - }else{ - m_newPoints=newPoints; - m_dirty=false; - m_oldPoints.resize(m_newPoints.size()); - } + int x = m_oldPoints.count(); + int y = m_newPoints.count(); + + if(x - y == 1 && index >= 0 && !newPoints.isEmpty()){ + //remove point + m_newPoints.insert(index, index >= 1 ? m_newPoints[index-1] : newPoints[index]); + m_index=index; + m_type = RemovePointAnimation; + } + + if(x - y == -1 && index >= 0){ + //add point + m_oldPoints.insert(index, x > 0 && index > 1 ? m_oldPoints[index-1] : newPoints[index]); + m_index=index; + m_type = AddPointAnimation; + } + + x = m_oldPoints.count(); + y = m_newPoints.count(); + + if(x != y) + { + m_type = NewAnimation; + } + else if(m_type == NewAnimation) + { + m_type = ReplacePointAnimation; + } setKeyValueAt(0.0, qVariantFromValue(m_oldPoints)); setKeyValueAt(1.0, qVariantFromValue(m_newPoints)); - } QVariant XYAnimation::interpolated(const QVariant &start, const QVariant &end, qreal progress ) const @@ -97,8 +100,9 @@ QVariant XYAnimation::interpolated(const QVariant &start, const QVariant &end, q case AddPointAnimation: case RemovePointAnimation: { - if (startVector.count() != endVector.count()) + if (startVector.count() != endVector.count()){ break; + } for(int i = 0; i < startVector.count(); i++) { qreal x = startVector[i].x() + ((endVector[i].x() - startVector[i].x()) * progress); @@ -124,10 +128,13 @@ QVariant XYAnimation::interpolated(const QVariant &start, const QVariant &end, q void XYAnimation::updateCurrentValue (const QVariant &value) { if(state()!=QAbstractAnimation::Stopped){ //workaround + QVector<QPointF> vector = qVariantValue<QVector<QPointF> >(value); m_item->setGeometryPoints(vector); m_item->updateGeometry(); m_item->setDirty(true); + m_dirty=false; + } } diff --git a/src/animations/xyanimation_p.h b/src/animations/xyanimation_p.h index 50b3478a..5c887402 100644 --- a/src/animations/xyanimation_p.h +++ b/src/animations/xyanimation_p.h @@ -34,8 +34,7 @@ public: enum Animation { AddPointAnimation, RemovePointAnimation, ReplacePointAnimation, NewAnimation }; XYAnimation(XYChart *item); ~XYAnimation(); - void setValues(const QVector<QPointF> &oldPoints, const QVector<QPointF> &newPoints,int index); - void setAnimationType(Animation type); + void setup(const QVector<QPointF> &oldPoints, const QVector<QPointF> &newPoints,int index = -1); Animation animationType() const { return m_type; }; protected: |