Chromium Code Reviews| Index: third_party/WebKit/Source/core/svg/SVGPathSegList.cpp |
| diff --git a/third_party/WebKit/Source/core/svg/SVGPathSegList.cpp b/third_party/WebKit/Source/core/svg/SVGPathSegList.cpp |
| index 9fecc71a725286e4747eb382c9f3e0a21dcd0875..71f2420f3e247d6420cabd0d91d1c25293d58b31 100644 |
| --- a/third_party/WebKit/Source/core/svg/SVGPathSegList.cpp |
| +++ b/third_party/WebKit/Source/core/svg/SVGPathSegList.cpp |
| @@ -63,7 +63,7 @@ DEFINE_TRACE(SVGPathSegList) |
| PassRefPtrWillBeRawPtr<SVGPathSegList> SVGPathSegList::clone() |
| { |
| - RefPtrWillBeRawPtr<SVGPathSegList> svgPathSegList = adoptRefWillBeNoop(new SVGPathSegList(m_contextElement, byteStream()->copy())); |
| + RefPtrWillBeRawPtr<SVGPathSegList> svgPathSegList = adoptRefWillBeNoop(new SVGPathSegList(m_contextElement, byteStream().copy())); |
| svgPathSegList->invalidateList(); |
| return svgPathSegList.release(); |
| } |
| @@ -75,7 +75,7 @@ PassRefPtrWillBeRawPtr<SVGPropertyBase> SVGPathSegList::cloneForAnimation(const |
| return svgPathSegList; |
| } |
| -const SVGPathByteStream* SVGPathSegList::byteStream() const |
| +const SVGPathByteStream& SVGPathSegList::byteStream() const |
| { |
| if (!m_byteStream) { |
| m_byteStream = SVGPathByteStream::create(); |
| @@ -88,7 +88,15 @@ const SVGPathByteStream* SVGPathSegList::byteStream() const |
| } |
| } |
| - return m_byteStream.get(); |
| + return *m_byteStream.get(); |
| +} |
| + |
| +SVGPathByteStream& SVGPathSegList::mutableByteStream() |
| +{ |
| + ASSERT(Base::isEmpty()); |
|
pdr.
2015/10/22 04:53:24
We could invalidate the list here instead of expos
fs
2015/10/22 07:44:32
Yes, this (and invalidateList) will be going away
|
| + if (!m_byteStream) |
| + m_byteStream = SVGPathByteStream::create(); |
| + return *m_byteStream.get(); |
| } |
| void SVGPathSegList::updateListFromByteStream() |
| @@ -132,7 +140,7 @@ PassRefPtrWillBeRawPtr<SVGPathSeg> SVGPathSegList::appendItem(PassRefPtrWillBeRa |
| String SVGPathSegList::valueAsString() const |
| { |
| String string; |
| - buildStringFromByteStream(*byteStream(), string, UnalteredParsing); |
| + buildStringFromByteStream(byteStream(), string, UnalteredParsing); |
| return string; |
| } |
| @@ -152,7 +160,7 @@ void SVGPathSegList::add(PassRefPtrWillBeRawPtr<SVGPropertyBase> other, SVGEleme |
| return; |
| byteStream(); // create |m_byteStream| if it does not exist. |
| - addToSVGPathByteStream(*m_byteStream, *otherList->byteStream()); |
| + addToSVGPathByteStream(*m_byteStream, otherList->byteStream()); |
| invalidateList(); |
| } |
| @@ -167,28 +175,28 @@ void SVGPathSegList::calculateAnimatedValue(SVGAnimationElement* animationElemen |
| const RefPtrWillBeRawPtr<SVGPathSegList> to = toSVGPathSegList(toValue); |
| const RefPtrWillBeRawPtr<SVGPathSegList> toAtEndOfDuration = toSVGPathSegList(toAtEndOfDurationValue); |
| - const SVGPathByteStream* toStream = to->byteStream(); |
| - const SVGPathByteStream* fromStream = from->byteStream(); |
| + const SVGPathByteStream& toStream = to->byteStream(); |
| + const SVGPathByteStream* fromStream = &from->byteStream(); |
| OwnPtr<SVGPathByteStream> copy; |
| // If no 'to' value is given, nothing to animate. |
| - if (!toStream->size()) |
| + if (!toStream.size()) |
| return; |
| if (isToAnimation) { |
| - copy = byteStream()->copy(); |
| + copy = byteStream().copy(); |
| fromStream = copy.get(); |
| } |
| // If the 'from' value is given and it's length doesn't match the 'to' value list length, fallback to a discrete animation. |
| - if (fromStream->size() != toStream->size() && fromStream->size()) { |
| + if (fromStream->size() != toStream.size() && fromStream->size()) { |
| if (percentage < 0.5) { |
| if (!isToAnimation) { |
| m_byteStream = fromStream->copy(); |
| return; |
| } |
| } else { |
| - m_byteStream = toStream->copy(); |
| + m_byteStream = toStream.copy(); |
| return; |
| } |
| } |
| @@ -199,7 +207,7 @@ void SVGPathSegList::calculateAnimatedValue(SVGAnimationElement* animationElemen |
| SVGPathByteStreamBuilder builder(*m_byteStream); |
| SVGPathByteStreamSource fromSource(*fromStream); |
| - SVGPathByteStreamSource toSource(*toStream); |
| + SVGPathByteStreamSource toSource(toStream); |
| SVGPathBlender blender(&fromSource, &toSource, &builder); |
| blender.blendAnimatedPath(percentage); |
| @@ -209,10 +217,8 @@ void SVGPathSegList::calculateAnimatedValue(SVGAnimationElement* animationElemen |
| addToSVGPathByteStream(*m_byteStream, *lastAnimatedStream); |
| // Handle accumulate='sum'. |
| - if (animationElement->isAccumulated() && repeatCount) { |
| - const SVGPathByteStream* toAtEndOfDurationStream = toAtEndOfDuration->byteStream(); |
| - addToSVGPathByteStream(*m_byteStream, *toAtEndOfDurationStream, repeatCount); |
| - } |
| + if (animationElement->isAccumulated() && repeatCount) |
| + addToSVGPathByteStream(*m_byteStream, toAtEndOfDuration->byteStream(), repeatCount); |
| } |
| float SVGPathSegList::calculateDistance(PassRefPtrWillBeRawPtr<SVGPropertyBase> to, SVGElement*) |