1/* 2 * Copyright (C) Research In Motion Limited 2011-2012. All rights reserved. 3 * Copyright (C) 2013 Samsung Electronics. All rights reserved. 4 * 5 * This library is free software; you can redistribute it and/or 6 * modify it under the terms of the GNU Library General Public 7 * License as published by the Free Software Foundation; either 8 * version 2 of the License, or (at your option) any later version. 9 * 10 * This library is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 * Library General Public License for more details. 14 * 15 * You should have received a copy of the GNU Library General Public License 16 * along with this library; see the file COPYING.LIB. If not, write to 17 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 18 * Boston, MA 02110-1301, USA. 19 */ 20 21#include "config.h" 22#include "core/svg/SVGAnimatedTypeAnimator.h" 23 24#include "core/svg/SVGElement.h" 25#include "core/svg/properties/SVGAttributeToPropertyMap.h" 26 27namespace WebCore { 28 29SVGElementAnimatedProperties::SVGElementAnimatedProperties() 30 : element(0) 31{ } 32 33SVGElementAnimatedProperties::SVGElementAnimatedProperties(SVGElement* element, Vector<RefPtr<SVGAnimatedProperty> >& properties) 34 : element(element) 35 , properties(properties) 36{ } 37 38SVGAnimatedTypeAnimator::SVGAnimatedTypeAnimator(AnimatedPropertyType type, SVGAnimationElement* animationElement, SVGElement* contextElement) 39 : m_type(type) 40 , m_animationElement(animationElement) 41 , m_contextElement(contextElement) 42{ 43} 44 45SVGAnimatedTypeAnimator::~SVGAnimatedTypeAnimator() 46{ 47} 48 49void SVGAnimatedTypeAnimator::calculateFromAndToValues(OwnPtr<SVGAnimatedType>& from, OwnPtr<SVGAnimatedType>& to, const String& fromString, const String& toString) 50{ 51 from = constructFromString(fromString); 52 to = constructFromString(toString); 53} 54 55void SVGAnimatedTypeAnimator::calculateFromAndByValues(OwnPtr<SVGAnimatedType>& from, OwnPtr<SVGAnimatedType>& to, const String& fromString, const String& byString) 56{ 57 from = constructFromString(fromString); 58 to = constructFromString(byString); 59 addAnimatedTypes(from.get(), to.get()); 60} 61 62SVGElementAnimatedPropertyList SVGAnimatedTypeAnimator::findAnimatedPropertiesForAttributeName(SVGElement* targetElement, const QualifiedName& attributeName) 63{ 64 ASSERT(targetElement); 65 66 SVGElementAnimatedPropertyList propertiesByInstance; 67 68 Vector<RefPtr<SVGAnimatedProperty> > targetProperties; 69 targetElement->localAttributeToPropertyMap().animatedPropertiesForAttribute(targetElement, attributeName, targetProperties); 70 71 if (!SVGAnimatedType::supportsAnimVal(m_type)) 72 return SVGElementAnimatedPropertyList(); 73 74 SVGElementAnimatedProperties propertiesPair(targetElement, targetProperties); 75 propertiesByInstance.append(propertiesPair); 76 77 const HashSet<SVGElementInstance*>& instances = targetElement->instancesForElement(); 78 const HashSet<SVGElementInstance*>::const_iterator end = instances.end(); 79 for (HashSet<SVGElementInstance*>::const_iterator it = instances.begin(); it != end; ++it) { 80 SVGElement* shadowTreeElement = (*it)->shadowTreeElement(); 81 if (!shadowTreeElement) 82 continue; 83 84 Vector<RefPtr<SVGAnimatedProperty> > instanceProperties; 85 targetElement->localAttributeToPropertyMap().animatedPropertiesForAttribute(shadowTreeElement, attributeName, instanceProperties); 86 87 SVGElementAnimatedProperties instancePropertiesPair(shadowTreeElement, instanceProperties); 88 propertiesByInstance.append(instancePropertiesPair); 89 } 90 91#if !ASSERT_DISABLED 92 SVGElementAnimatedPropertyList::const_iterator propertiesEnd = propertiesByInstance.end(); 93 for (SVGElementAnimatedPropertyList::const_iterator it = propertiesByInstance.begin(); it != propertiesEnd; ++it) { 94 size_t propertiesSize = it->properties.size(); 95 for (size_t i = 0; i < propertiesSize; ++i) { 96 RefPtr<SVGAnimatedProperty> property = it->properties[i]; 97 if (property->animatedPropertyType() != m_type) { 98 ASSERT(m_type == AnimatedAngle); 99 ASSERT(property->animatedPropertyType() == AnimatedEnumeration); 100 } 101 } 102 } 103#endif 104 105 return propertiesByInstance; 106} 107 108} 109