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

Side by Side Diff: Source/WebCore/svg/SVGAnimationElement.cpp

Issue 12310030: Merge 142365 (Closed) Base URL: http://svn.webkit.org/repository/webkit/branches/chromium/1364/
Patch Set: Created 7 years, 10 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 | « LayoutTests/svg/animations/animate-keytimes-crash-expected.html ('k') | no next file » | 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 Nikolas Zimmermann <zimmermann@kde.org> 2 * Copyright (C) 2004, 2005 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 Eric Seidel <eric@webkit.org> 4 * Copyright (C) 2007 Eric Seidel <eric@webkit.org>
5 * Copyright (C) 2008 Apple Inc. All rights reserved. 5 * Copyright (C) 2008 Apple Inc. All rights reserved.
6 * Copyright (C) 2009 Cameron McCormack <cam@mcc.id.au> 6 * Copyright (C) 2009 Cameron McCormack <cam@mcc.id.au>
7 * Copyright (C) Research In Motion Limited 2010. All rights reserved. 7 * Copyright (C) Research In Motion Limited 2010. All rights reserved.
8 * 8 *
9 * This library is free software; you can redistribute it and/or 9 * This library is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Library General Public 10 * modify it under the terms of the GNU Library General Public
(...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after
378 378
379 void SVGAnimationElement::calculateKeyTimesForCalcModePaced() 379 void SVGAnimationElement::calculateKeyTimesForCalcModePaced()
380 { 380 {
381 ASSERT(calcMode() == CalcModePaced); 381 ASSERT(calcMode() == CalcModePaced);
382 ASSERT(animationMode() == ValuesAnimation); 382 ASSERT(animationMode() == ValuesAnimation);
383 383
384 unsigned valuesCount = m_values.size(); 384 unsigned valuesCount = m_values.size();
385 ASSERT(valuesCount >= 1); 385 ASSERT(valuesCount >= 1);
386 if (valuesCount == 1) 386 if (valuesCount == 1)
387 return; 387 return;
388
389 // FIXME, webkit.org/b/109010: m_keyTimes should not be modified in this fun ction.
390 m_keyTimes.clear();
391
388 Vector<float> keyTimesForPaced; 392 Vector<float> keyTimesForPaced;
389 float totalDistance = 0; 393 float totalDistance = 0;
390 keyTimesForPaced.append(0); 394 keyTimesForPaced.append(0);
391 for (unsigned n = 0; n < valuesCount - 1; ++n) { 395 for (unsigned n = 0; n < valuesCount - 1; ++n) {
392 // Distance in any units 396 // Distance in any units
393 float distance = calculateDistance(m_values[n], m_values[n + 1]); 397 float distance = calculateDistance(m_values[n], m_values[n + 1]);
394 if (distance < 0) 398 if (distance < 0)
395 return; 399 return;
396 totalDistance += distance; 400 totalDistance += distance;
397 keyTimesForPaced.append(distance); 401 keyTimesForPaced.append(distance);
398 } 402 }
399 if (!totalDistance) 403 if (!totalDistance)
400 return; 404 return;
401 405
402 // Normalize. 406 // Normalize.
403 for (unsigned n = 1; n < keyTimesForPaced.size() - 1; ++n) 407 for (unsigned n = 1; n < keyTimesForPaced.size() - 1; ++n)
404 keyTimesForPaced[n] = keyTimesForPaced[n - 1] + keyTimesForPaced[n] / to talDistance; 408 keyTimesForPaced[n] = keyTimesForPaced[n - 1] + keyTimesForPaced[n] / to talDistance;
405 keyTimesForPaced[keyTimesForPaced.size() - 1] = 1; 409 keyTimesForPaced[keyTimesForPaced.size() - 1] = 1;
406 410
407 // Use key times calculated based on pacing instead of the user provided one s. 411 // Use key times calculated based on pacing instead of the user provided one s.
408 m_keyTimes.swap(keyTimesForPaced); 412 m_keyTimes = keyTimesForPaced;
409 } 413 }
410 414
411 static inline double solveEpsilon(double duration) { return 1 / (200 * duration) ; } 415 static inline double solveEpsilon(double duration) { return 1 / (200 * duration) ; }
412 416
413 unsigned SVGAnimationElement::calculateKeyTimesIndex(float percent) const 417 unsigned SVGAnimationElement::calculateKeyTimesIndex(float percent) const
414 { 418 {
415 unsigned index; 419 unsigned index;
416 unsigned keyTimesCount = m_keyTimes.size(); 420 unsigned keyTimesCount = m_keyTimes.size();
417 // Compare index + 1 to keyTimesCount because the last keyTimes entry is 421 // Compare index + 1 to keyTimesCount because the last keyTimes entry is
418 // required to be 1, and percent can never exceed 1; i.e., the second last 422 // required to be 1, and percent can never exceed 1; i.e., the second last
(...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after
690 } 694 }
691 695
692 void SVGAnimationElement::checkInvalidCSSAttributeType(SVGElement* target) 696 void SVGAnimationElement::checkInvalidCSSAttributeType(SVGElement* target)
693 { 697 {
694 m_hasInvalidCSSAttributeType = target && hasValidAttributeName() && attribut eType() == AttributeTypeCSS && !isTargetAttributeCSSProperty(target, attributeNa me()); 698 m_hasInvalidCSSAttributeType = target && hasValidAttributeName() && attribut eType() == AttributeTypeCSS && !isTargetAttributeCSSProperty(target, attributeNa me());
695 } 699 }
696 700
697 } 701 }
698 702
699 #endif // ENABLE(SVG) 703 #endif // ENABLE(SVG)
OLDNEW
« no previous file with comments | « LayoutTests/svg/animations/animate-keytimes-crash-expected.html ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698