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

Side by Side Diff: third_party/WebKit/Source/core/svg/SVGPath.cpp

Issue 1545713003: Add StylePath and use it to store 'd' in ComputedStyle (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: 2015->2016; Remove unnecessary explicit. Created 4 years, 11 months 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
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 17 matching lines...) Expand all
28 #include "core/svg/SVGPathByteStream.h" 28 #include "core/svg/SVGPathByteStream.h"
29 #include "core/svg/SVGPathByteStreamBuilder.h" 29 #include "core/svg/SVGPathByteStreamBuilder.h"
30 #include "core/svg/SVGPathByteStreamSource.h" 30 #include "core/svg/SVGPathByteStreamSource.h"
31 #include "core/svg/SVGPathUtilities.h" 31 #include "core/svg/SVGPathUtilities.h"
32 #include "platform/graphics/Path.h" 32 #include "platform/graphics/Path.h"
33 33
34 namespace blink { 34 namespace blink {
35 35
36 namespace { 36 namespace {
37 37
38 PassOwnPtr<SVGPathByteStream> blendPathByteStreams(const SVGPathByteStream& from Stream, const SVGPathByteStream& toStream, float progress) 38 PassRefPtr<SVGPathByteStream> blendPathByteStreams(const SVGPathByteStream& from Stream, const SVGPathByteStream& toStream, float progress)
39 { 39 {
40 OwnPtr<SVGPathByteStream> resultStream = SVGPathByteStream::create(); 40 RefPtr<SVGPathByteStream> resultStream = SVGPathByteStream::create();
41 SVGPathByteStreamBuilder builder(*resultStream); 41 SVGPathByteStreamBuilder builder(*resultStream);
42 SVGPathByteStreamSource fromSource(fromStream); 42 SVGPathByteStreamSource fromSource(fromStream);
43 SVGPathByteStreamSource toSource(toStream); 43 SVGPathByteStreamSource toSource(toStream);
44 SVGPathBlender blender(&fromSource, &toSource, &builder); 44 SVGPathBlender blender(&fromSource, &toSource, &builder);
45 blender.blendAnimatedPath(progress); 45 blender.blendAnimatedPath(progress);
46 return resultStream.release(); 46 return resultStream.release();
47 } 47 }
48 48
49 PassOwnPtr<SVGPathByteStream> addPathByteStreams(const SVGPathByteStream& fromSt ream, const SVGPathByteStream& byStream, unsigned repeatCount = 1) 49 PassRefPtr<SVGPathByteStream> addPathByteStreams(const SVGPathByteStream& fromSt ream, const SVGPathByteStream& byStream, unsigned repeatCount = 1)
50 { 50 {
51 OwnPtr<SVGPathByteStream> resultStream = SVGPathByteStream::create(); 51 RefPtr<SVGPathByteStream> resultStream = SVGPathByteStream::create();
52 SVGPathByteStreamBuilder builder(*resultStream); 52 SVGPathByteStreamBuilder builder(*resultStream);
53 SVGPathByteStreamSource fromSource(fromStream); 53 SVGPathByteStreamSource fromSource(fromStream);
54 SVGPathByteStreamSource bySource(byStream); 54 SVGPathByteStreamSource bySource(byStream);
55 SVGPathBlender blender(&fromSource, &bySource, &builder); 55 SVGPathBlender blender(&fromSource, &bySource, &builder);
56 blender.addAnimatedPath(repeatCount); 56 blender.addAnimatedPath(repeatCount);
57 return resultStream.release(); 57 return resultStream.release();
58 } 58 }
59 59
60 PassOwnPtr<SVGPathByteStream> conditionallyAddPathByteStreams(PassOwnPtr<SVGPath ByteStream> fromStream, const SVGPathByteStream& byStream, unsigned repeatCount = 1) 60 PassRefPtr<SVGPathByteStream> conditionallyAddPathByteStreams(PassRefPtr<SVGPath ByteStream> fromStream, const SVGPathByteStream& byStream, unsigned repeatCount = 1)
61 { 61 {
62 if (fromStream->isEmpty() || byStream.isEmpty()) 62 if (fromStream->isEmpty() || byStream.isEmpty())
63 return fromStream; 63 return fromStream;
64 return addPathByteStreams(*fromStream, byStream, repeatCount); 64 return addPathByteStreams(*fromStream, byStream, repeatCount);
65 } 65 }
66 66
67 } 67 }
68 68
69 SVGPath::SVGPath() 69 SVGPath::SVGPath()
70 : SVGPropertyBase(classType()) 70 : SVGPropertyBase(classType())
(...skipping 18 matching lines...) Expand all
89 89
90 90
91 PassRefPtrWillBeRawPtr<SVGPath> SVGPath::clone() const 91 PassRefPtrWillBeRawPtr<SVGPath> SVGPath::clone() const
92 { 92 {
93 return SVGPath::create(m_pathValue); 93 return SVGPath::create(m_pathValue);
94 } 94 }
95 95
96 SVGParsingError SVGPath::setValueAsString(const String& string) 96 SVGParsingError SVGPath::setValueAsString(const String& string)
97 { 97 {
98 SVGParsingError parseStatus = NoError; 98 SVGParsingError parseStatus = NoError;
99 OwnPtr<SVGPathByteStream> byteStream = SVGPathByteStream::create(); 99 RefPtr<SVGPathByteStream> byteStream = SVGPathByteStream::create();
100 if (!buildByteStreamFromString(string, *byteStream)) 100 if (!buildByteStreamFromString(string, *byteStream))
101 parseStatus = ParsingAttributeFailedError; 101 parseStatus = ParsingAttributeFailedError;
102 m_pathValue = CSSPathValue::create(byteStream.release()); 102 m_pathValue = CSSPathValue::create(byteStream.release());
103 return parseStatus; 103 return parseStatus;
104 } 104 }
105 105
106 PassRefPtrWillBeRawPtr<SVGPropertyBase> SVGPath::cloneForAnimation(const String& value) const 106 PassRefPtrWillBeRawPtr<SVGPropertyBase> SVGPath::cloneForAnimation(const String& value) const
107 { 107 {
108 return SVGPath::create(CSSPathValue::create(value)); 108 return SVGPath::create(CSSPathValue::create(value));
109 } 109 }
(...skipping 17 matching lines...) Expand all
127 const RefPtrWillBeRawPtr<SVGPath> to = toSVGPath(toValue); 127 const RefPtrWillBeRawPtr<SVGPath> to = toSVGPath(toValue);
128 const SVGPathByteStream& toStream = to->byteStream(); 128 const SVGPathByteStream& toStream = to->byteStream();
129 129
130 // If no 'to' value is given, nothing to animate. 130 // If no 'to' value is given, nothing to animate.
131 if (!toStream.size()) 131 if (!toStream.size())
132 return; 132 return;
133 133
134 const RefPtrWillBeRawPtr<SVGPath> from = toSVGPath(fromValue); 134 const RefPtrWillBeRawPtr<SVGPath> from = toSVGPath(fromValue);
135 const SVGPathByteStream* fromStream = &from->byteStream(); 135 const SVGPathByteStream* fromStream = &from->byteStream();
136 136
137 OwnPtr<SVGPathByteStream> copy; 137 RefPtr<SVGPathByteStream> copy;
138 if (isToAnimation) { 138 if (isToAnimation) {
139 copy = byteStream().copy(); 139 copy = byteStream().clone();
140 fromStream = copy.get(); 140 fromStream = copy.get();
141 } 141 }
142 142
143 // If the 'from' value is given and it's length doesn't match the 'to' value list length, fallback to a discrete animation. 143 // If the 'from' value is given and it's length doesn't match the 'to' value list length, fallback to a discrete animation.
144 if (fromStream->size() != toStream.size() && fromStream->size()) { 144 if (fromStream->size() != toStream.size() && fromStream->size()) {
145 if (percentage < 0.5) { 145 if (percentage < 0.5) {
146 if (!isToAnimation) { 146 if (!isToAnimation) {
147 m_pathValue = from->pathValue(); 147 m_pathValue = from->pathValue();
148 return; 148 return;
149 } 149 }
150 } else { 150 } else {
151 m_pathValue = to->pathValue(); 151 m_pathValue = to->pathValue();
152 return; 152 return;
153 } 153 }
154 } 154 }
155 155
156 OwnPtr<SVGPathByteStream> newStream = blendPathByteStreams(*fromStream, toSt ream, percentage); 156 RefPtr<SVGPathByteStream> newStream = blendPathByteStreams(*fromStream, toSt ream, percentage);
157 157
158 // Handle additive='sum'. 158 // Handle additive='sum'.
159 if (animationElement->isAdditive() && !isToAnimation) 159 if (animationElement->isAdditive() && !isToAnimation)
160 newStream = conditionallyAddPathByteStreams(newStream.release(), byteStr eam()); 160 newStream = conditionallyAddPathByteStreams(newStream.release(), byteStr eam());
161 161
162 // Handle accumulate='sum'. 162 // Handle accumulate='sum'.
163 if (animationElement->isAccumulated() && repeatCount) 163 if (animationElement->isAccumulated() && repeatCount)
164 newStream = conditionallyAddPathByteStreams(newStream.release(), toSVGPa th(toAtEndOfDurationValue)->byteStream(), repeatCount); 164 newStream = conditionallyAddPathByteStreams(newStream.release(), toSVGPa th(toAtEndOfDurationValue)->byteStream(), repeatCount);
165 165
166 m_pathValue = CSSPathValue::create(newStream.release()); 166 m_pathValue = CSSPathValue::create(newStream.release());
167 } 167 }
168 168
169 float SVGPath::calculateDistance(PassRefPtrWillBeRawPtr<SVGPropertyBase> to, SVG Element*) 169 float SVGPath::calculateDistance(PassRefPtrWillBeRawPtr<SVGPropertyBase> to, SVG Element*)
170 { 170 {
171 // FIXME: Support paced animations. 171 // FIXME: Support paced animations.
172 return -1; 172 return -1;
173 } 173 }
174 174
175 DEFINE_TRACE(SVGPath) 175 DEFINE_TRACE(SVGPath)
176 { 176 {
177 visitor->trace(m_pathValue); 177 visitor->trace(m_pathValue);
178 SVGPropertyBase::trace(visitor); 178 SVGPropertyBase::trace(visitor);
179 } 179 }
180 180
181 } 181 }
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/style/StylePath.cpp ('k') | third_party/WebKit/Source/core/svg/SVGPathByteStream.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698