##// END OF EJS Templates
Adaptive layout to legend. Tries to fit all items inside given maximum size
Adaptive layout to legend. Tries to fit all items inside given maximum size

File last commit:

r622:960bcf5125b7
r626:b05202e4f2ef
Show More
xyanimation.cpp
88 lines | 2.5 KiB | text/x-c | CppLexer
Michal Klocek
Animation refactor...
r530 #include "xyanimation_p.h"
#include "xychartitem_p.h"
Q_DECLARE_METATYPE(QVector<QPointF>)
QTCOMMERCIALCHART_BEGIN_NAMESPACE
XYAnimation::XYAnimation(XYChartItem *item):ChartAnimation(item),
m_item(item),
m_dirty(false)
{
}
XYAnimation::~XYAnimation()
{
}
Michal Klocek
Improves spline interpolation...
r622 void XYAnimation::setValues(QVector<QPointF>& oldPoints,QVector<QPointF>& newPoints,int index)
Michal Klocek
Animation refactor...
r530 {
Michal Klocek
Improves spline interpolation...
r622 int x = oldPoints.count();
int y = newPoints.count();
Michal Klocek
Animation refactor...
r530
Michal Klocek
Improves spline interpolation...
r622 if(x!=y && abs(x-y)!=1) {
m_oldPoints = newPoints;
oldPoints.resize(newPoints.size());
setKeyValueAt(0.0, qVariantFromValue(oldPoints));
setKeyValueAt(1.0, qVariantFromValue(newPoints));
Michal Klocek
Animation refactor...
r530 m_dirty=false;
}
Michal Klocek
Improves spline interpolation...
r622 else {
if(m_dirty) {
m_oldPoints = oldPoints;
m_dirty=false;
}
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());
}
Michal Klocek
Animation refactor...
r530 }
QVariant XYAnimation::interpolated(const QVariant &start, const QVariant & end, qreal progress ) const
{
QVector<QPointF> startVector = qVariantValue<QVector<QPointF> >(start);
QVector<QPointF> endVector = qVariantValue<QVector<QPointF> >(end);
QVector<QPointF> result;
switch(m_type) {
case MoveDownAnimation: {
Michal Klocek
Bugfix wrong index when points added to xychart
r602 if(startVector.count() != endVector.count()) break;
Michal Klocek
Animation refactor...
r530 for(int i =0;i< startVector.count();i++) {
qreal x = startVector[i].x() + ((endVector[i].x()- startVector[i].x()) * progress);
qreal y = startVector[i].y() + ((endVector[i].y()- startVector[i].y()) * progress);
result << QPointF(x,y);
}
}
break;
case LineDrawAnimation:{
for(int i =0;i< endVector.count()* qBound(0.0, progress, 1.0);i++) {
result << endVector[i];
}
}
break;
default:
qWarning()<<"Unknow type of animation";
break;
}
return qVariantFromValue(result);
}
void XYAnimation::updateCurrentValue (const QVariant & value )
{
if(state()!=QAbstractAnimation::Stopped){ //workaround
Michal Klocek
Improves spline interpolation...
r622 m_dirty=true;
Michal Klocek
Animation refactor...
r530 QVector<QPointF> vector = qVariantValue<QVector<QPointF> >(value);
Michal Klocek
Unify naming setGeometry -> setLayout
r557 m_item->setLayout(vector);
Michal Klocek
Animation refactor...
r530 }
}
QTCOMMERCIALCHART_END_NAMESPACE