20
21
#include "KPrAnimate.h"
22
23
#include "KPrAnimationCache.h"
24
KPrAnimate::KPrAnimate()
25
#include <KoXmlReader.h>
26
#include <KoShapeLoadingContext.h>
27
#include <KoShapeSavingContext.h>
28
#include <KoTextBlockData.h>
29
#include <KoShapeLoadingContext.h>
30
#include <KoShapeSavingContext.h>
31
#include <KoXmlReader.h>
32
#include "KoXmlWriter.h"
34
#include "KPrAnimationCache.h"
35
#include "KPrShapeAnimation.h"
37
#include "strategy/KPrSmilValues.h"
38
#include "strategy/KPrAnimationValue.h"
39
#include "strategy/KPrAnimationAttribute.h"
40
#include "strategy/KPrAttributeX.h"
41
#include "strategy/KPrAttributeY.h"
42
#include "strategy/KPrAttributeWidth.h"
43
#include "strategy/KPrAttributeHeight.h"
44
#include "strategy/KPrAttributeRotate.h"
49
KPrAnimate::KPrAnimate(KPrShapeAnimation *shapeAnimation)
50
: KPrAnimationBase(shapeAnimation)
28
56
KPrAnimate::~KPrAnimate()
32
64
bool KPrAnimate::loadOdf(const KoXmlElement &element, KoShapeLoadingContext &context)
39
void KPrAnimate::saveOdf(KoShapeSavingContext &context) const
44
void KPrAnimate::init(KPrAnimationCache *animationCache) const
46
Q_UNUSED(animationCache);
66
KPrAnimationBase::loadOdf(element, context);
69
QString attributeName(element.attributeNS(KoXmlNS::smil, "attributeName", QString()));
70
if (attributeName == "x") {
71
m_attribute = new KPrAttributeX();
73
else if (attributeName == "y") {
74
m_attribute = new KPrAttributeY();
76
else if (attributeName == "width") {
77
m_attribute = new KPrAttributeWidth();
79
else if (attributeName == "height") {
80
m_attribute = new KPrAttributeHeight();
82
else if (attributeName == "rotate") {
83
m_attribute = new KPrAttributeRotate();
86
kWarning(33003) << "attributeName" << attributeName << "not yet supported";
95
KPrAnimationValue::SmilCalcMode smilCalcMode = KPrAnimationValue::linear;
96
QString calcMode = element.attributeNS(KoXmlNS::smil, "calcMode", "linear");
97
if(calcMode == "linear"){
98
smilCalcMode = KPrAnimationValue::linear;
99
} else if (calcMode == "discrete") {
100
smilCalcMode = KPrAnimationValue::discrete;
101
kWarning(33003) << "calcMode discrete not yes supported";
103
} else if (calcMode == "paced") {
104
smilCalcMode = KPrAnimationValue::paced;
105
kWarning(33003) << "calcMode paced not yes supported";
107
} else if (calcMode == "spline") {
108
smilCalcMode = KPrAnimationValue::spline;
109
kWarning(33003) << "calcMode spline not yes supported";
115
QString formula = element.attributeNS(KoXmlNS::anim, "formula", QString());
116
if (!formula.isEmpty()) {
117
kWarning(33003) << "formula not yes supported";
121
QString values = element.attributeNS(KoXmlNS::smil, "values", QString());
122
if (!values.isEmpty()) {
123
QString keyTimes = element.attributeNS(KoXmlNS::smil, "keyTimes", QString());
124
QString keySplines = element.attributeNS(KoXmlNS::smil, "keySplines", QString());
125
KPrSmilValues * smilValue = new KPrSmilValues(m_shapeAnimation);
126
retval = retval && smilValue->loadValues(values, keyTimes, keySplines, smilCalcMode);
127
m_values = smilValue;
130
QString from = element.attributeNS(KoXmlNS::smil, "from", "0");
131
QString to = element.attributeNS(KoXmlNS::smil, "to", "0");
132
QString by = element.attributeNS(KoXmlNS::smil, "by", "0");
133
kWarning(33003) << "from to by not yes supported";
140
bool KPrAnimate::saveOdf(KoPASavingContext & paContext) const
142
KoXmlWriter &writer = paContext.xmlWriter();
143
writer.startElement("anim:animate");
144
saveAttribute(paContext);
149
void KPrAnimate::init(KPrAnimationCache *animationCache, int step)
151
m_animationCache = animationCache;
152
m_values->setCache(m_animationCache);
153
m_attribute->initCache(animationCache, step, m_shapeAnimation, m_values->startValue(), m_values->endValue());
156
void KPrAnimate::next(int currentTime)
158
qreal value = m_values->value(qreal(currentTime)/qreal(animationDuration()));
159
m_attribute->updateCache(m_animationCache, m_shapeAnimation, value);
162
bool KPrAnimate::saveAttribute(KoPASavingContext &paContext) const
164
KPrAnimationBase::saveAttribute(paContext);
165
KoXmlWriter &writer = paContext.xmlWriter();
166
writer.addAttribute("smil:attributeName", m_attribute->attributeName());
167
m_values->saveOdf(paContext);