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

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

Issue 2537223006: Cleanup after removal of the SVGViewSpec interface (Closed)
Patch Set: SVGViewSpec& Created 4 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2007, 2010 Rob Buis <buis@kde.org> 2 * Copyright (C) 2007, 2010 Rob Buis <buis@kde.org>
3 * 3 *
4 * This library is free software; you can redistribute it and/or 4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Library General Public 5 * modify it under the terms of the GNU Library General Public
6 * License as published by the Free Software Foundation; either 6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version. 7 * version 2 of the License, or (at your option) any later version.
8 * 8 *
9 * This library is distributed in the hope that it will be useful, 9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Library General Public License for more details. 12 * Library General Public License for more details.
13 * 13 *
14 * You should have received a copy of the GNU Library General Public License 14 * You should have received a copy of the GNU Library General Public License
15 * along with this library; see the file COPYING.LIB. If not, write to 15 * along with this library; see the file COPYING.LIB. If not, write to
16 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 16 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17 * Boston, MA 02110-1301, USA. 17 * Boston, MA 02110-1301, USA.
18 */ 18 */
19 19
20 #include "core/svg/SVGViewSpec.h" 20 #include "core/svg/SVGViewSpec.h"
21 21
22 #include "bindings/core/v8/ExceptionMessages.h"
23 #include "bindings/core/v8/ExceptionState.h"
24 #include "core/SVGNames.h"
25 #include "core/dom/ExceptionCode.h"
26 #include "core/svg/SVGAnimatedTransformList.h"
27 #include "core/svg/SVGParserUtilities.h" 22 #include "core/svg/SVGParserUtilities.h"
23 #include "core/svg/SVGPreserveAspectRatio.h"
24 #include "core/svg/SVGRect.h"
25 #include "core/svg/SVGTransformList.h"
28 #include "wtf/text/ParsingUtilities.h" 26 #include "wtf/text/ParsingUtilities.h"
29 27
30 namespace blink { 28 namespace blink {
31 29
32 SVGViewSpec::SVGViewSpec(SVGSVGElement* contextElement) 30 SVGViewSpec::SVGViewSpec()
33 // Note: addToPropertyMap is not needed, as SVGViewSpec do not correspond to 31 : m_viewBox(SVGRect::createInvalid()),
34 // an element. We make tear-offs' contextElement the target element of 32 m_preserveAspectRatio(SVGPreserveAspectRatio::create()),
35 // SVGViewSpec. This contextElement will be only used for keeping this 33 m_transform(SVGTransformList::create()) {}
36 // alive from the tearoff. SVGSVGElement holds a strong-ref to this
37 // SVGViewSpec, so this is kept alive as:
38 // AnimatedProperty tearoff -(contextElement)-> SVGSVGElement -(RefPtr)->
39 // SVGViewSpec.
40 : SVGFitToViewBox(contextElement, PropertyMapPolicySkip),
41 m_contextElement(contextElement),
42 m_transform(SVGAnimatedTransformList::create(contextElement,
43 SVGNames::transformAttr)) {
44 ASSERT(m_contextElement);
45
46 viewBox()->setReadOnly();
47 preserveAspectRatio()->setReadOnly();
48 m_transform->setReadOnly();
49 // Note: addToPropertyMap is not needed, as SVGViewSpec do not correspond to
50 // an element.
51 }
52 34
53 DEFINE_TRACE(SVGViewSpec) { 35 DEFINE_TRACE(SVGViewSpec) {
54 visitor->trace(m_contextElement); 36 visitor->trace(m_viewBox);
37 visitor->trace(m_preserveAspectRatio);
55 visitor->trace(m_transform); 38 visitor->trace(m_transform);
56 SVGFitToViewBox::trace(visitor);
57 } 39 }
58 40
59 bool SVGViewSpec::parseViewSpec(const String& spec) { 41 bool SVGViewSpec::parseViewSpec(const String& spec) {
60 if (spec.isEmpty() || !m_contextElement) 42 if (spec.isEmpty())
61 return false; 43 return false;
62 if (spec.is8Bit()) { 44 if (spec.is8Bit()) {
63 const LChar* ptr = spec.characters8(); 45 const LChar* ptr = spec.characters8();
64 const LChar* end = ptr + spec.length(); 46 const LChar* end = ptr + spec.length();
65 return parseViewSpecInternal(ptr, end); 47 return parseViewSpecInternal(ptr, end);
66 } 48 }
67 const UChar* ptr = spec.characters16(); 49 const UChar* ptr = spec.characters16();
68 const UChar* end = ptr + spec.length(); 50 const UChar* end = ptr + spec.length();
69 return parseViewSpecInternal(ptr, end); 51 return parseViewSpecInternal(ptr, end);
70 } 52 }
71 53
54 void SVGViewSpec::setViewBox(const FloatRect& rect) {
55 viewBox()->setValue(rect);
56 }
57
58 void SVGViewSpec::setPreserveAspectRatio(const SVGPreserveAspectRatio& other) {
59 preserveAspectRatio()->setAlign(other.align());
60 preserveAspectRatio()->setMeetOrSlice(other.meetOrSlice());
61 }
62
72 void SVGViewSpec::reset() { 63 void SVGViewSpec::reset() {
73 resetZoomAndPan(); 64 resetZoomAndPan();
74 m_transform->baseValue()->clear(); 65 m_transform->clear();
75 updateViewBox(FloatRect()); 66 setViewBox(FloatRect());
76 ASSERT(preserveAspectRatio()); 67 preserveAspectRatio()->setDefault();
77 preserveAspectRatio()->baseValue()->setAlign(
78 SVGPreserveAspectRatio::kSvgPreserveaspectratioXmidymid);
79 preserveAspectRatio()->baseValue()->setMeetOrSlice(
80 SVGPreserveAspectRatio::kSvgMeetorsliceMeet);
81 m_viewTargetString = emptyString();
82 } 68 }
83 69
84 namespace { 70 namespace {
85 71
86 enum ViewSpecFunctionType { 72 enum ViewSpecFunctionType {
87 Unknown, 73 Unknown,
88 PreserveAspectRatio, 74 PreserveAspectRatio,
89 Transform, 75 Transform,
90 ViewBox, 76 ViewBox,
91 ViewTarget, 77 ViewTarget,
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
141 switch (functionType) { 127 switch (functionType) {
142 case ViewBox: { 128 case ViewBox: {
143 float x = 0.0f; 129 float x = 0.0f;
144 float y = 0.0f; 130 float y = 0.0f;
145 float width = 0.0f; 131 float width = 0.0f;
146 float height = 0.0f; 132 float height = 0.0f;
147 if (!(parseNumber(ptr, end, x) && parseNumber(ptr, end, y) && 133 if (!(parseNumber(ptr, end, x) && parseNumber(ptr, end, y) &&
148 parseNumber(ptr, end, width) && 134 parseNumber(ptr, end, width) &&
149 parseNumber(ptr, end, height, DisallowWhitespace))) 135 parseNumber(ptr, end, height, DisallowWhitespace)))
150 return false; 136 return false;
151 updateViewBox(FloatRect(x, y, width, height)); 137 setViewBox(FloatRect(x, y, width, height));
152 break; 138 break;
153 } 139 }
154 case ViewTarget: { 140 case ViewTarget: {
155 const CharType* viewTargetStart = ptr; 141 // Ignore arguments.
156 skipUntil<CharType>(ptr, end, ')'); 142 skipUntil<CharType>(ptr, end, ')');
157 if (ptr == viewTargetStart)
158 return false;
159 m_viewTargetString = String(viewTargetStart, ptr - viewTargetStart);
160 break; 143 break;
161 } 144 }
162 case ZoomAndPan: 145 case ZoomAndPan:
163 if (!parseZoomAndPan(ptr, end)) 146 if (!parseZoomAndPan(ptr, end))
164 return false; 147 return false;
165 break; 148 break;
166 case PreserveAspectRatio: 149 case PreserveAspectRatio:
167 if (!preserveAspectRatio()->baseValue()->parse(ptr, end, false)) 150 if (!preserveAspectRatio()->parse(ptr, end, false))
168 return false; 151 return false;
169 break; 152 break;
170 case Transform: 153 case Transform:
171 m_transform->baseValue()->parse(ptr, end); 154 m_transform->parse(ptr, end);
172 break; 155 break;
173 default: 156 default:
174 NOTREACHED(); 157 NOTREACHED();
175 break; 158 break;
176 } 159 }
177 160
178 if (!skipExactly<CharType>(ptr, end, ')')) 161 if (!skipExactly<CharType>(ptr, end, ')'))
179 return false; 162 return false;
180 163
181 skipExactly<CharType>(ptr, end, ';'); 164 skipExactly<CharType>(ptr, end, ';');
182 } 165 }
183 return skipExactly<CharType>(ptr, end, ')'); 166 return skipExactly<CharType>(ptr, end, ')');
184 } 167 }
185 168
186 } // namespace blink 169 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/svg/SVGViewSpec.h ('k') | third_party/WebKit/Source/core/svg/properties/SVGAnimatedProperty.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698