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

Unified Diff: Source/core/platform/animation/TimingFunction.h

Issue 54743002: Adding a reverse function to the TimingFunctions and tests to prove it works. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@timing-function-helper
Patch Set: Moved operator== stuff into own patch. Created 7 years, 1 month 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | Source/core/platform/animation/TimingFunctionTest.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/platform/animation/TimingFunction.h
diff --git a/Source/core/platform/animation/TimingFunction.h b/Source/core/platform/animation/TimingFunction.h
index c0c478cfa15cb182f375c7dd71229d6aea38bf40..829c62a4c17afb8028ebf86caf6a70c08d9e25d2 100644
--- a/Source/core/platform/animation/TimingFunction.h
+++ b/Source/core/platform/animation/TimingFunction.h
@@ -54,6 +54,8 @@ public:
virtual bool operator==(const TimingFunction& other) const = 0;
virtual bool operator!=(const TimingFunction& other) const { return !operator==(other); }
+ virtual PassRefPtr<TimingFunction> reverse() const = 0;
+
protected:
TimingFunction(Type type)
: m_type(type)
@@ -85,6 +87,11 @@ public:
return other.type() == LinearFunction;
}
+ virtual PassRefPtr<TimingFunction> reverse() const
+ {
+ return const_cast<LinearTimingFunction*>(this);
+ }
+
private:
LinearTimingFunction()
: TimingFunction(LinearFunction)
@@ -184,6 +191,26 @@ public:
SubType subType() const { return m_subType; }
+ virtual PassRefPtr<TimingFunction> reverse() const
+ {
+ switch (m_subType) {
+ case Ease:
+ return const_cast<CubicBezierTimingFunction*>(this);
+ case EaseIn:
+ return preset(EaseOut);
+ case EaseOut:
+ return preset(EaseIn);
+ case EaseInOut:
+ return const_cast<CubicBezierTimingFunction*>(this);
+ case Custom:
+ // Flip the timing function in x. We also have to flip it in y to
+ // maintain the invariant that it runs from (0, 0) to (1, 1).
+ return create(1 - m_x2, 1 - m_y2, 1 - m_x1, 1 - m_y1);
+ default:
+ ASSERT_NOT_REACHED();
+ }
+ }
+
private:
explicit CubicBezierTimingFunction(SubType subType, double x1, double y1, double x2, double y2)
: TimingFunction(CubicBezierFunction)
@@ -269,6 +296,21 @@ public:
SubType subType() const { return m_subType; }
+ virtual PassRefPtr<TimingFunction> reverse() const
+ {
+ switch (m_subType) {
+ case Start:
+ return preset(End);
+ case End:
+ return preset(Start);
+ case Custom:
+ return create(m_steps, !m_stepAtStart);
+ default:
+ ASSERT_NOT_REACHED();
+ return 0;
+ }
+ }
+
private:
StepsTimingFunction(SubType subType, int steps, bool stepAtStart)
: TimingFunction(StepsFunction)
@@ -329,6 +371,17 @@ public:
return true;
}
+ virtual PassRefPtr<TimingFunction> reverse() const
+ {
+ RefPtr<ChainedTimingFunction> reversed = create();
+ for (size_t i = 0; i < m_segments.size(); i++) {
+ size_t index = m_segments.size() - i - 1;
+
+ reversed->appendSegment(1 - m_segments[index].m_min, m_segments[index].m_timingFunction->reverse().get());
+ }
+ return reversed;
+ }
+
private:
class Segment {
public:
« no previous file with comments | « no previous file | Source/core/platform/animation/TimingFunctionTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698