OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2014 Google Inc. All rights reserved. | 2 * Copyright (C) 2014 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
122 { | 122 { |
123 return target()->unitMode(); | 123 return target()->unitMode(); |
124 } | 124 } |
125 | 125 |
126 float SVGLengthTearOff::value(ExceptionState& exceptionState) | 126 float SVGLengthTearOff::value(ExceptionState& exceptionState) |
127 { | 127 { |
128 if (target()->isRelative() && !canResolveRelativeUnits(contextElement())) { | 128 if (target()->isRelative() && !canResolveRelativeUnits(contextElement())) { |
129 exceptionState.throwDOMException(NotSupportedError, "Could not resolve r
elative length."); | 129 exceptionState.throwDOMException(NotSupportedError, "Could not resolve r
elative length."); |
130 return 0; | 130 return 0; |
131 } | 131 } |
132 | |
133 SVGLengthContext lengthContext(contextElement()); | 132 SVGLengthContext lengthContext(contextElement()); |
134 return target()->value(lengthContext); | 133 return target()->value(lengthContext); |
135 } | 134 } |
136 | 135 |
137 void SVGLengthTearOff::setValue(float value, ExceptionState& exceptionState) | 136 void SVGLengthTearOff::setValue(float value, ExceptionState& exceptionState) |
138 { | 137 { |
139 if (isImmutable()) { | 138 if (isImmutable()) { |
140 exceptionState.throwDOMException(NoModificationAllowedError, "The attrib
ute is read-only."); | 139 throwReadOnly(exceptionState); |
141 return; | 140 return; |
142 } | 141 } |
143 | |
144 if (target()->isRelative() && !canResolveRelativeUnits(contextElement())) { | 142 if (target()->isRelative() && !canResolveRelativeUnits(contextElement())) { |
145 exceptionState.throwDOMException(NotSupportedError, "Could not resolve r
elative length."); | 143 exceptionState.throwDOMException(NotSupportedError, "Could not resolve r
elative length."); |
146 return; | 144 return; |
147 } | 145 } |
148 | |
149 SVGLengthContext lengthContext(contextElement()); | 146 SVGLengthContext lengthContext(contextElement()); |
150 if (target()->isCalculated()) | 147 if (target()->isCalculated()) |
151 target()->setValueAsNumber(value); | 148 target()->setValueAsNumber(value); |
152 else | 149 else |
153 target()->setValue(value, lengthContext); | 150 target()->setValue(value, lengthContext); |
154 | |
155 commitChange(); | 151 commitChange(); |
156 } | 152 } |
157 | 153 |
158 float SVGLengthTearOff::valueInSpecifiedUnits() | 154 float SVGLengthTearOff::valueInSpecifiedUnits() |
159 { | 155 { |
160 if (target()->isCalculated()) | 156 if (target()->isCalculated()) |
161 return 0; | 157 return 0; |
162 | |
163 return target()->valueInSpecifiedUnits(); | 158 return target()->valueInSpecifiedUnits(); |
164 } | 159 } |
165 | 160 |
166 void SVGLengthTearOff::setValueInSpecifiedUnits(float value, ExceptionState& exc
eptionState) | 161 void SVGLengthTearOff::setValueInSpecifiedUnits(float value, ExceptionState& exc
eptionState) |
167 { | 162 { |
168 if (isImmutable()) { | 163 if (isImmutable()) { |
169 exceptionState.throwDOMException(NoModificationAllowedError, "The attrib
ute is read-only."); | 164 throwReadOnly(exceptionState); |
170 return; | 165 return; |
171 } | 166 } |
172 | |
173 if (target()->isCalculated()) | 167 if (target()->isCalculated()) |
174 target()->setValueAsNumber(value); | 168 target()->setValueAsNumber(value); |
175 else | 169 else |
176 target()->setValueInSpecifiedUnits(value); | 170 target()->setValueInSpecifiedUnits(value); |
177 | |
178 commitChange(); | 171 commitChange(); |
179 } | 172 } |
180 | 173 |
181 String SVGLengthTearOff::valueAsString() | 174 String SVGLengthTearOff::valueAsString() |
182 { | 175 { |
183 // TODO(shanmuga.m@samsung.com): Not all <length> properties have 0 (with no
unit) as the default (lacuna) value, Need to return default value instead of 0 | 176 // TODO(shanmuga.m@samsung.com): Not all <length> properties have 0 (with no
unit) as the default (lacuna) value, Need to return default value instead of 0 |
184 return hasExposedLengthUnit() ? target()->valueAsString() : String::number(0
); | 177 return hasExposedLengthUnit() ? target()->valueAsString() : String::number(0
); |
185 } | 178 } |
186 | 179 |
187 void SVGLengthTearOff::setValueAsString(const String& str, ExceptionState& excep
tionState) | 180 void SVGLengthTearOff::setValueAsString(const String& str, ExceptionState& excep
tionState) |
188 { | 181 { |
189 if (isImmutable()) { | 182 if (isImmutable()) { |
190 exceptionState.throwDOMException(NoModificationAllowedError, "The attrib
ute is read-only."); | 183 throwReadOnly(exceptionState); |
191 return; | 184 return; |
192 } | 185 } |
193 | |
194 String oldValue = target()->valueAsString(); | 186 String oldValue = target()->valueAsString(); |
195 | |
196 SVGParsingError status = target()->setValueAsString(str); | 187 SVGParsingError status = target()->setValueAsString(str); |
197 | |
198 if (status == SVGParseStatus::NoError && !hasExposedLengthUnit()) { | 188 if (status == SVGParseStatus::NoError && !hasExposedLengthUnit()) { |
199 target()->setValueAsString(oldValue); // rollback to old value | 189 target()->setValueAsString(oldValue); // rollback to old value |
200 status = SVGParseStatus::ParsingFailed; | 190 status = SVGParseStatus::ParsingFailed; |
201 } | 191 } |
202 if (status != SVGParseStatus::NoError) { | 192 if (status != SVGParseStatus::NoError) { |
203 exceptionState.throwDOMException(SyntaxError, "The value provided ('" +
str + "') is invalid."); | 193 exceptionState.throwDOMException(SyntaxError, "The value provided ('" +
str + "') is invalid."); |
204 return; | 194 return; |
205 } | 195 } |
206 | |
207 commitChange(); | 196 commitChange(); |
208 } | 197 } |
209 | 198 |
210 void SVGLengthTearOff::newValueSpecifiedUnits(unsigned short unitType, float val
ueInSpecifiedUnits, ExceptionState& exceptionState) | 199 void SVGLengthTearOff::newValueSpecifiedUnits(unsigned short unitType, float val
ueInSpecifiedUnits, ExceptionState& exceptionState) |
211 { | 200 { |
212 if (isImmutable()) { | 201 if (isImmutable()) { |
213 exceptionState.throwDOMException(NoModificationAllowedError, "The object
is read-only."); | 202 throwReadOnly(exceptionState); |
214 return; | 203 return; |
215 } | 204 } |
216 | |
217 if (!isValidLengthUnit(unitType)) { | 205 if (!isValidLengthUnit(unitType)) { |
218 exceptionState.throwDOMException(NotSupportedError, "Cannot set value wi
th unknown or invalid units (" + String::number(unitType) + ")."); | 206 exceptionState.throwDOMException(NotSupportedError, "Cannot set value wi
th unknown or invalid units (" + String::number(unitType) + ")."); |
219 return; | 207 return; |
220 } | 208 } |
221 | |
222 target()->newValueSpecifiedUnits(toCSSUnitType(unitType), valueInSpecifiedUn
its); | 209 target()->newValueSpecifiedUnits(toCSSUnitType(unitType), valueInSpecifiedUn
its); |
223 commitChange(); | 210 commitChange(); |
224 } | 211 } |
225 | 212 |
226 void SVGLengthTearOff::convertToSpecifiedUnits(unsigned short unitType, Exceptio
nState& exceptionState) | 213 void SVGLengthTearOff::convertToSpecifiedUnits(unsigned short unitType, Exceptio
nState& exceptionState) |
227 { | 214 { |
228 if (isImmutable()) { | 215 if (isImmutable()) { |
229 exceptionState.throwDOMException(NoModificationAllowedError, "The object
is read-only."); | 216 throwReadOnly(exceptionState); |
230 return; | 217 return; |
231 } | 218 } |
232 | |
233 if (!isValidLengthUnit(unitType)) { | 219 if (!isValidLengthUnit(unitType)) { |
234 exceptionState.throwDOMException(NotSupportedError, "Cannot convert to u
nknown or invalid units (" + String::number(unitType) + ")."); | 220 exceptionState.throwDOMException(NotSupportedError, "Cannot convert to u
nknown or invalid units (" + String::number(unitType) + ")."); |
235 return; | 221 return; |
236 } | 222 } |
237 | |
238 if ((target()->isRelative() || CSSPrimitiveValue::isRelativeUnit(toCSSUnitTy
pe(unitType))) | 223 if ((target()->isRelative() || CSSPrimitiveValue::isRelativeUnit(toCSSUnitTy
pe(unitType))) |
239 && !canResolveRelativeUnits(contextElement())) { | 224 && !canResolveRelativeUnits(contextElement())) { |
240 exceptionState.throwDOMException(NotSupportedError, "Could not resolve r
elative length."); | 225 exceptionState.throwDOMException(NotSupportedError, "Could not resolve r
elative length."); |
241 return; | 226 return; |
242 } | 227 } |
243 | |
244 SVGLengthContext lengthContext(contextElement()); | 228 SVGLengthContext lengthContext(contextElement()); |
245 target()->convertToSpecifiedUnits(toCSSUnitType(unitType), lengthContext); | 229 target()->convertToSpecifiedUnits(toCSSUnitType(unitType), lengthContext); |
246 commitChange(); | 230 commitChange(); |
247 } | 231 } |
248 | 232 |
249 SVGLengthTearOff::SVGLengthTearOff(SVGLength* target, SVGElement* contextElement
, PropertyIsAnimValType propertyIsAnimVal, const QualifiedName& attributeName) | 233 SVGLengthTearOff::SVGLengthTearOff(SVGLength* target, SVGElement* contextElement
, PropertyIsAnimValType propertyIsAnimVal, const QualifiedName& attributeName) |
250 : SVGPropertyTearOff<SVGLength>(target, contextElement, propertyIsAnimVal, a
ttributeName) | 234 : SVGPropertyTearOff<SVGLength>(target, contextElement, propertyIsAnimVal, a
ttributeName) |
251 { | 235 { |
252 } | 236 } |
253 | 237 |
254 DEFINE_TRACE_WRAPPERS(SVGLengthTearOff) | 238 DEFINE_TRACE_WRAPPERS(SVGLengthTearOff) |
255 { | 239 { |
256 visitor->traceWrappers(contextElement()); | 240 visitor->traceWrappers(contextElement()); |
257 } | 241 } |
258 | 242 |
259 } // namespace blink | 243 } // namespace blink |
OLD | NEW |