void SVGPointList::calculateAnimatedValue(SVGAnimationElement* animationElement, float percentage, unsigned repeatCount, PassRefPtr<SVGPropertyBase> fromValue, PassRefPtr<SVGPropertyBase> toValue, PassRefPtr<SVGPropertyBase> toAtEndOfDurationValue, SVGElement* contextElement) { RefPtr<SVGPointList> fromList = toSVGPointList(fromValue); RefPtr<SVGPointList> toList = toSVGPointList(toValue); RefPtr<SVGPointList> toAtEndOfDurationList = toSVGPointList(toAtEndOfDurationValue); size_t fromPointListSize = fromList->length(); size_t toPointListSize = toList->length(); size_t toAtEndOfDurationListSize = toAtEndOfDurationList->length(); if (!adjustFromToListValues(fromList, toList, percentage, animationElement->animationMode() == ToAnimation, true)) return; for (size_t i = 0; i < toPointListSize; ++i) { float animatedX = at(i)->x(); float animatedY = at(i)->y(); FloatPoint effectiveFrom; if (fromPointListSize) effectiveFrom = fromList->at(i)->value(); FloatPoint effectiveTo = toList->at(i)->value(); FloatPoint effectiveToAtEnd; if (i < toAtEndOfDurationListSize) effectiveToAtEnd = toAtEndOfDurationList->at(i)->value(); animationElement->animateAdditiveNumber(percentage, repeatCount, effectiveFrom.x(), effectiveTo.x(), effectiveToAtEnd.x(), animatedX); animationElement->animateAdditiveNumber(percentage, repeatCount, effectiveFrom.y(), effectiveTo.y(), effectiveToAtEnd.y(), animatedY); at(i)->setValue(FloatPoint(animatedX, animatedY)); } }
void SVGPointList::add(SVGPropertyBase* other, SVGElement* contextElement) { SVGPointList* otherList = toSVGPointList(other); if (length() != otherList->length()) return; for (size_t i = 0; i < length(); ++i) at(i)->setValue(at(i)->value() + otherList->at(i)->value()); }
void SVGPointList::add(PassRefPtrWillBeRawPtr<SVGPropertyBase> other, SVGElement* contextElement) { RefPtr<SVGPointList> otherList = toSVGPointList(other); if (length() != otherList->length()) return; for (size_t i = 0; i < length(); ++i) at(i)->setValue(at(i)->value() + otherList->at(i)->value()); }
InterpolationValue SVGPointListInterpolationType::maybeConvertSVGValue( const SVGPropertyBase& svgValue) const { if (svgValue.type() != AnimatedPoints) return nullptr; const SVGPointList& pointList = toSVGPointList(svgValue); std::unique_ptr<InterpolableList> result = InterpolableList::create(pointList.length() * 2); for (size_t i = 0; i < pointList.length(); i++) { const SVGPoint& point = *pointList.at(i); result->set(2 * i, InterpolableNumber::create(point.x())); result->set(2 * i + 1, InterpolableNumber::create(point.y())); } return InterpolationValue(std::move(result)); }