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

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

Issue 303263008: [SVG2] Add support for the 'turn' unit in <angle>. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: fixups for MathExtras Created 6 years, 6 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
« no previous file with comments | « Source/core/svg/SVGAngle.h ('k') | Source/core/svg/SVGAngleTearOff.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2004, 2005, 2007, 2008 Nikolas Zimmermann <zimmermann@kde.org> 2 * Copyright (C) 2004, 2005, 2007, 2008 Nikolas Zimmermann <zimmermann@kde.org>
3 * Copyright (C) 2004, 2005, 2006 Rob Buis <buis@kde.org> 3 * Copyright (C) 2004, 2005, 2006 Rob Buis <buis@kde.org>
4 * Copyright (C) Research In Motion Limited 2010. All rights reserved. 4 * Copyright (C) Research In Motion Limited 2010. All rights reserved.
5 * 5 *
6 * This library is free software; you can redistribute it and/or 6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Library General Public 7 * modify it under the terms of the GNU Library General Public
8 * License as published by the Free Software Foundation; either 8 * License as published by the Free Software Foundation; either
9 * version 2 of the License, or (at your option) any later version. 9 * version 2 of the License, or (at your option) any later version.
10 * 10 *
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
110 return point.release(); 110 return point.release();
111 } 111 }
112 112
113 float SVGAngle::value() const 113 float SVGAngle::value() const
114 { 114 {
115 switch (m_unitType) { 115 switch (m_unitType) {
116 case SVG_ANGLETYPE_GRAD: 116 case SVG_ANGLETYPE_GRAD:
117 return grad2deg(m_valueInSpecifiedUnits); 117 return grad2deg(m_valueInSpecifiedUnits);
118 case SVG_ANGLETYPE_RAD: 118 case SVG_ANGLETYPE_RAD:
119 return rad2deg(m_valueInSpecifiedUnits); 119 return rad2deg(m_valueInSpecifiedUnits);
120 case SVG_ANGLETYPE_TURN:
121 return turn2deg(m_valueInSpecifiedUnits);
120 case SVG_ANGLETYPE_UNSPECIFIED: 122 case SVG_ANGLETYPE_UNSPECIFIED:
121 case SVG_ANGLETYPE_UNKNOWN: 123 case SVG_ANGLETYPE_UNKNOWN:
122 case SVG_ANGLETYPE_DEG: 124 case SVG_ANGLETYPE_DEG:
123 return m_valueInSpecifiedUnits; 125 return m_valueInSpecifiedUnits;
124 } 126 }
125 127
126 ASSERT_NOT_REACHED(); 128 ASSERT_NOT_REACHED();
127 return 0; 129 return 0;
128 } 130 }
129 131
130 void SVGAngle::setValue(float value) 132 void SVGAngle::setValue(float value)
131 { 133 {
132 switch (m_unitType) { 134 switch (m_unitType) {
133 case SVG_ANGLETYPE_GRAD: 135 case SVG_ANGLETYPE_GRAD:
134 m_valueInSpecifiedUnits = deg2grad(value); 136 m_valueInSpecifiedUnits = deg2grad(value);
135 break; 137 break;
136 case SVG_ANGLETYPE_RAD: 138 case SVG_ANGLETYPE_RAD:
137 m_valueInSpecifiedUnits = deg2rad(value); 139 m_valueInSpecifiedUnits = deg2rad(value);
138 break; 140 break;
141 case SVG_ANGLETYPE_TURN:
142 m_valueInSpecifiedUnits = deg2turn(value);
143 break;
139 case SVG_ANGLETYPE_UNSPECIFIED: 144 case SVG_ANGLETYPE_UNSPECIFIED:
140 case SVG_ANGLETYPE_UNKNOWN: 145 case SVG_ANGLETYPE_UNKNOWN:
141 case SVG_ANGLETYPE_DEG: 146 case SVG_ANGLETYPE_DEG:
142 m_valueInSpecifiedUnits = value; 147 m_valueInSpecifiedUnits = value;
143 break; 148 break;
144 } 149 }
145 m_orientType->setEnumValue(SVGMarkerOrientAngle); 150 m_orientType->setEnumValue(SVGMarkerOrientAngle);
146 } 151 }
147 152
148 template<typename CharType> 153 template<typename CharType>
(...skipping 12 matching lines...) Expand all
161 const CharType secondChar = *ptr++; 166 const CharType secondChar = *ptr++;
162 const CharType thirdChar = *ptr++; 167 const CharType thirdChar = *ptr++;
163 if (firstChar == 'd' && secondChar == 'e' && thirdChar == 'g') { 168 if (firstChar == 'd' && secondChar == 'e' && thirdChar == 'g') {
164 type = SVGAngle::SVG_ANGLETYPE_DEG; 169 type = SVGAngle::SVG_ANGLETYPE_DEG;
165 } else if (firstChar == 'r' && secondChar == 'a' && thirdChar == 'd') { 170 } else if (firstChar == 'r' && secondChar == 'a' && thirdChar == 'd') {
166 type = SVGAngle::SVG_ANGLETYPE_RAD; 171 type = SVGAngle::SVG_ANGLETYPE_RAD;
167 } else if (ptr != end) { 172 } else if (ptr != end) {
168 const CharType fourthChar = *ptr++; 173 const CharType fourthChar = *ptr++;
169 if (firstChar == 'g' && secondChar == 'r' && thirdChar == 'a' && fou rthChar == 'd') 174 if (firstChar == 'g' && secondChar == 'r' && thirdChar == 'a' && fou rthChar == 'd')
170 type = SVGAngle::SVG_ANGLETYPE_GRAD; 175 type = SVGAngle::SVG_ANGLETYPE_GRAD;
176 else if (firstChar == 't' && secondChar == 'u' && thirdChar == 'r' & & fourthChar == 'n')
177 type = SVGAngle::SVG_ANGLETYPE_TURN;
171 } 178 }
172 } 179 }
173 180
174 if (!skipOptionalSVGSpaces(ptr, end)) 181 if (!skipOptionalSVGSpaces(ptr, end))
175 return type; 182 return type;
176 183
177 return SVGAngle::SVG_ANGLETYPE_UNKNOWN; 184 return SVGAngle::SVG_ANGLETYPE_UNKNOWN;
178 } 185 }
179 186
180 String SVGAngle::valueAsString() const 187 String SVGAngle::valueAsString() const
181 { 188 {
182 switch (m_unitType) { 189 switch (m_unitType) {
183 case SVG_ANGLETYPE_DEG: { 190 case SVG_ANGLETYPE_DEG: {
184 DEFINE_STATIC_LOCAL(String, degString, ("deg")); 191 DEFINE_STATIC_LOCAL(String, degString, ("deg"));
185 return String::number(m_valueInSpecifiedUnits) + degString; 192 return String::number(m_valueInSpecifiedUnits) + degString;
186 } 193 }
187 case SVG_ANGLETYPE_RAD: { 194 case SVG_ANGLETYPE_RAD: {
188 DEFINE_STATIC_LOCAL(String, radString, ("rad")); 195 DEFINE_STATIC_LOCAL(String, radString, ("rad"));
189 return String::number(m_valueInSpecifiedUnits) + radString; 196 return String::number(m_valueInSpecifiedUnits) + radString;
190 } 197 }
191 case SVG_ANGLETYPE_GRAD: { 198 case SVG_ANGLETYPE_GRAD: {
192 DEFINE_STATIC_LOCAL(String, gradString, ("grad")); 199 DEFINE_STATIC_LOCAL(String, gradString, ("grad"));
193 return String::number(m_valueInSpecifiedUnits) + gradString; 200 return String::number(m_valueInSpecifiedUnits) + gradString;
194 } 201 }
202 case SVG_ANGLETYPE_TURN: {
203 DEFINE_STATIC_LOCAL(String, turnString, ("turn"));
204 return String::number(m_valueInSpecifiedUnits) + turnString;
205 }
195 case SVG_ANGLETYPE_UNSPECIFIED: 206 case SVG_ANGLETYPE_UNSPECIFIED:
196 case SVG_ANGLETYPE_UNKNOWN: 207 case SVG_ANGLETYPE_UNKNOWN:
197 return String::number(m_valueInSpecifiedUnits); 208 return String::number(m_valueInSpecifiedUnits);
198 } 209 }
199 210
200 ASSERT_NOT_REACHED(); 211 ASSERT_NOT_REACHED();
201 return String(); 212 return String();
202 } 213 }
203 214
204 template<typename CharType> 215 template<typename CharType>
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
256 { 267 {
257 if (m_unitType == SVG_ANGLETYPE_UNKNOWN) { 268 if (m_unitType == SVG_ANGLETYPE_UNKNOWN) {
258 exceptionState.throwDOMException(NotSupportedError, "Cannot convert from unknown or invalid units."); 269 exceptionState.throwDOMException(NotSupportedError, "Cannot convert from unknown or invalid units.");
259 return; 270 return;
260 } 271 }
261 272
262 if (unitType == m_unitType) 273 if (unitType == m_unitType)
263 return; 274 return;
264 275
265 switch (m_unitType) { 276 switch (m_unitType) {
277 case SVG_ANGLETYPE_TURN:
278 switch (unitType) {
279 case SVG_ANGLETYPE_GRAD:
280 m_valueInSpecifiedUnits = turn2grad(m_valueInSpecifiedUnits);
281 break;
282 case SVG_ANGLETYPE_UNSPECIFIED:
283 case SVG_ANGLETYPE_DEG:
284 m_valueInSpecifiedUnits = turn2deg(m_valueInSpecifiedUnits);
285 break;
286 case SVG_ANGLETYPE_RAD:
287 m_valueInSpecifiedUnits = deg2rad(turn2deg(m_valueInSpecifiedUnits)) ;
288 break;
289 case SVG_ANGLETYPE_TURN:
290 case SVG_ANGLETYPE_UNKNOWN:
291 ASSERT_NOT_REACHED();
292 break;
293 }
294 break;
266 case SVG_ANGLETYPE_RAD: 295 case SVG_ANGLETYPE_RAD:
267 switch (unitType) { 296 switch (unitType) {
268 case SVG_ANGLETYPE_GRAD: 297 case SVG_ANGLETYPE_GRAD:
269 m_valueInSpecifiedUnits = rad2grad(m_valueInSpecifiedUnits); 298 m_valueInSpecifiedUnits = rad2grad(m_valueInSpecifiedUnits);
270 break; 299 break;
271 case SVG_ANGLETYPE_UNSPECIFIED: 300 case SVG_ANGLETYPE_UNSPECIFIED:
272 case SVG_ANGLETYPE_DEG: 301 case SVG_ANGLETYPE_DEG:
273 m_valueInSpecifiedUnits = rad2deg(m_valueInSpecifiedUnits); 302 m_valueInSpecifiedUnits = rad2deg(m_valueInSpecifiedUnits);
274 break; 303 break;
304 case SVG_ANGLETYPE_TURN:
305 m_valueInSpecifiedUnits = deg2turn(rad2deg(m_valueInSpecifiedUnits)) ;
306 break;
275 case SVG_ANGLETYPE_RAD: 307 case SVG_ANGLETYPE_RAD:
276 case SVG_ANGLETYPE_UNKNOWN: 308 case SVG_ANGLETYPE_UNKNOWN:
277 ASSERT_NOT_REACHED(); 309 ASSERT_NOT_REACHED();
278 break; 310 break;
279 } 311 }
280 break; 312 break;
281 case SVG_ANGLETYPE_GRAD: 313 case SVG_ANGLETYPE_GRAD:
282 switch (unitType) { 314 switch (unitType) {
283 case SVG_ANGLETYPE_RAD: 315 case SVG_ANGLETYPE_RAD:
284 m_valueInSpecifiedUnits = grad2rad(m_valueInSpecifiedUnits); 316 m_valueInSpecifiedUnits = grad2rad(m_valueInSpecifiedUnits);
285 break; 317 break;
286 case SVG_ANGLETYPE_UNSPECIFIED: 318 case SVG_ANGLETYPE_UNSPECIFIED:
287 case SVG_ANGLETYPE_DEG: 319 case SVG_ANGLETYPE_DEG:
288 m_valueInSpecifiedUnits = grad2deg(m_valueInSpecifiedUnits); 320 m_valueInSpecifiedUnits = grad2deg(m_valueInSpecifiedUnits);
289 break; 321 break;
322 case SVG_ANGLETYPE_TURN:
323 m_valueInSpecifiedUnits = grad2turn(m_valueInSpecifiedUnits);
324 break;
290 case SVG_ANGLETYPE_GRAD: 325 case SVG_ANGLETYPE_GRAD:
291 case SVG_ANGLETYPE_UNKNOWN: 326 case SVG_ANGLETYPE_UNKNOWN:
292 ASSERT_NOT_REACHED(); 327 ASSERT_NOT_REACHED();
293 break; 328 break;
294 } 329 }
295 break; 330 break;
296 case SVG_ANGLETYPE_UNSPECIFIED: 331 case SVG_ANGLETYPE_UNSPECIFIED:
297 // Spec: For angles, a unitless value is treated the same as if degrees were specified. 332 // Spec: For angles, a unitless value is treated the same as if degrees were specified.
298 case SVG_ANGLETYPE_DEG: 333 case SVG_ANGLETYPE_DEG:
299 switch (unitType) { 334 switch (unitType) {
300 case SVG_ANGLETYPE_RAD: 335 case SVG_ANGLETYPE_RAD:
301 m_valueInSpecifiedUnits = deg2rad(m_valueInSpecifiedUnits); 336 m_valueInSpecifiedUnits = deg2rad(m_valueInSpecifiedUnits);
302 break; 337 break;
303 case SVG_ANGLETYPE_GRAD: 338 case SVG_ANGLETYPE_GRAD:
304 m_valueInSpecifiedUnits = deg2grad(m_valueInSpecifiedUnits); 339 m_valueInSpecifiedUnits = deg2grad(m_valueInSpecifiedUnits);
305 break; 340 break;
341 case SVG_ANGLETYPE_TURN:
342 m_valueInSpecifiedUnits = deg2turn(m_valueInSpecifiedUnits);
343 break;
306 case SVG_ANGLETYPE_UNSPECIFIED: 344 case SVG_ANGLETYPE_UNSPECIFIED:
345 case SVG_ANGLETYPE_DEG:
307 break; 346 break;
308 case SVG_ANGLETYPE_DEG:
309 case SVG_ANGLETYPE_UNKNOWN: 347 case SVG_ANGLETYPE_UNKNOWN:
310 ASSERT_NOT_REACHED(); 348 ASSERT_NOT_REACHED();
311 break; 349 break;
312 } 350 }
313 break; 351 break;
314 case SVG_ANGLETYPE_UNKNOWN: 352 case SVG_ANGLETYPE_UNKNOWN:
315 ASSERT_NOT_REACHED(); 353 ASSERT_NOT_REACHED();
316 break; 354 break;
317 } 355 }
318 356
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
389 427
390 void SVGAngle::orientTypeChanged() 428 void SVGAngle::orientTypeChanged()
391 { 429 {
392 if (orientType()->enumValue() == SVGMarkerOrientAuto) { 430 if (orientType()->enumValue() == SVGMarkerOrientAuto) {
393 m_unitType = SVG_ANGLETYPE_UNSPECIFIED; 431 m_unitType = SVG_ANGLETYPE_UNSPECIFIED;
394 m_valueInSpecifiedUnits = 0; 432 m_valueInSpecifiedUnits = 0;
395 } 433 }
396 } 434 }
397 435
398 } 436 }
OLDNEW
« no previous file with comments | « Source/core/svg/SVGAngle.h ('k') | Source/core/svg/SVGAngleTearOff.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698