Chromium Code Reviews| Index: Source/platform/animation/TimingFunction.h |
| diff --git a/Source/platform/animation/TimingFunction.h b/Source/platform/animation/TimingFunction.h |
| index 1187ea92f69b811496dbed32c149117ef8fe0f16..dc1bd98465d493b6e2632f451d6da087de3f4c31 100644 |
| --- a/Source/platform/animation/TimingFunction.h |
| +++ b/Source/platform/animation/TimingFunction.h |
| @@ -34,6 +34,8 @@ |
| #include "wtf/RefCounted.h" |
| #include "wtf/StdLibExtras.h" |
| #include "wtf/Vector.h" |
| +#include "wtf/text/StringBuilder.h" |
| +#include "wtf/text/WTFString.h" |
| #include <algorithm> |
| @@ -50,6 +52,8 @@ public: |
| Type type() const { return m_type; } |
| + virtual String toString() const { return ""; } |
|
abarth-chromium
2014/02/13 03:09:38
Please move virtual functions out of line.
|
| + |
| // Evaluates the timing function at the given fraction. The accuracy parameter provides a hint as to the required |
| // accuracy and is not guaranteed. |
| virtual double evaluate(double fraction, double accuracy) const = 0; |
| @@ -73,6 +77,8 @@ public: |
| virtual ~LinearTimingFunction() { } |
| + virtual String toString() const OVERRIDE { return "linear"; } |
|
abarth-chromium
2014/02/13 03:09:38
ditto
|
| + |
| virtual double evaluate(double fraction, double) const OVERRIDE |
| { |
| ASSERT(RuntimeEnabledFeatures::webAnimationsCSSEnabled() || (fraction >= 0 && fraction <= 1)); |
| @@ -87,7 +93,6 @@ private: |
| } |
| }; |
| - |
| // Forward declare so we can friend it below. Don't use in production code! |
| class ChainedTimingFunctionTestHelper; |
| @@ -137,6 +142,32 @@ public: |
| virtual ~CubicBezierTimingFunction() { } |
| + virtual String toString() const OVERRIDE |
| + { |
| + switch (this->subType()) { |
| + case CubicBezierTimingFunction::Ease: |
| + return "ease"; |
| + break; |
| + case CubicBezierTimingFunction::EaseIn: |
| + return "ease-in"; |
| + break; |
| + case CubicBezierTimingFunction::EaseOut: |
| + return "ease-out"; |
| + break; |
| + case CubicBezierTimingFunction::EaseInOut: |
| + return "ease-in-out"; |
| + break; |
| + case CubicBezierTimingFunction::Custom: |
| + return "cubic-bezier(" + String::numberToStringECMAScript(this->x1()) + ", " + |
| + String::numberToStringECMAScript(this->y1()) + ", " + String::numberToStringECMAScript(this->x2()) + |
| + ", " + String::numberToStringECMAScript(this->y2()) + ")"; |
| + break; |
| + default: |
| + ASSERT_NOT_REACHED(); |
| + } |
| + return ""; |
| + } |
| + |
| virtual double evaluate(double fraction, double accuracy) const OVERRIDE |
| { |
| ASSERT(RuntimeEnabledFeatures::webAnimationsCSSEnabled() || (fraction >= 0 && fraction <= 1)); |
| @@ -207,6 +238,27 @@ public: |
| virtual ~StepsTimingFunction() { } |
| + virtual String toString() const OVERRIDE |
| + { |
| + StringBuilder builder; |
| + switch (this->subType()) { |
| + case StepsTimingFunction::Start: |
| + return "step-start"; |
| + break; |
| + case StepsTimingFunction::End: |
| + return "step-end"; |
| + break; |
| + case StepsTimingFunction::Custom: |
| + builder.append("steps(" + String::numberToStringECMAScript(this->numberOfSteps()) + ", "); |
| + builder.append(this->stepAtStart() ? "start" : "end"); |
| + builder.append(")"); |
| + break; |
| + default: |
| + ASSERT_NOT_REACHED(); |
| + } |
| + return builder.toString(); |
| + } |
| + |
| virtual double evaluate(double fraction, double) const OVERRIDE |
| { |
| ASSERT(RuntimeEnabledFeatures::webAnimationsCSSEnabled() || (fraction >= 0 && fraction <= 1)); |
| @@ -246,6 +298,23 @@ public: |
| ASSERT(upperBound > max); |
| m_segments.append(Segment(max, upperBound, timingFunction)); |
| } |
| + |
| + virtual String toString() const OVERRIDE |
| + { |
| + StringBuilder builder; |
| + builder.append("chained("); |
| + for (size_t i = 0; i < this->m_segments.size(); i++) { |
| + ChainedTimingFunction::Segment segment = this->m_segments[i]; |
| + builder.append(segment.m_timingFunction->toString()); |
| + builder.append("[" + String::numberToStringECMAScript(segment.m_min) + " -> " + String::numberToStringECMAScript(segment.m_max) + "]"); |
| + if (i+1 != this->m_segments.size()) { |
| + builder.append(", "); |
| + } |
| + } |
| + builder.append(")"); |
| + return builder.toString(); |
| + } |
| + |
| virtual double evaluate(double fraction, double accuracy) const OVERRIDE |
| { |
| ASSERT_WITH_MESSAGE(fraction >= 0 && fraction <= 1, "Web Animations not yet implemented: Timing function behavior outside the range [0, 1] is not yet specified"); |
| @@ -292,6 +361,7 @@ private: |
| // Allow PrintTo/operator== of the segments. Can be removed once |
| // ChainedTimingFunction has a public API for segments. |
| friend class ChainedTimingFunctionTestHelper; |
| + friend class ChainedTimingFunction; |
| }; |
| ChainedTimingFunction() |