##// END OF EJS Templates
Add animations checkbox to piechartcustomization
Add animations checkbox to piechartcustomization

File last commit:

r623:ca00283c983c
r628:82f962b589f7
Show More
piesliceanimation.cpp
78 lines | 2.3 KiB | text/x-c | CppLexer
/ src / animations / piesliceanimation.cpp
Michal Klocek
minor . compilation fix
r623 #include "piesliceanimation_p.h"
Jani Honkonen
Add animations to pie. Works but has some visual issues when adding slices.
r618 #include "piechartitem_p.h"
#include "qpieslice.h"
Q_DECLARE_METATYPE(QtCommercialChart::PieSliceLayout)
QTCOMMERCIALCHART_BEGIN_NAMESPACE
qreal linearPos(qreal start, qreal end, qreal pos)
{
return start + ((end - start) * pos);
}
QPointF linearPos(QPointF start, QPointF end, qreal pos)
{
qreal x = linearPos(start.x(), end.x(), pos);
qreal y = linearPos(start.y(), end.y(), pos);
return QPointF(x, y);
}
PieSliceAnimation::PieSliceAnimation(PieChartItem *item)
:QVariantAnimation(item),
m_item(item)
{
}
PieSliceAnimation::~PieSliceAnimation()
{
}
void PieSliceAnimation::setValue(PieSliceLayout& startValue, PieSliceLayout& endValue)
{
if (state() != QAbstractAnimation::Stopped)
stop();
setKeyValueAt(0.0, qVariantFromValue(startValue));
setKeyValueAt(1.0, qVariantFromValue(endValue));
}
void PieSliceAnimation::updateValue(PieSliceLayout& endValue)
{
if (state() != QAbstractAnimation::Stopped)
stop();
//qDebug() << "PieSliceAnimation::updateValue()" << endValue.m_data->label() << currentSliceValue().m_startAngle << endValue.m_startAngle;
setKeyValueAt(0.0, qVariantFromValue(currentSliceValue()));
setKeyValueAt(1.0, qVariantFromValue(endValue));
}
PieSliceLayout PieSliceAnimation::currentSliceValue()
{
return qVariantValue<PieSliceLayout>(currentValue());
}
QVariant PieSliceAnimation::interpolated(const QVariant &start, const QVariant &end, qreal progress) const
{
PieSliceLayout startValue = qVariantValue<PieSliceLayout>(start);
PieSliceLayout endValue = qVariantValue<PieSliceLayout>(end);
PieSliceLayout result;
result = endValue;
result.m_center = linearPos(startValue.m_center, endValue.m_center, progress);
result.m_radius = linearPos(startValue.m_radius, endValue.m_radius, progress);
result.m_startAngle = linearPos(startValue.m_startAngle, endValue.m_startAngle, progress);
result.m_angleSpan = linearPos(startValue.m_angleSpan, endValue.m_angleSpan, progress);
return qVariantFromValue(result);
}
void PieSliceAnimation::updateCurrentValue(const QVariant &value)
{
Jani Honkonen
mingw compiler fix for pie animations
r619 PieSliceLayout layout = qVariantValue<PieSliceLayout>(value);
Jani Honkonen
Add animations to pie. Works but has some visual issues when adding slices.
r618 if (state() != QAbstractAnimation::Stopped) //workaround
Jani Honkonen
mingw compiler fix for pie animations
r619 m_item->setLayout(layout);
Jani Honkonen
Add animations to pie. Works but has some visual issues when adding slices.
r618 }
QTCOMMERCIALCHART_END_NAMESPACE