##// END OF EJS Templates
Added possibility to set duration and easing curve for chart animation...
Titta Heikkala -
r2804:97642714ab1e
parent child
Show More
@@ -25,13 +25,13 Q_DECLARE_METATYPE(QVector<qreal>)
25 25 QT_CHARTS_BEGIN_NAMESPACE
26 26
27 27
28 AxisAnimation::AxisAnimation(ChartAxisElement *axis)
28 AxisAnimation::AxisAnimation(ChartAxisElement *axis, int duration, QEasingCurve &curve)
29 29 : ChartAnimation(axis),
30 30 m_axis(axis),
31 31 m_type(DefaultAnimation)
32 32 {
33 setDuration(ChartAnimationDuration);
34 setEasingCurve(QEasingCurve::OutQuart);
33 setDuration(duration);
34 setEasingCurve(curve);
35 35 }
36 36
37 37 AxisAnimation::~AxisAnimation()
@@ -39,7 +39,7 class AxisAnimation: public ChartAnimation
39 39 {
40 40 public:
41 41 enum Animation { DefaultAnimation, ZoomOutAnimation, ZoomInAnimation, MoveForwardAnimation, MoveBackwordAnimation};
42 AxisAnimation(ChartAxisElement *axis);
42 AxisAnimation(ChartAxisElement *axis, int duration, QEasingCurve &curve);
43 43 ~AxisAnimation();
44 44 void setAnimationType(Animation type);
45 45 void setAnimationPoint(const QPointF &point);
@@ -23,12 +23,12 Q_DECLARE_METATYPE(QVector<QRectF>)
23 23
24 24 QT_CHARTS_BEGIN_NAMESPACE
25 25
26 BarAnimation::BarAnimation(AbstractBarChartItem *item)
26 BarAnimation::BarAnimation(AbstractBarChartItem *item, int duration, QEasingCurve &curve)
27 27 : ChartAnimation(item),
28 28 m_item(item)
29 29 {
30 setDuration(ChartAnimationDuration);
31 setEasingCurve(QEasingCurve::OutQuart);
30 setDuration(duration);
31 setEasingCurve(curve);
32 32 }
33 33
34 34 BarAnimation::~BarAnimation()
@@ -39,7 +39,7 class BarAnimation : public ChartAnimation
39 39 Q_OBJECT
40 40
41 41 public:
42 BarAnimation(AbstractBarChartItem *item);
42 BarAnimation(AbstractBarChartItem *item, int duration, QEasingCurve &curve);
43 43 ~BarAnimation();
44 44
45 45 public: // from QVariantAnimation
@@ -23,9 +23,11
23 23
24 24 QT_CHARTS_BEGIN_NAMESPACE
25 25
26 BoxPlotAnimation::BoxPlotAnimation(BoxPlotChartItem *item)
26 BoxPlotAnimation::BoxPlotAnimation(BoxPlotChartItem *item, int duration, QEasingCurve &curve)
27 27 : QObject(item),
28 m_item(item)
28 m_item(item),
29 m_animationDuration(duration),
30 m_animationCurve(curve)
29 31 {
30 32 }
31 33
@@ -37,7 +39,7 void BoxPlotAnimation::addBox(BoxWhiskers *box)
37 39 {
38 40 BoxWhiskersAnimation *animation = m_animations.value(box);
39 41 if (!animation) {
40 animation = new BoxWhiskersAnimation(box, this);
42 animation = new BoxWhiskersAnimation(box, this, m_animationDuration, m_animationCurve);
41 43 m_animations.insert(box, animation);
42 44 BoxWhiskersData start;
43 45 start.m_lowerExtreme = box->m_data.m_median;
@@ -46,6 +48,7 void BoxPlotAnimation::addBox(BoxWhiskers *box)
46 48 start.m_upperQuartile = box->m_data.m_median;
47 49 start.m_upperExtreme = box->m_data.m_median;
48 50 animation->setup(start, box->m_data);
51
49 52 } else {
50 53 animation->stop();
51 54 animation->setEndData(box->m_data);
@@ -41,7 +41,7 class BoxPlotAnimation : public QObject
41 41 {
42 42 Q_OBJECT
43 43 public:
44 BoxPlotAnimation(BoxPlotChartItem *item);
44 BoxPlotAnimation(BoxPlotChartItem *item, int duration, QEasingCurve &curve);
45 45 ~BoxPlotAnimation();
46 46
47 47 void addBox(BoxWhiskers *box);
@@ -55,6 +55,8 public:
55 55 protected:
56 56 BoxPlotChartItem *m_item;
57 57 QHash<BoxWhiskers *, BoxWhiskersAnimation *> m_animations;
58 int m_animationDuration;
59 QEasingCurve m_animationCurve;
58 60 };
59 61
60 62 QT_CHARTS_END_NAMESPACE
@@ -27,14 +27,15 Q_DECLARE_METATYPE(qreal)
27 27
28 28 QT_CHARTS_BEGIN_NAMESPACE
29 29
30 BoxWhiskersAnimation::BoxWhiskersAnimation(BoxWhiskers *box, BoxPlotAnimation *boxPlotAnimation)
30 BoxWhiskersAnimation::BoxWhiskersAnimation(BoxWhiskers *box, BoxPlotAnimation *boxPlotAnimation,
31 int duration, QEasingCurve &curve)
31 32 : ChartAnimation(box),
32 33 m_box(box),
33 34 m_changeAnimation(false),
34 35 m_boxPlotAnimation(boxPlotAnimation)
35 36 {
36 setDuration(ChartAnimationDuration);
37 setEasingCurve(QEasingCurve::OutQuart);
37 setDuration(duration);
38 setEasingCurve(curve);
38 39 }
39 40
40 41 BoxWhiskersAnimation::~BoxWhiskersAnimation()
@@ -42,7 +42,8 class BoxWhiskersAnimation : public ChartAnimation
42 42 Q_OBJECT
43 43
44 44 public:
45 BoxWhiskersAnimation(BoxWhiskers *box, BoxPlotAnimation *boxPlotAnimation);
45 BoxWhiskersAnimation(BoxWhiskers *box, BoxPlotAnimation *boxPlotAnimation, int duration,
46 QEasingCurve &curve);
46 47 ~BoxWhiskersAnimation();
47 48
48 49 public: // from QVariantAnimation
@@ -22,9 +22,11
22 22
23 23 QT_CHARTS_BEGIN_NAMESPACE
24 24
25 PieAnimation::PieAnimation(PieChartItem *item)
25 PieAnimation::PieAnimation(PieChartItem *item, int duration, QEasingCurve &curve)
26 26 : ChartAnimation(item),
27 m_item(item)
27 m_item(item),
28 m_animationDuration(duration),
29 m_animationCurve(curve)
28 30 {
29 31 }
30 32
@@ -37,14 +39,14 ChartAnimation *PieAnimation::updateValue(PieSliceItem *sliceItem, const PieSlic
37 39 PieSliceAnimation *animation = m_animations.value(sliceItem);
38 40 if (!animation) {
39 41 animation = new PieSliceAnimation(sliceItem);
42 animation->setDuration(m_animationDuration);
43 animation->setEasingCurve(m_animationCurve);
40 44 m_animations.insert(sliceItem, animation);
41 45 } else {
42 46 animation->stop();
43 47 }
44 48
45 49 animation->updateValue(sliceData);
46 animation->setDuration(ChartAnimationDuration);
47 animation->setEasingCurve(QEasingCurve::OutQuart);
48 50
49 51 return animation;
50 52 }
@@ -52,6 +54,8 ChartAnimation *PieAnimation::updateValue(PieSliceItem *sliceItem, const PieSlic
52 54 ChartAnimation *PieAnimation::addSlice(PieSliceItem *sliceItem, const PieSliceData &sliceData, bool startupAnimation)
53 55 {
54 56 PieSliceAnimation *animation = new PieSliceAnimation(sliceItem);
57 animation->setDuration(m_animationDuration);
58 animation->setEasingCurve(m_animationCurve);
55 59 m_animations.insert(sliceItem, animation);
56 60
57 61 PieSliceData startValue = sliceData;
@@ -66,8 +70,6 ChartAnimation *PieAnimation::addSlice(PieSliceItem *sliceItem, const PieSliceDa
66 70 startValue.m_radius = sliceData.m_holeRadius;
67 71
68 72 animation->setValue(startValue, sliceData);
69 animation->setDuration(ChartAnimationDuration);
70 animation->setEasingCurve(QEasingCurve::OutQuart);
71 73
72 74 return animation;
73 75 }
@@ -88,8 +90,6 ChartAnimation *PieAnimation::removeSlice(PieSliceItem *sliceItem)
88 90 endValue.m_isLabelVisible = false;
89 91
90 92 animation->updateValue(endValue);
91 animation->setDuration(ChartAnimationDuration);
92 animation->setEasingCurve(QEasingCurve::OutQuart);
93 93
94 94 // PieSliceItem is the parent of PieSliceAnimation so the animation will be deleted as well..
95 95 connect(animation, SIGNAL(finished()), sliceItem, SLOT(deleteLater()));
@@ -41,7 +41,7 class PieAnimation : public ChartAnimation
41 41 Q_OBJECT
42 42
43 43 public:
44 PieAnimation(PieChartItem *item);
44 PieAnimation(PieChartItem *item, int duration, QEasingCurve &curve);
45 45 ~PieAnimation();
46 46 ChartAnimation *updateValue(PieSliceItem *sliceItem, const PieSliceData &newValue);
47 47 ChartAnimation *addSlice(PieSliceItem *sliceItem, const PieSliceData &endValue, bool startupAnimation);
@@ -53,6 +53,8 public: // from QVariantAnimation
53 53 private:
54 54 PieChartItem *m_item;
55 55 QHash<PieSliceItem *, PieSliceAnimation *> m_animations;
56 int m_animationDuration;
57 QEasingCurve m_animationCurve;
56 58 };
57 59
58 60 QT_CHARTS_END_NAMESPACE
@@ -22,8 +22,8
22 22
23 23 QT_CHARTS_BEGIN_NAMESPACE
24 24
25 ScatterAnimation::ScatterAnimation(ScatterChartItem *item)
26 : XYAnimation(item)
25 ScatterAnimation::ScatterAnimation(ScatterChartItem *item, int duration, QEasingCurve &curve)
26 : XYAnimation(item, duration, curve)
27 27 {
28 28 }
29 29
@@ -36,7 +36,7 class ScatterChartItem;
36 36 class ScatterAnimation : public XYAnimation
37 37 {
38 38 public:
39 ScatterAnimation(ScatterChartItem *item);
39 ScatterAnimation(ScatterChartItem *item, int duration, QEasingCurve &curve);
40 40 ~ScatterAnimation();
41 41
42 42 protected:
@@ -25,8 +25,8 Q_DECLARE_METATYPE(SplineVector)
25 25
26 26 QT_CHARTS_BEGIN_NAMESPACE
27 27
28 SplineAnimation::SplineAnimation(SplineChartItem *item)
29 : XYAnimation(item),
28 SplineAnimation::SplineAnimation(SplineChartItem *item, int duration, QEasingCurve &curve)
29 : XYAnimation(item, duration, curve),
30 30 m_item(item),
31 31 m_valid(false)
32 32 {
@@ -39,7 +39,7 class SplineChartItem;
39 39 class SplineAnimation : public XYAnimation
40 40 {
41 41 public:
42 SplineAnimation(SplineChartItem *item);
42 SplineAnimation(SplineChartItem *item, int duration, QEasingCurve &curve);
43 43 ~SplineAnimation();
44 44 void setup(QVector<QPointF> &oldPoints, QVector<QPointF> &newPoints, QVector<QPointF> &oldContorlPoints, QVector<QPointF> &newControlPoints, int index = -1);
45 45
@@ -24,15 +24,15 Q_DECLARE_METATYPE(QVector<QPointF>)
24 24
25 25 QT_CHARTS_BEGIN_NAMESPACE
26 26
27 XYAnimation::XYAnimation(XYChart *item)
27 XYAnimation::XYAnimation(XYChart *item, int duration, QEasingCurve &curve)
28 28 : ChartAnimation(item),
29 29 m_type(NewAnimation),
30 30 m_dirty(false),
31 31 m_index(-1),
32 32 m_item(item)
33 33 {
34 setDuration(ChartAnimationDuration);
35 setEasingCurve(QEasingCurve::OutQuart);
34 setDuration(duration);
35 setEasingCurve(curve);
36 36 }
37 37
38 38 XYAnimation::~XYAnimation()
@@ -40,7 +40,7 class XYAnimation : public ChartAnimation
40 40 protected:
41 41 enum Animation { AddPointAnimation, RemovePointAnimation, ReplacePointAnimation, NewAnimation };
42 42 public:
43 XYAnimation(XYChart *item);
43 XYAnimation(XYChart *item, int duration, QEasingCurve &curve);
44 44 ~XYAnimation();
45 45 void setup(const QVector<QPointF> &oldPoints, const QVector<QPointF> &newPoints, int index = -1);
46 46 Animation animationType() const { return m_type; };
@@ -620,7 +620,8 void QAreaSeriesPrivate::initializeGraphics(QGraphicsItem* parent)
620 620 m_item.reset(area);
621 621 QAbstractSeriesPrivate::initializeGraphics(parent);
622 622 }
623 void QAreaSeriesPrivate::initializeAnimations(QChart::AnimationOptions options)
623 void QAreaSeriesPrivate::initializeAnimations(QChart::AnimationOptions options, int duration,
624 QEasingCurve &curve)
624 625 {
625 626 Q_Q(QAreaSeries);
626 627 AreaChartItem *area = static_cast<AreaChartItem *>(m_item.data());
@@ -631,16 +632,18 void QAreaSeriesPrivate::initializeAnimations(QChart::AnimationOptions options)
631 632 area->lowerLineItem()->animation()->stopAndDestroyLater();
632 633
633 634 if (options.testFlag(QChart::SeriesAnimations)) {
634 area->upperLineItem()->setAnimation(new XYAnimation(area->upperLineItem()));
635 area->upperLineItem()->setAnimation(new XYAnimation(area->upperLineItem(), duration,
636 curve));
635 637 if (q->lowerSeries())
636 area->lowerLineItem()->setAnimation(new XYAnimation(area->lowerLineItem()));
638 area->lowerLineItem()->setAnimation(new XYAnimation(area->lowerLineItem(), duration,
639 curve));
637 640 } else {
638 641 if (q->upperSeries())
639 642 area->upperLineItem()->setAnimation(0);
640 643 if (q->lowerSeries())
641 644 area->lowerLineItem()->setAnimation(0);
642 645 }
643 QAbstractSeriesPrivate::initializeAnimations(options);
646 QAbstractSeriesPrivate::initializeAnimations(options, duration, curve);
644 647 }
645 648
646 649 QList<QLegendMarker*> QAreaSeriesPrivate::createLegendMarkers(QLegend* legend)
@@ -46,7 +46,8 public:
46 46 void initializeAxes();
47 47 void initializeGraphics(QGraphicsItem* parent);
48 48 void initializeTheme(int index, ChartTheme* theme, bool forced = false);
49 void initializeAnimations(QChart::AnimationOptions options);
49 void initializeAnimations(QChart::AnimationOptions options, int duration,
50 QEasingCurve &curve);
50 51
51 52 QList<QLegendMarker *> createLegendMarkers(QLegend *legend);
52 53
@@ -1018,7 +1018,8 void QAbstractAxisPrivate::initializeGraphics(QGraphicsItem* parent)
1018 1018 Q_UNUSED(parent);
1019 1019 }
1020 1020
1021 void QAbstractAxisPrivate::initializeAnimations(QChart::AnimationOptions options)
1021 void QAbstractAxisPrivate::initializeAnimations(QChart::AnimationOptions options, int duration,
1022 QEasingCurve &curve)
1022 1023 {
1023 1024 ChartAxisElement *axis = m_item.data();
1024 1025 Q_ASSERT(axis);
@@ -1026,7 +1027,7 void QAbstractAxisPrivate::initializeAnimations(QChart::AnimationOptions options
1026 1027 axis->animation()->stopAndDestroyLater();
1027 1028
1028 1029 if (options.testFlag(QChart::GridAxisAnimations))
1029 axis->setAnimation(new AxisAnimation(axis));
1030 axis->setAnimation(new AxisAnimation(axis, duration, curve));
1030 1031 else
1031 1032 axis->setAnimation(0);
1032 1033 }
@@ -61,7 +61,8 public:
61 61 virtual void initializeDomain(AbstractDomain *domain) = 0;
62 62 virtual void initializeGraphics(QGraphicsItem *parent) = 0;
63 63 virtual void initializeTheme(ChartTheme* theme, bool forced = false);
64 virtual void initializeAnimations(QChart::AnimationOptions options);
64 virtual void initializeAnimations(QChart::AnimationOptions options, int duration,
65 QEasingCurve &curve);
65 66
66 67 //interface for manipulating range form base class
67 68 virtual void setMin(const QVariant &min) = 0;
@@ -1072,7 +1072,8 void QAbstractBarSeriesPrivate::initializeTheme(int index, ChartTheme* theme, bo
1072 1072 emit updatedBars();
1073 1073 }
1074 1074
1075 void QAbstractBarSeriesPrivate::initializeAnimations(QChart::AnimationOptions options)
1075 void QAbstractBarSeriesPrivate::initializeAnimations(QChart::AnimationOptions options, int duration,
1076 QEasingCurve &curve)
1076 1077 {
1077 1078 AbstractBarChartItem *bar = static_cast<AbstractBarChartItem *>(m_item.data());
1078 1079 Q_ASSERT(bar);
@@ -1080,10 +1081,10 void QAbstractBarSeriesPrivate::initializeAnimations(QChart::AnimationOptions op
1080 1081 bar->animation()->stopAndDestroyLater();
1081 1082
1082 1083 if (options.testFlag(QChart::SeriesAnimations))
1083 bar->setAnimation(new BarAnimation(bar));
1084 bar->setAnimation(new BarAnimation(bar, duration, curve));
1084 1085 else
1085 1086 bar->setAnimation(0);
1086 QAbstractSeriesPrivate::initializeAnimations(options);
1087 QAbstractSeriesPrivate::initializeAnimations(options, duration, curve);
1087 1088 }
1088 1089
1089 1090 #include "moc_qabstractbarseries.cpp"
@@ -54,7 +54,7 public:
54 54
55 55 void initializeDomain();
56 56 void initializeAxes();
57 void initializeAnimations(QChart::AnimationOptions options);
57 void initializeAnimations(QChart::AnimationOptions options, int duration, QEasingCurve &curve);
58 58 void initializeTheme(int index, ChartTheme* theme, bool forced = false);
59 59
60 60 QList<QLegendMarker*> createLegendMarkers(QLegend *legend);
@@ -485,7 +485,8 void QBoxPlotSeriesPrivate::initializeTheme(int index, ChartTheme* theme, bool f
485 485 }
486 486 }
487 487
488 void QBoxPlotSeriesPrivate::initializeAnimations(QChart::AnimationOptions options)
488 void QBoxPlotSeriesPrivate::initializeAnimations(QChart::AnimationOptions options, int duration,
489 QEasingCurve &curve)
489 490 {
490 491 BoxPlotChartItem *item = static_cast<BoxPlotChartItem *>(m_item.data());
491 492 Q_ASSERT(item);
@@ -493,12 +494,15 void QBoxPlotSeriesPrivate::initializeAnimations(QChart::AnimationOptions option
493 494 item->animation()->stopAndDestroyLater();
494 495
495 496 if (options.testFlag(QChart::SeriesAnimations))
496 m_animation = new BoxPlotAnimation(item);
497 m_animation = new BoxPlotAnimation(item, duration, curve);
497 498 else
498 499 m_animation = 0;
499 500 item->setAnimation(m_animation);
500 501
501 QAbstractSeriesPrivate::initializeAnimations(options);
502 QAbstractSeriesPrivate::initializeAnimations(options, duration, curve);
503
504 // Make BoxPlotChartItem to instantiate box & whisker items
505 item->handleDataStructureChanged();
502 506 }
503 507
504 508 QList<QLegendMarker*> QBoxPlotSeriesPrivate::createLegendMarkers(QLegend *legend)
@@ -48,7 +48,7 public:
48 48 void initializeGraphics(QGraphicsItem *parent);
49 49 void initializeDomain();
50 50 void initializeAxes();
51 void initializeAnimations(QChart::AnimationOptions options);
51 void initializeAnimations(QChart::AnimationOptions options, int duration, QEasingCurve &curve);
52 52 void initializeTheme(int index, ChartTheme *theme, bool forced = false);
53 53
54 54 QList<QLegendMarker*> createLegendMarkers(QLegend *legend);
@@ -39,6 +39,8 ChartPresenter::ChartPresenter(QChart *chart, QChart::ChartType type)
39 39 : QObject(chart),
40 40 m_chart(chart),
41 41 m_options(QChart::NoAnimation),
42 m_animationDuration(ChartAnimationDuration),
43 m_animationCurve(QEasingCurve::OutQuart),
42 44 m_state(ShowState),
43 45 m_background(0),
44 46 m_plotAreaBackground(0),
@@ -77,7 +79,7 QRectF ChartPresenter::geometry() const
77 79 void ChartPresenter::handleAxisAdded(QAbstractAxis *axis)
78 80 {
79 81 axis->d_ptr->initializeGraphics(rootItem());
80 axis->d_ptr->initializeAnimations(m_options);
82 axis->d_ptr->initializeAnimations(m_options, m_animationDuration, m_animationCurve);
81 83 ChartAxisElement *item = axis->d_ptr->axisItem();
82 84 item->setPresenter(this);
83 85 item->setThemeManager(m_chart->d_ptr->m_themeManager);
@@ -101,7 +103,7 void ChartPresenter::handleAxisRemoved(QAbstractAxis *axis)
101 103 void ChartPresenter::handleSeriesAdded(QAbstractSeries *series)
102 104 {
103 105 series->d_ptr->initializeGraphics(rootItem());
104 series->d_ptr->initializeAnimations(m_options);
106 series->d_ptr->initializeAnimations(m_options, m_animationDuration, m_animationCurve);
105 107 series->d_ptr->setPresenter(this);
106 108 ChartItem *chart = series->d_ptr->chartItem();
107 109 chart->setPresenter(this);
@@ -134,16 +136,41 void ChartPresenter::setAnimationOptions(QChart::AnimationOptions options)
134 136 m_options = options;
135 137 if (options.testFlag(QChart::SeriesAnimations) != oldOptions.testFlag(QChart::SeriesAnimations)) {
136 138 foreach (QAbstractSeries *series, m_series)
137 series->d_ptr->initializeAnimations(m_options);
139 series->d_ptr->initializeAnimations(m_options, m_animationDuration,
140 m_animationCurve);
138 141 }
139 142 if (options.testFlag(QChart::GridAxisAnimations) != oldOptions.testFlag(QChart::GridAxisAnimations)) {
140 143 foreach (QAbstractAxis *axis, m_axes)
141 axis->d_ptr->initializeAnimations(m_options);
144 axis->d_ptr->initializeAnimations(m_options, m_animationDuration, m_animationCurve);
142 145 }
143 146 m_layout->invalidate(); // So that existing animations don't just stop halfway
144 147 }
145 148 }
146 149
150 void ChartPresenter::setAnimationDuration(int msecs)
151 {
152 if (m_animationDuration != msecs) {
153 m_animationDuration = msecs;
154 foreach (QAbstractSeries *series, m_series)
155 series->d_ptr->initializeAnimations(m_options, m_animationDuration, m_animationCurve);
156 foreach (QAbstractAxis *axis, m_axes)
157 axis->d_ptr->initializeAnimations(m_options, m_animationDuration, m_animationCurve);
158 m_layout->invalidate(); // So that existing animations don't just stop halfway
159 }
160 }
161
162 void ChartPresenter::setAnimationEasingCurve(const QEasingCurve &curve)
163 {
164 if (m_animationCurve != curve) {
165 m_animationCurve = curve;
166 foreach (QAbstractSeries *series, m_series)
167 series->d_ptr->initializeAnimations(m_options, m_animationDuration, m_animationCurve);
168 foreach (QAbstractAxis *axis, m_axes)
169 axis->d_ptr->initializeAnimations(m_options, m_animationDuration, m_animationCurve);
170 m_layout->invalidate(); // So that existing animations don't just stop halfway
171 }
172 }
173
147 174 void ChartPresenter::setState(State state,QPointF point)
148 175 {
149 176 m_state=state;
@@ -137,6 +137,10 public:
137 137
138 138 void setAnimationOptions(QChart::AnimationOptions options);
139 139 QChart::AnimationOptions animationOptions() const;
140 void setAnimationDuration(int msecs);
141 int animationDuration() const { return m_animationDuration; }
142 void setAnimationEasingCurve(const QEasingCurve &curve);
143 QEasingCurve animationEasingCurve() const { return m_animationCurve; }
140 144
141 145 void startAnimation(ChartAnimation *animation);
142 146
@@ -177,6 +181,8 private:
177 181 QList<QAbstractSeries *> m_series;
178 182 QList<QAbstractAxis *> m_axes;
179 183 QChart::AnimationOptions m_options;
184 int m_animationDuration;
185 QEasingCurve m_animationCurve;
180 186 State m_state;
181 187 QPointF m_statePoint;
182 188 AbstractChartLayout *m_layout;
@@ -932,7 +932,8 void QPieSeriesPrivate::initializeGraphics(QGraphicsItem* parent)
932 932 QAbstractSeriesPrivate::initializeGraphics(parent);
933 933 }
934 934
935 void QPieSeriesPrivate::initializeAnimations(QtCharts::QChart::AnimationOptions options)
935 void QPieSeriesPrivate::initializeAnimations(QtCharts::QChart::AnimationOptions options,
936 int duration, QEasingCurve &curve)
936 937 {
937 938 PieChartItem *item = static_cast<PieChartItem *>(m_item.data());
938 939 Q_ASSERT(item);
@@ -940,10 +941,10 void QPieSeriesPrivate::initializeAnimations(QtCharts::QChart::AnimationOptions
940 941 item->animation()->stopAndDestroyLater();
941 942
942 943 if (options.testFlag(QChart::SeriesAnimations))
943 item->setAnimation(new PieAnimation(item));
944 item->setAnimation(new PieAnimation(item, duration, curve));
944 945 else
945 946 item->setAnimation(0);
946 QAbstractSeriesPrivate::initializeAnimations(options);
947 QAbstractSeriesPrivate::initializeAnimations(options, duration, curve);
947 948 }
948 949
949 950 QList<QLegendMarker*> QPieSeriesPrivate::createLegendMarkers(QLegend* legend)
@@ -45,7 +45,8 public:
45 45 void initializeDomain();
46 46 void initializeAxes();
47 47 void initializeGraphics(QGraphicsItem* parent);
48 void initializeAnimations(QtCharts::QChart::AnimationOptions options);
48 void initializeAnimations(QtCharts::QChart::AnimationOptions options, int duration,
49 QEasingCurve &curve);
49 50 void initializeTheme(int index, ChartTheme* theme, bool forced = false);
50 51
51 52 QList<QLegendMarker *> createLegendMarkers(QLegend *legend);
@@ -312,9 +312,12 void QAbstractSeriesPrivate::initializeGraphics(QGraphicsItem* parent)
312 312 QObject::connect(m_domain.data(), SIGNAL(updated()),m_item.data(), SLOT(handleDomainUpdated()));
313 313 }
314 314
315 void QAbstractSeriesPrivate::initializeAnimations(QChart::AnimationOptions options)
315 void QAbstractSeriesPrivate::initializeAnimations(QChart::AnimationOptions options, int duration,
316 QEasingCurve &curve)
316 317 {
317 318 Q_UNUSED(options);
319 Q_UNUSED(duration);
320 Q_UNUSED(curve);
318 321 }
319 322
320 323 bool QAbstractSeriesPrivate::reverseXAxis()
@@ -61,7 +61,8 public:
61 61 virtual void initializeAxes() = 0;
62 62 virtual void initializeTheme(int index, ChartTheme* theme, bool forced = false) = 0;
63 63 virtual void initializeGraphics(QGraphicsItem* parent) = 0;
64 virtual void initializeAnimations(QChart::AnimationOptions options) = 0;
64 virtual void initializeAnimations(QChart::AnimationOptions options, int duration,
65 QEasingCurve &curve) = 0;
65 66
66 67 virtual QList<QLegendMarker*> createLegendMarkers(QLegend* legend) = 0;
67 68
@@ -85,6 +85,16 QT_CHARTS_BEGIN_NAMESPACE
85 85 */
86 86
87 87 /*!
88 \property QChart::animationDuration
89 The duration of the animation for the chart.
90 */
91
92 /*!
93 \property QChart::animationEasingCurve
94 The easing curve of the animation for the chart.
95 */
96
97 /*!
88 98 \property QChart::backgroundVisible
89 99 Specifies whether the chart background is visible or not.
90 100 \sa setBackgroundBrush(), setBackgroundPen(), plotAreaBackgroundVisible
@@ -595,6 +605,26 QChart::AnimationOptions QChart::animationOptions() const
595 605 return d_ptr->m_presenter->animationOptions();
596 606 }
597 607
608 void QChart::setAnimationDuration(int msecs)
609 {
610 d_ptr->m_presenter->setAnimationDuration(msecs);
611 }
612
613 int QChart::animationDuration() const
614 {
615 return d_ptr->m_presenter->animationDuration();
616 }
617
618 void QChart::setAnimationEasingCurve(const QEasingCurve &curve)
619 {
620 d_ptr->m_presenter->setAnimationEasingCurve(curve);
621 }
622
623 QEasingCurve QChart::animationEasingCurve() const
624 {
625 return d_ptr->m_presenter->animationEasingCurve();
626 }
627
598 628 /*!
599 629 Scrolls the visible area of the chart by the distance defined in the \a dx and \a dy.
600 630
@@ -45,6 +45,8 class QT_CHARTS_EXPORT QChart : public QGraphicsWidget
45 45 Q_PROPERTY(bool dropShadowEnabled READ isDropShadowEnabled WRITE setDropShadowEnabled)
46 46 Q_PROPERTY(qreal backgroundRoundness READ backgroundRoundness WRITE setBackgroundRoundness)
47 47 Q_PROPERTY(QChart::AnimationOptions animationOptions READ animationOptions WRITE setAnimationOptions)
48 Q_PROPERTY(int animationDuration READ animationDuration WRITE setAnimationDuration)
49 Q_PROPERTY(QEasingCurve animationEasingCurve READ animationEasingCurve WRITE setAnimationEasingCurve)
48 50 Q_PROPERTY(QMargins margins READ margins WRITE setMargins)
49 51 Q_PROPERTY(QChart::ChartType chartType READ chartType)
50 52 Q_PROPERTY(bool plotAreaBackgroundVisible READ isPlotAreaBackgroundVisible WRITE setPlotAreaBackgroundVisible)
@@ -125,8 +127,13 public:
125 127 bool isDropShadowEnabled() const;
126 128 void setBackgroundRoundness(qreal diameter);
127 129 qreal backgroundRoundness() const;
130
128 131 void setAnimationOptions(AnimationOptions options);
129 132 AnimationOptions animationOptions() const;
133 void setAnimationDuration(int msecs);
134 int animationDuration() const;
135 void setAnimationEasingCurve(const QEasingCurve &curve);
136 QEasingCurve animationEasingCurve() const;
130 137
131 138 void zoomIn();
132 139 void zoomOut();
@@ -311,7 +311,8 void QScatterSeriesPrivate::initializeTheme(int index, ChartTheme* theme, bool f
311 311 }
312 312 }
313 313
314 void QScatterSeriesPrivate::initializeAnimations(QChart::AnimationOptions options)
314 void QScatterSeriesPrivate::initializeAnimations(QChart::AnimationOptions options, int duration,
315 QEasingCurve &curve)
315 316 {
316 317 ScatterChartItem *item = static_cast<ScatterChartItem *>(m_item.data());
317 318 Q_ASSERT(item);
@@ -320,11 +321,11 void QScatterSeriesPrivate::initializeAnimations(QChart::AnimationOptions option
320 321 item->animation()->stopAndDestroyLater();
321 322
322 323 if (options.testFlag(QChart::SeriesAnimations))
323 item->setAnimation(new ScatterAnimation(item));
324 item->setAnimation(new ScatterAnimation(item, duration, curve));
324 325 else
325 326 item->setAnimation(0);
326 327
327 QAbstractSeriesPrivate::initializeAnimations(options);
328 QAbstractSeriesPrivate::initializeAnimations(options, duration, curve);
328 329 }
329 330
330 331 #include "moc_qscatterseries.cpp"
@@ -38,7 +38,8 public:
38 38 QScatterSeriesPrivate(QScatterSeries *q);
39 39 void initializeGraphics(QGraphicsItem* parent);
40 40 void initializeTheme(int index, ChartTheme* theme, bool forced = false);
41 void initializeAnimations(QtCharts::QChart::AnimationOptions options);
41 void initializeAnimations(QtCharts::QChart::AnimationOptions options, int duration,
42 QEasingCurve &curve);
42 43
43 44 private:
44 45 QScatterSeries::MarkerShape m_shape;
@@ -143,7 +143,8 void QSplineSeriesPrivate::initializeTheme(int index, ChartTheme* theme, bool fo
143 143 }
144 144 }
145 145
146 void QSplineSeriesPrivate::initializeAnimations(QtCharts::QChart::AnimationOptions options)
146 void QSplineSeriesPrivate::initializeAnimations(QtCharts::QChart::AnimationOptions options,
147 int duration, QEasingCurve &curve)
147 148 {
148 149 SplineChartItem *item = static_cast<SplineChartItem *>(m_item.data());
149 150 Q_ASSERT(item);
@@ -151,10 +152,10 void QSplineSeriesPrivate::initializeAnimations(QtCharts::QChart::AnimationOptio
151 152 item->animation()->stopAndDestroyLater();
152 153
153 154 if (options.testFlag(QChart::SeriesAnimations))
154 item->setAnimation(new SplineAnimation(item));
155 item->setAnimation(new SplineAnimation(item, duration, curve));
155 156 else
156 157 item->setAnimation(0);
157 QAbstractSeriesPrivate::initializeAnimations(options);
158 QAbstractSeriesPrivate::initializeAnimations(options, duration, curve);
158 159 }
159 160
160 161 #include "moc_qsplineseries.cpp"
@@ -41,7 +41,8 public:
41 41
42 42 void initializeTheme(int index, ChartTheme* theme, bool forced = false);
43 43 void initializeGraphics(QGraphicsItem* parent);
44 void initializeAnimations(QtCharts::QChart::AnimationOptions options);
44 void initializeAnimations(QtCharts::QChart::AnimationOptions options, int duration,
45 QEasingCurve &curve);
45 46
46 47 private:
47 48 Q_DECLARE_PUBLIC(QSplineSeries)
@@ -830,7 +830,8 QAbstractAxis* QXYSeriesPrivate::createDefaultAxis(Qt::Orientation orientation)
830 830 return new QValueAxis;
831 831 }
832 832
833 void QXYSeriesPrivate::initializeAnimations(QtCharts::QChart::AnimationOptions options)
833 void QXYSeriesPrivate::initializeAnimations(QtCharts::QChart::AnimationOptions options,
834 int duration, QEasingCurve &curve)
834 835 {
835 836 XYChart *item = static_cast<XYChart *>(m_item.data());
836 837 Q_ASSERT(item);
@@ -838,10 +839,10 void QXYSeriesPrivate::initializeAnimations(QtCharts::QChart::AnimationOptions o
838 839 item->animation()->stopAndDestroyLater();
839 840
840 841 if (options.testFlag(QChart::SeriesAnimations))
841 item->setAnimation(new XYAnimation(item));
842 item->setAnimation(new XYAnimation(item, duration, curve));
842 843 else
843 844 item->setAnimation(0);
844 QAbstractSeriesPrivate::initializeAnimations(options);
845 QAbstractSeriesPrivate::initializeAnimations(options, duration, curve);
845 846 }
846 847
847 848 void QXYSeriesPrivate::drawSeriesPointLabels(QPainter *painter, const QVector<QPointF> &points,
@@ -44,7 +44,8 public:
44 44
45 45 void initializeDomain();
46 46 void initializeAxes();
47 void initializeAnimations(QtCharts::QChart::AnimationOptions options);
47 void initializeAnimations(QtCharts::QChart::AnimationOptions options, int duration,
48 QEasingCurve &curve);
48 49
49 50 QList<QLegendMarker*> createLegendMarkers(QLegend* legend);
50 51
@@ -81,6 +81,15 QT_CHARTS_BEGIN_NAMESPACE
81 81 */
82 82
83 83 /*!
84 \qmlproperty int ChartView::animationDuration
85 The duration of the animation for the chart.
86 */
87
88 /*!
89 \qmlproperty easing ChartView::animationEasingCurve
90 The easing curve of the animation for the chart.
91
92 /*!
84 93 \qmlproperty Font ChartView::titleFont
85 94 The title font of the chart.
86 95
@@ -673,6 +682,32 DeclarativeChart::Animation DeclarativeChart::animationOptions()
673 682 return DeclarativeChart::NoAnimation;
674 683 }
675 684
685 void DeclarativeChart::setAnimationDuration(int msecs)
686 {
687 if (msecs != m_chart->animationDuration()) {
688 m_chart->setAnimationDuration(msecs);
689 emit animationDurationChanged(msecs);
690 }
691 }
692
693 int DeclarativeChart::animationDuration() const
694 {
695 return m_chart->animationDuration();
696 }
697
698 void DeclarativeChart::setAnimationEasingCurve(const QEasingCurve &curve)
699 {
700 if (curve != m_chart->animationEasingCurve()) {
701 m_chart->setAnimationEasingCurve(curve);
702 emit animationEasingCurveChanged(curve);
703 }
704 }
705
706 QEasingCurve DeclarativeChart::animationEasingCurve() const
707 {
708 return m_chart->animationEasingCurve();
709 }
710
676 711 void DeclarativeChart::setTitle(QString title)
677 712 {
678 713 if (title != m_chart->title())
@@ -39,6 +39,8 class DeclarativeChart : public QQuickPaintedItem
39 39 Q_OBJECT
40 40 Q_PROPERTY(Theme theme READ theme WRITE setTheme)
41 41 Q_PROPERTY(Animation animationOptions READ animationOptions WRITE setAnimationOptions)
42 Q_PROPERTY(int animationDuration READ animationDuration WRITE setAnimationDuration NOTIFY animationDurationChanged REVISION 5)
43 Q_PROPERTY(QEasingCurve animationEasingCurve READ animationEasingCurve WRITE setAnimationEasingCurve NOTIFY animationEasingCurveChanged REVISION 5)
42 44 Q_PROPERTY(QString title READ title WRITE setTitle)
43 45 Q_PROPERTY(QFont titleFont READ titleFont WRITE setTitleFont)
44 46 Q_PROPERTY(QColor titleColor READ titleColor WRITE setTitleColor NOTIFY titleColorChanged)
@@ -116,6 +118,10 public:
116 118 DeclarativeChart::Theme theme();
117 119 void setAnimationOptions(DeclarativeChart::Animation animations);
118 120 DeclarativeChart::Animation animationOptions();
121 void setAnimationDuration(int msecs);
122 int animationDuration() const;
123 void setAnimationEasingCurve(const QEasingCurve &curve);
124 QEasingCurve animationEasingCurve() const;
119 125 void setTitle(QString title);
120 126 QString title();
121 127 QLegend *legend();
@@ -190,6 +196,8 Q_SIGNALS:
190 196 Q_REVISION(3) void backgroundRoundnessChanged(qreal diameter);
191 197 Q_REVISION(4) void localizeNumbersChanged();
192 198 Q_REVISION(4) void localeChanged();
199 Q_REVISION(5) void animationDurationChanged(int msecs);
200 Q_REVISION(5) void animationEasingCurveChanged(QEasingCurve curve);
193 201
194 202 private Q_SLOTS:
195 203 void changeMargins(int top, int bottom, int left, int right);
@@ -994,6 +994,8 Module {
994 994 Property { name: "axes"; revision: 2; type: "QAbstractAxis"; isList: true; isReadonly: true }
995 995 Property { name: "localizeNumbers"; revision: 4; type: "bool" }
996 996 Property { name: "locale"; revision: 4; type: "QLocale" }
997 Property { name: "animationDuration"; revision: 5; type: "int" }
998 Property { name: "animationEasingCurve"; revision: 5; type: "QEasingCurve" }
997 999 Signal { name: "axisLabelsChanged" }
998 1000 Signal {
999 1001 name: "titleColorChanged"
@@ -1024,6 +1026,16 Module {
1024 1026 }
1025 1027 Signal { name: "localizeNumbersChanged"; revision: 4 }
1026 1028 Signal { name: "localeChanged"; revision: 4 }
1029 Signal {
1030 name: "animationDurationChanged"
1031 revision: 5
1032 Parameter { name: "msecs"; type: "int" }
1033 }
1034 Signal {
1035 name: "animationEasingCurveChanged"
1036 revision: 5
1037 Parameter { name: "curve"; type: "QEasingCurve" }
1038 }
1027 1039 Method {
1028 1040 name: "series"
1029 1041 type: "QAbstractSeries*"
@@ -59,6 +59,9 private slots:
59 59 void addSeries();
60 60 void animationOptions_data();
61 61 void animationOptions();
62 void animationDuration();
63 void animationCurve_data();
64 void animationCurve();
62 65 void axisX_data();
63 66 void axisX();
64 67 void axisY_data();
@@ -160,6 +163,8 void tst_QChart::qchart()
160 163 QVERIFY(m_chart->legend()->isVisible());
161 164
162 165 QCOMPARE(m_chart->animationOptions(), QChart::NoAnimation);
166 QCOMPARE(m_chart->animationDuration(), 1000);
167 QCOMPARE(m_chart->animationEasingCurve(), QEasingCurve(QEasingCurve::OutQuart));
163 168 QVERIFY(!m_chart->axisX());
164 169 QVERIFY(!m_chart->axisY());
165 170 QVERIFY(m_chart->backgroundBrush()!=QBrush());
@@ -258,6 +263,30 void tst_QChart::animationOptions()
258 263 QCOMPARE(m_chart->animationOptions(), animationOptions);
259 264 }
260 265
266 void tst_QChart::animationDuration()
267 {
268 createTestData();
269 m_chart->setAnimationDuration(2000);
270 QVERIFY(m_chart->animationDuration() == 2000);
271 }
272
273 void tst_QChart::animationCurve_data()
274 {
275 QTest::addColumn<QEasingCurve>("animationCurve");
276 QTest::newRow("Linear") << QEasingCurve(QEasingCurve::Linear);
277 QTest::newRow("InCubic") << QEasingCurve(QEasingCurve::InCubic);
278 QTest::newRow("OutSine") << QEasingCurve(QEasingCurve::OutSine);
279 QTest::newRow("OutInBack") << QEasingCurve(QEasingCurve::OutInBack);
280 }
281
282 void tst_QChart::animationCurve()
283 {
284 createTestData();
285 QFETCH(QEasingCurve, animationCurve);
286 m_chart->setAnimationEasingCurve(animationCurve);
287 QCOMPARE(m_chart->animationEasingCurve(), animationCurve);
288 }
289
261 290 void tst_QChart::axisX_data()
262 291 {
263 292
@@ -31,6 +31,8 Rectangle {
31 31
32 32 function test_chartViewProperties() {
33 33 compare(chartView.animationOptions, ChartView.NoAnimation, "ChartView.animationOptions");
34 compare(chartView.animationDuration, 1000, "ChartView.animationDuration");
35 compare(chartView.animationEasingCurve.type, Easing.OutQuart, "ChartView.animationEasingCurve");
34 36 verify(chartView.backgroundColor != undefined);
35 37 verify(chartView.margins.bottom > 0, "ChartView.margins.bottom");
36 38 verify(chartView.margins.top > 0, "ChartView.margins.top");
@@ -17,7 +17,7
17 17 ****************************************************************************/
18 18
19 19 import QtQuick 2.0
20 import QtCharts 2.0
20 import QtCharts 2.1
21 21
22 22 ChartView {
23 23 id: chartView
@@ -45,7 +45,11 ChartView {
45 45 onBackgroundRoundnessChanged: console.log("chart.onBackgroundRoundnessChanged: " + diameter);
46 46 onSeriesAdded: console.log("chart.onSeriesAdded: " + series.name);
47 47 onSeriesRemoved: console.log("chart.onSeriesRemoved: " + series.name);
48 onPlotAreaColorChanged: console.log("chart.plotAreaColorChanged: " + chart.plotAreaColor);
48 onPlotAreaColorChanged: console.log("chart.onPlotAreaColorChanged: " + chart.plotAreaColor);
49 onAnimationDurationChanged: console.log("chart.onAnimationDurationChanged: "
50 + chart.animationDuration);
51 onAnimationEasingCurveChanged: console.log("chart.onAnimationEasingCurveChanged: "
52 + chart.animationEasingCurve.type);
49 53
50 54 legend.onVisibleChanged: console.log("legend.onVisibleChanged: " + chart.legend.visible);
51 55 legend.onBackgroundVisibleChanged: console.log("legend.onBackgroundVisibleChanged: " + visible);
@@ -21,8 +21,16 import QtQuick 2.0
21 21 Flow {
22 22 anchors.fill: parent
23 23 property variant chart
24 property variant easingTypes: [Easing.Linear, Easing.InCubic, Easing.OutSine, Easing.OutInBack]
25 property int easingTypeIndex: 0
24 26 flow: Flow.TopToBottom
25 27 spacing: 5
28
29 function nextEasingType() {
30 easingTypeIndex++;
31 return easingTypes[easingTypeIndex % easingTypes.length];
32 }
33
26 34 Button {
27 35 text: "visible"
28 36 onClicked: chart.visible = !chart.visible;
@@ -44,6 +52,18 Flow {
44 52 onClicked: chart.animationOptions--;
45 53 }
46 54 Button {
55 text: "animation duration +"
56 onClicked: chart.animationDuration = chart.animationDuration + 1000;
57 }
58 Button {
59 text: "animation duration -"
60 onClicked: chart.animationDuration = chart.animationDuration - 1000;
61 }
62 Button {
63 text: "animation curve"
64 onClicked: chart.animationEasingCurve.type = nextEasingType();
65 }
66 Button {
47 67 text: "background color"
48 68 onClicked: chart.backgroundColor = main.nextColor();
49 69 }
General Comments 0
You need to be logged in to leave comments. Login now