SVGAttributeOwnerProxyImpl.h [plain text]
#pragma once
#include "SVGAttributeOwnerProxy.h"
#include "SVGAttributeRegistry.h"
namespace WebCore {
template<typename OwnerType, typename... BaseTypes>
class SVGAttributeOwnerProxyImpl : public SVGAttributeOwnerProxy {
public:
using AttributeRegistry = SVGAttributeRegistry<OwnerType, BaseTypes...>;
SVGAttributeOwnerProxyImpl(OwnerType& owner, SVGElement& element, AnimatedPropertyState animatedState = PropertyIsReadWrite)
: SVGAttributeOwnerProxy(element)
, m_owner(owner)
, m_animatedState(animatedState)
{
}
SVGAttributeOwnerProxyImpl(OwnerType& owner)
: SVGAttributeOwnerProxy(owner)
, m_owner(owner)
{
static_assert(std::is_base_of<SVGElement, OwnerType>::value, "The owner of SVGAttributeOwnerProxy should be derived from SVGElement.");
}
static AttributeRegistry& attributeRegistry()
{
return AttributeRegistry::singleton();
}
static bool isKnownAttribute(const QualifiedName& attributeName)
{
return attributeRegistry().isKnownAttribute(attributeName);
}
static bool isAnimatedLengthAttribute(const QualifiedName& attributeName)
{
return attributeRegistry().isAnimatedLengthAttribute(attributeName);
}
private:
void synchronizeAttributes() const override
{
attributeRegistry().synchronizeAttributes(m_owner, *m_element);
}
void synchronizeAttribute(const QualifiedName& attributeName) const override
{
attributeRegistry().synchronizeAttribute(m_owner, *m_element, attributeName);
}
Vector<AnimatedPropertyType> animatedTypes(const QualifiedName& attributeName) const override
{
return attributeRegistry().animatedTypes(attributeName);
}
RefPtr<SVGAnimatedProperty> lookupOrCreateAnimatedProperty(const SVGAttribute& attribute) const override
{
return attributeRegistry().lookupOrCreateAnimatedProperty(m_owner, *m_element, attribute, m_animatedState);
}
RefPtr<SVGAnimatedProperty> lookupAnimatedProperty(const SVGAttribute& attribute) const override
{
return attributeRegistry().lookupAnimatedProperty(m_owner, *m_element, attribute);
}
Vector<RefPtr<SVGAnimatedProperty>> lookupOrCreateAnimatedProperties(const QualifiedName& attributeName) const override
{
return attributeRegistry().lookupOrCreateAnimatedProperties(m_owner, *m_element, attributeName, m_animatedState);
}
OwnerType& m_owner;
AnimatedPropertyState m_animatedState { PropertyIsReadWrite };
};
}