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

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

Issue 1031223003: SVG doesn't recognize rem units (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Fixes builderror Created 5 years, 8 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/SVGLength.h ('k') | Source/core/svg/SVGLengthContext.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, 2006 Nikolas Zimmermann <zimmermann@kde.org> 2 * Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <zimmermann@kde.org>
3 * Copyright (C) 2004, 2005, 2006, 2007 Rob Buis <buis@kde.org> 3 * Copyright (C) 2004, 2005, 2006, 2007 Rob Buis <buis@kde.org>
4 * Copyright (C) 2007 Apple Inc. All rights reserved. 4 * Copyright (C) 2007 Apple Inc. 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 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
54 case LengthTypeCM: 54 case LengthTypeCM:
55 return "cm"; 55 return "cm";
56 case LengthTypeMM: 56 case LengthTypeMM:
57 return "mm"; 57 return "mm";
58 case LengthTypeIN: 58 case LengthTypeIN:
59 return "in"; 59 return "in";
60 case LengthTypePT: 60 case LengthTypePT:
61 return "pt"; 61 return "pt";
62 case LengthTypePC: 62 case LengthTypePC:
63 return "pc"; 63 return "pc";
64 case LengthTypeREMS:
65 return "rem";
64 } 66 }
65 67
66 ASSERT_NOT_REACHED(); 68 ASSERT_NOT_REACHED();
67 return ""; 69 return "";
68 } 70 }
69 71
70 template<typename CharType> 72 template<typename CharType>
71 SVGLengthType stringToLengthType(const CharType*& ptr, const CharType* end) 73 SVGLengthType stringToLengthType(const CharType*& ptr, const CharType* end)
72 { 74 {
73 if (ptr == end) 75 if (ptr == end)
(...skipping 14 matching lines...) Expand all
88 type = LengthTypePX; 90 type = LengthTypePX;
89 if (secondChar == 't') 91 if (secondChar == 't')
90 type = LengthTypePT; 92 type = LengthTypePT;
91 if (secondChar == 'c') 93 if (secondChar == 'c')
92 type = LengthTypePC; 94 type = LengthTypePC;
93 } else if (firstChar == 'e') { 95 } else if (firstChar == 'e') {
94 if (secondChar == 'm') 96 if (secondChar == 'm')
95 type = LengthTypeEMS; 97 type = LengthTypeEMS;
96 if (secondChar == 'x') 98 if (secondChar == 'x')
97 type = LengthTypeEXS; 99 type = LengthTypeEXS;
100 } else if (firstChar == 'r') {
101 if (secondChar == 'e') {
102 const CharType thirdChar = *ptr++;
103 if (thirdChar == 'm')
104 type = LengthTypeREMS;
105 }
98 } else if (firstChar == 'c' && secondChar == 'm') { 106 } else if (firstChar == 'c' && secondChar == 'm') {
99 type = LengthTypeCM; 107 type = LengthTypeCM;
100 } else if (firstChar == 'm' && secondChar == 'm') { 108 } else if (firstChar == 'm' && secondChar == 'm') {
101 type = LengthTypeMM; 109 type = LengthTypeMM;
102 } else if (firstChar == 'i' && secondChar == 'n') { 110 } else if (firstChar == 'i' && secondChar == 'n') {
103 type = LengthTypeIN; 111 type = LengthTypeIN;
104 } else if (isHTMLSpace<CharType>(firstChar) && isHTMLSpace<CharType>(sec ondChar)) { 112 } else if (isHTMLSpace<CharType>(firstChar) && isHTMLSpace<CharType>(sec ondChar)) {
105 type = LengthTypeNumber; 113 type = LengthTypeNumber;
106 } 114 }
107 } 115 }
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after
293 break; 301 break;
294 case CSSPrimitiveValue::CSS_MM: 302 case CSSPrimitiveValue::CSS_MM:
295 svgType = LengthTypeMM; 303 svgType = LengthTypeMM;
296 break; 304 break;
297 case CSSPrimitiveValue::CSS_IN: 305 case CSSPrimitiveValue::CSS_IN:
298 svgType = LengthTypeIN; 306 svgType = LengthTypeIN;
299 break; 307 break;
300 case CSSPrimitiveValue::CSS_PT: 308 case CSSPrimitiveValue::CSS_PT:
301 svgType = LengthTypePT; 309 svgType = LengthTypePT;
302 break; 310 break;
311 case CSSPrimitiveValue::CSS_REMS:
312 svgType = LengthTypeREMS;
313 break;
303 default: 314 default:
304 ASSERT(value->primitiveType() == CSSPrimitiveValue::CSS_PC); 315 ASSERT(value->primitiveType() == CSSPrimitiveValue::CSS_PC);
305 svgType = LengthTypePC; 316 svgType = LengthTypePC;
306 break; 317 break;
307 }; 318 };
308 319
309 RefPtrWillBeRawPtr<SVGLength> length = SVGLength::create(); 320 RefPtrWillBeRawPtr<SVGLength> length = SVGLength::create();
310 length->newValueSpecifiedUnits(svgType, value->getFloatValue()); 321 length->newValueSpecifiedUnits(svgType, value->getFloatValue());
311 return length.release(); 322 return length.release();
312 } 323 }
(...skipping 29 matching lines...) Expand all
342 break; 353 break;
343 case LengthTypeIN: 354 case LengthTypeIN:
344 cssType = CSSPrimitiveValue::CSS_IN; 355 cssType = CSSPrimitiveValue::CSS_IN;
345 break; 356 break;
346 case LengthTypePT: 357 case LengthTypePT:
347 cssType = CSSPrimitiveValue::CSS_PT; 358 cssType = CSSPrimitiveValue::CSS_PT;
348 break; 359 break;
349 case LengthTypePC: 360 case LengthTypePC:
350 cssType = CSSPrimitiveValue::CSS_PC; 361 cssType = CSSPrimitiveValue::CSS_PC;
351 break; 362 break;
363 case LengthTypeREMS:
364 cssType = CSSPrimitiveValue::CSS_REMS;
365 break;
352 }; 366 };
353 367
354 return CSSPrimitiveValue::create(length->valueInSpecifiedUnits(), cssType); 368 return CSSPrimitiveValue::create(length->valueInSpecifiedUnits(), cssType);
355 } 369 }
356 370
357 SVGLengthMode SVGLength::lengthModeForAnimatedLengthAttribute(const QualifiedNam e& attrName) 371 SVGLengthMode SVGLength::lengthModeForAnimatedLengthAttribute(const QualifiedNam e& attrName)
358 { 372 {
359 typedef HashMap<QualifiedName, SVGLengthMode> LengthModeForLengthAttributeMa p; 373 typedef HashMap<QualifiedName, SVGLengthMode> LengthModeForLengthAttributeMa p;
360 DEFINE_STATIC_LOCAL(LengthModeForLengthAttributeMap, s_lengthModeMap, ()); 374 DEFINE_STATIC_LOCAL(LengthModeForLengthAttributeMap, s_lengthModeMap, ());
361 375
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
395 { 409 {
396 RefPtrWillBeRawPtr<SVGLength> from = passFrom; 410 RefPtrWillBeRawPtr<SVGLength> from = passFrom;
397 411
398 SVGLengthType toType = unitType(); 412 SVGLengthType toType = unitType();
399 SVGLengthType fromType = from->unitType(); 413 SVGLengthType fromType = from->unitType();
400 if ((from->isZero() && isZero()) 414 if ((from->isZero() && isZero())
401 || fromType == LengthTypeUnknown 415 || fromType == LengthTypeUnknown
402 || toType == LengthTypeUnknown 416 || toType == LengthTypeUnknown
403 || (!from->isZero() && fromType != LengthTypePercentage && toType == Len gthTypePercentage) 417 || (!from->isZero() && fromType != LengthTypePercentage && toType == Len gthTypePercentage)
404 || (!isZero() && fromType == LengthTypePercentage && toType != LengthTyp ePercentage) 418 || (!isZero() && fromType == LengthTypePercentage && toType != LengthTyp ePercentage)
405 || (!from->isZero() && !isZero() && (fromType == LengthTypeEMS || fromTy pe == LengthTypeEXS) && fromType != toType)) 419 || (!from->isZero() && !isZero() && (fromType == LengthTypeEMS || fromTy pe == LengthTypeEXS || fromType == LengthTypeREMS) && fromType != toType))
406 return clone(); 420 return clone();
407 421
408 RefPtrWillBeRawPtr<SVGLength> length = create(); 422 RefPtrWillBeRawPtr<SVGLength> length = create();
409 423
410 if (fromType == LengthTypePercentage || toType == LengthTypePercentage) { 424 if (fromType == LengthTypePercentage || toType == LengthTypePercentage) {
411 float fromPercent = from->valueAsPercentage100(); 425 float fromPercent = from->valueAsPercentage100();
412 float toPercent = valueAsPercentage100(); 426 float toPercent = valueAsPercentage100();
413 length->newValueSpecifiedUnits(LengthTypePercentage, blink::blend(fromPe rcent, toPercent, progress)); 427 length->newValueSpecifiedUnits(LengthTypePercentage, blink::blend(fromPe rcent, toPercent, progress));
414 return length; 428 return length;
415 } 429 }
416 430
417 if (fromType == toType || from->isZero() || isZero() || fromType == LengthTy peEMS || fromType == LengthTypeEXS) { 431 if (fromType == toType || from->isZero() || isZero() || fromType == LengthTy peEMS || fromType == LengthTypeEXS || fromType == LengthTypeREMS) {
418 float fromValue = from->valueInSpecifiedUnits(); 432 float fromValue = from->valueInSpecifiedUnits();
419 float toValue = valueInSpecifiedUnits(); 433 float toValue = valueInSpecifiedUnits();
420 if (isZero()) 434 if (isZero())
421 length->newValueSpecifiedUnits(fromType, blink::blend(fromValue, toV alue, progress)); 435 length->newValueSpecifiedUnits(fromType, blink::blend(fromValue, toV alue, progress));
422 else 436 else
423 length->newValueSpecifiedUnits(toType, blink::blend(fromValue, toVal ue, progress)); 437 length->newValueSpecifiedUnits(toType, blink::blend(fromValue, toVal ue, progress));
424 return length; 438 return length;
425 } 439 }
426 440
427 ASSERT(!isRelative()); 441 ASSERT(!isRelative());
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
459 473
460 float SVGLength::calculateDistance(PassRefPtrWillBeRawPtr<SVGPropertyBase> toVal ue, SVGElement* contextElement) 474 float SVGLength::calculateDistance(PassRefPtrWillBeRawPtr<SVGPropertyBase> toVal ue, SVGElement* contextElement)
461 { 475 {
462 SVGLengthContext lengthContext(contextElement); 476 SVGLengthContext lengthContext(contextElement);
463 RefPtrWillBeRawPtr<SVGLength> toLength = toSVGLength(toValue); 477 RefPtrWillBeRawPtr<SVGLength> toLength = toSVGLength(toValue);
464 478
465 return fabsf(toLength->value(lengthContext) - value(lengthContext)); 479 return fabsf(toLength->value(lengthContext) - value(lengthContext));
466 } 480 }
467 481
468 } 482 }
OLDNEW
« no previous file with comments | « Source/core/svg/SVGLength.h ('k') | Source/core/svg/SVGLengthContext.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698