bool SVGPointList::createAnimated(const SVGPointList& fromList, const SVGPointList& toList, SVGPointList& resultList, float progress) { unsigned itemCount = fromList.size(); if (!itemCount || itemCount != toList.size()) return false; for (unsigned n = 0; n < itemCount; ++n) { const FloatPoint& from = fromList.at(n); const FloatPoint& to = toList.at(n); FloatPoint segment = FloatPoint(adjustAnimatedValue(from.x(), to.x(), progress), adjustAnimatedValue(from.y(), to.y(), progress)); resultList.append(segment); } return true; }
void SVGPolyElement::parseAttribute(const QualifiedName& name, const AtomicString& value) { if (!isSupportedAttribute(name)) { SVGGeometryElement::parseAttribute(name, value); return; } if (name == SVGNames::pointsAttr) { SVGPointList newList; if (!pointsListFromSVGData(newList, value)) document().accessSVGExtensions()->reportError("Problem parsing points=\"" + value + "\""); if (SVGAnimatedProperty* wrapper = SVGAnimatedProperty::lookupWrapper<SVGPolyElement, SVGAnimatedPointList>(this, pointsPropertyInfo())) static_cast<SVGAnimatedPointList*>(wrapper)->detachListWrappers(newList.size()); m_points.value = newList; return; } if (SVGLangSpace::parseAttribute(name, value)) return; if (SVGExternalResourcesRequired::parseAttribute(name, value)) return; ASSERT_NOT_REACHED(); }
void SVGPolyElement::parseMappedAttribute(Attribute* attr) { const AtomicString& value = attr->value(); if (attr->name() == SVGNames::pointsAttr) { SVGPointList newList; if (!pointsListFromSVGData(newList, value)) document()->accessSVGExtensions()->reportError("Problem parsing points=\"" + value + "\""); if (SVGAnimatedListPropertyTearOff<SVGPointList>* list = m_animatablePointsList.get()) list->detachListWrappers(newList.size()); m_points.value = newList; } else { if (SVGTests::parseMappedAttribute(attr)) return; if (SVGLangSpace::parseMappedAttribute(attr)) return; if (SVGExternalResourcesRequired::parseMappedAttribute(attr)) return; SVGStyledTransformableElement::parseMappedAttribute(attr); } }