SVGAnimatedPropertyPairAnimator.h [plain text]
#pragma once
#include "SVGAttributeAnimator.h"
namespace WebCore {
class SVGElement;
template<typename AnimatedPropertyAnimator1, typename AnimatedPropertyAnimator2>
class SVGAnimatedPropertyPairAnimator : public SVGAttributeAnimator {
public:
using AnimatedProperty1 = typename AnimatedPropertyAnimator1::AnimatorAnimatedProperty;
using AnimatedProperty2 = typename AnimatedPropertyAnimator2::AnimatorAnimatedProperty;
SVGAnimatedPropertyPairAnimator(const QualifiedName& attributeName, Ref<AnimatedProperty1>& animated1, Ref<AnimatedProperty2>& animated2, AnimationMode animationMode, CalcMode calcMode, bool isAccumulated, bool isAdditive)
: SVGAttributeAnimator(attributeName)
, m_animatedPropertyAnimator1(AnimatedPropertyAnimator1::create(attributeName, animated1, animationMode, calcMode, isAccumulated, isAdditive))
, m_animatedPropertyAnimator2(AnimatedPropertyAnimator2::create(attributeName, animated2, animationMode, calcMode, isAccumulated, isAdditive))
{
}
void appendAnimatedInstance(Ref<AnimatedProperty1>& animated1, Ref<AnimatedProperty2>& animated2)
{
m_animatedPropertyAnimator1->appendAnimatedInstance(animated1);
m_animatedPropertyAnimator2->appendAnimatedInstance(animated2);
}
protected:
void start(SVGElement* targetElement) override
{
m_animatedPropertyAnimator1->start(targetElement);
m_animatedPropertyAnimator2->start(targetElement);
}
void animate(SVGElement* targetElement, float progress, unsigned repeatCount) override
{
m_animatedPropertyAnimator1->animate(targetElement, progress, repeatCount);
m_animatedPropertyAnimator2->animate(targetElement, progress, repeatCount);
}
void apply(SVGElement* targetElement) override
{
applyAnimatedPropertyChange(targetElement);
}
void stop(SVGElement* targetElement) override
{
m_animatedPropertyAnimator1->stop(targetElement);
m_animatedPropertyAnimator2->stop(targetElement);
}
Ref<AnimatedPropertyAnimator1> m_animatedPropertyAnimator1;
Ref<AnimatedPropertyAnimator2> m_animatedPropertyAnimator2;
};
}