Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(35)

Side by Side Diff: Source/core/svg/SVGPathSegList.cpp

Issue 734053005: Remove globalSVGPath* from SVGPathUtilities.cpp (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2004, 2005, 2006, 2007, 2008 Nikolas Zimmermann <zimmermann@kde .org> 2 * Copyright (C) 2004, 2005, 2006, 2007, 2008 Nikolas Zimmermann <zimmermann@kde .org>
3 * Copyright (C) 2004, 2005 Rob Buis <buis@kde.org> 3 * Copyright (C) 2004, 2005 Rob Buis <buis@kde.org>
4 * Copyright (C) 2007 Eric Seidel <eric@webkit.org> 4 * Copyright (C) 2007 Eric Seidel <eric@webkit.org>
5 * Copyright (C) Research In Motion Limited 2010. All rights reserved. 5 * Copyright (C) Research In Motion Limited 2010. All rights reserved.
6 * 6 *
7 * This library is free software; you can redistribute it and/or 7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Library General Public 8 * modify it under the terms of the GNU Library General Public
9 * License as published by the Free Software Foundation; either 9 * License as published by the Free Software Foundation; either
10 * version 2 of the License, or (at your option) any later version. 10 * version 2 of the License, or (at your option) any later version.
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
75 svgPathSegList->setValueAsString(value, IGNORE_EXCEPTION); 75 svgPathSegList->setValueAsString(value, IGNORE_EXCEPTION);
76 return svgPathSegList; 76 return svgPathSegList;
77 } 77 }
78 78
79 const SVGPathByteStream* SVGPathSegList::byteStream() const 79 const SVGPathByteStream* SVGPathSegList::byteStream() const
80 { 80 {
81 if (!m_byteStream) { 81 if (!m_byteStream) {
82 m_byteStream = SVGPathByteStream::create(); 82 m_byteStream = SVGPathByteStream::create();
83 83
84 if (!Base::isEmpty()) { 84 if (!Base::isEmpty()) {
85 SVGPathByteStreamBuilder builder; 85 SVGPathByteStreamBuilder builder(*m_byteStream);
86 builder.setCurrentByteStream(m_byteStream.get());
87
88 SVGPathSegListSource source(begin(), end()); 86 SVGPathSegListSource source(begin(), end());
89 87 SVGPathParser parser(&source, &builder);
90 SVGPathParser parser;
91 parser.setCurrentConsumer(&builder);
92 parser.setCurrentSource(&source);
93 parser.parsePathDataFromSource(UnalteredParsing); 88 parser.parsePathDataFromSource(UnalteredParsing);
94 } 89 }
95 } 90 }
96 91
97 return m_byteStream.get(); 92 return m_byteStream.get();
98 } 93 }
99 94
100 void SVGPathSegList::updateListFromByteStream() 95 void SVGPathSegList::updateListFromByteStream()
101 { 96 {
102 if (m_listSyncedToByteStream) 97 if (m_listSyncedToByteStream)
103 return; 98 return;
104 99
105 Base::clear(); 100 Base::clear();
106 101
107 if (m_byteStream && !m_byteStream->isEmpty()) { 102 if (m_byteStream && !m_byteStream->isEmpty()) {
108 SVGPathSegListBuilder builder; 103 SVGPathSegListBuilder builder(m_contextElement, this);
109 builder.setCurrentSVGPathElement(m_contextElement); 104 SVGPathByteStreamSource source(*m_byteStream);
110 builder.setCurrentSVGPathSegList(this); 105 SVGPathParser parser(&source, &builder);
111
112 SVGPathByteStreamSource source(m_byteStream.get());
113
114 SVGPathParser parser;
115 parser.setCurrentConsumer(&builder);
116 parser.setCurrentSource(&source);
117 parser.parsePathDataFromSource(UnalteredParsing); 106 parser.parsePathDataFromSource(UnalteredParsing);
118 } 107 }
119 108
120 m_listSyncedToByteStream = true; 109 m_listSyncedToByteStream = true;
121 } 110 }
122 111
123 void SVGPathSegList::invalidateList() 112 void SVGPathSegList::invalidateList()
124 { 113 {
125 m_listSyncedToByteStream = false; 114 m_listSyncedToByteStream = false;
126 Base::clear(); 115 Base::clear();
127 } 116 }
128 117
129 PassRefPtrWillBeRawPtr<SVGPathSeg> SVGPathSegList::appendItem(PassRefPtrWillBeRa wPtr<SVGPathSeg> passItem) 118 PassRefPtrWillBeRawPtr<SVGPathSeg> SVGPathSegList::appendItem(PassRefPtrWillBeRa wPtr<SVGPathSeg> passItem)
130 { 119 {
131 updateListFromByteStream(); 120 updateListFromByteStream();
132 RefPtrWillBeRawPtr<SVGPathSeg> item = Base::appendItem(passItem); 121 RefPtrWillBeRawPtr<SVGPathSeg> item = Base::appendItem(passItem);
133 122
134 if (m_byteStream) { 123 if (m_byteStream) {
135 SVGPathByteStreamBuilder builder; 124 SVGPathByteStreamBuilder builder(*m_byteStream);
136 builder.setCurrentByteStream(m_byteStream.get());
137
138 SVGPathSegListSource source(lastAppended(), end()); 125 SVGPathSegListSource source(lastAppended(), end());
139 126 SVGPathParser parser(&source, &builder);
140 SVGPathParser parser;
141 parser.setCurrentConsumer(&builder);
142 parser.setCurrentSource(&source);
143 parser.parsePathDataFromSource(UnalteredParsing, false); 127 parser.parsePathDataFromSource(UnalteredParsing, false);
144 } 128 }
145 129
146 return item.release(); 130 return item.release();
147 } 131 }
148 132
149 String SVGPathSegList::valueAsString() const 133 String SVGPathSegList::valueAsString() const
150 { 134 {
151 String string; 135 String string;
152 buildStringFromByteStream(byteStream(), string, UnalteredParsing); 136 buildStringFromByteStream(*byteStream(), string, UnalteredParsing);
153 return string; 137 return string;
154 } 138 }
155 139
156 void SVGPathSegList::setValueAsString(const String& string, ExceptionState& exce ptionState) 140 void SVGPathSegList::setValueAsString(const String& string, ExceptionState& exce ptionState)
157 { 141 {
158 invalidateList(); 142 invalidateList();
159 if (!m_byteStream) 143 if (!m_byteStream)
160 m_byteStream = SVGPathByteStream::create(); 144 m_byteStream = SVGPathByteStream::create();
161 if (!buildSVGPathByteStreamFromString(string, m_byteStream.get(), UnalteredP arsing)) 145 if (!buildSVGPathByteStreamFromString(string, *m_byteStream, UnalteredParsin g))
162 exceptionState.throwDOMException(SyntaxError, "Problem parsing path \"" + string + "\""); 146 exceptionState.throwDOMException(SyntaxError, "Problem parsing path \"" + string + "\"");
163 } 147 }
164 148
165 void SVGPathSegList::add(PassRefPtrWillBeRawPtr<SVGPropertyBase> other, SVGEleme nt*) 149 void SVGPathSegList::add(PassRefPtrWillBeRawPtr<SVGPropertyBase> other, SVGEleme nt*)
166 { 150 {
167 RefPtrWillBeRawPtr<SVGPathSegList> otherList = toSVGPathSegList(other); 151 RefPtrWillBeRawPtr<SVGPathSegList> otherList = toSVGPathSegList(other);
168 if (length() != otherList->length()) 152 if (length() != otherList->length())
169 return; 153 return;
170 154
171 byteStream(); // create |m_byteStream| if not exist. 155 byteStream(); // create |m_byteStream| if it does not exist.
172 addToSVGPathByteStream(m_byteStream.get(), otherList->byteStream()); 156 addToSVGPathByteStream(*m_byteStream, *otherList->byteStream());
173 invalidateList(); 157 invalidateList();
174 } 158 }
175 159
176 void SVGPathSegList::calculateAnimatedValue(SVGAnimationElement* animationElemen t, float percentage, unsigned repeatCount, PassRefPtrWillBeRawPtr<SVGPropertyBas e> fromValue, PassRefPtrWillBeRawPtr<SVGPropertyBase> toValue, PassRefPtrWillBeR awPtr<SVGPropertyBase> toAtEndOfDurationValue, SVGElement*) 160 void SVGPathSegList::calculateAnimatedValue(SVGAnimationElement* animationElemen t, float percentage, unsigned repeatCount, PassRefPtrWillBeRawPtr<SVGPropertyBas e> fromValue, PassRefPtrWillBeRawPtr<SVGPropertyBase> toValue, PassRefPtrWillBeR awPtr<SVGPropertyBase> toAtEndOfDurationValue, SVGElement*)
177 { 161 {
178 invalidateList(); 162 invalidateList();
179 163
180 ASSERT(animationElement); 164 ASSERT(animationElement);
181 bool isToAnimation = animationElement->animationMode() == ToAnimation; 165 bool isToAnimation = animationElement->animationMode() == ToAnimation;
182 166
(...skipping 23 matching lines...) Expand all
206 } 190 }
207 } else { 191 } else {
208 m_byteStream = toStream->copy(); 192 m_byteStream = toStream->copy();
209 return; 193 return;
210 } 194 }
211 } 195 }
212 196
213 OwnPtr<SVGPathByteStream> lastAnimatedStream = m_byteStream.release(); 197 OwnPtr<SVGPathByteStream> lastAnimatedStream = m_byteStream.release();
214 198
215 m_byteStream = SVGPathByteStream::create(); 199 m_byteStream = SVGPathByteStream::create();
216 SVGPathByteStreamBuilder builder; 200 SVGPathByteStreamBuilder builder(*m_byteStream);
217 builder.setCurrentByteStream(m_byteStream.get());
218 201
219 SVGPathByteStreamSource fromSource(fromStream); 202 SVGPathByteStreamSource fromSource(*fromStream);
220 SVGPathByteStreamSource toSource(toStream); 203 SVGPathByteStreamSource toSource(*toStream);
221 204
222 SVGPathBlender blender; 205 SVGPathBlender blender(&fromSource, &toSource, &builder);
223 blender.blendAnimatedPath(percentage, &fromSource, &toSource, &builder); 206 blender.blendAnimatedPath(percentage);
224 207
225 // Handle additive='sum'. 208 // Handle additive='sum'.
226 if (!fromStream->size() || (animationElement->isAdditive() && !isToAnimation )) 209 if (!fromStream->size() || (animationElement->isAdditive() && !isToAnimation ))
227 addToSVGPathByteStream(m_byteStream.get(), lastAnimatedStream.get()); 210 addToSVGPathByteStream(*m_byteStream, *lastAnimatedStream);
228 211
229 // Handle accumulate='sum'. 212 // Handle accumulate='sum'.
230 if (animationElement->isAccumulated() && repeatCount) { 213 if (animationElement->isAccumulated() && repeatCount) {
231 const SVGPathByteStream* toAtEndOfDurationStream = toAtEndOfDuration->by teStream(); 214 const SVGPathByteStream* toAtEndOfDurationStream = toAtEndOfDuration->by teStream();
232 addToSVGPathByteStream(m_byteStream.get(), toAtEndOfDurationStream, repe atCount); 215 addToSVGPathByteStream(*m_byteStream, *toAtEndOfDurationStream, repeatCo unt);
233 } 216 }
234 } 217 }
235 218
236 float SVGPathSegList::calculateDistance(PassRefPtrWillBeRawPtr<SVGPropertyBase> to, SVGElement*) 219 float SVGPathSegList::calculateDistance(PassRefPtrWillBeRawPtr<SVGPropertyBase> to, SVGElement*)
237 { 220 {
238 // FIXME: Support paced animations. 221 // FIXME: Support paced animations.
239 return -1; 222 return -1;
240 } 223 }
241 224
242 } 225 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698