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

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

Issue 112463008: Move core/platform/animation files (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Add comments and platform tests Created 6 years, 11 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 side-by-side diff with in-line comments
Download patch
Index: Source/core/platform/animation/TimingFunction.h
diff --git a/Source/core/platform/animation/TimingFunction.h b/Source/core/platform/animation/TimingFunction.h
deleted file mode 100644
index 147d86b390b94b7227a3df631d79b8bc23365e37..0000000000000000000000000000000000000000
--- a/Source/core/platform/animation/TimingFunction.h
+++ /dev/null
@@ -1,330 +0,0 @@
-/*
- * Copyright (C) 2000 Lars Knoll (knoll@kde.org)
- * (C) 2000 Antti Koivisto (koivisto@kde.org)
- * (C) 2000 Dirk Mueller (mueller@kde.org)
- * Copyright (C) 2003, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Graham Dennis (graham.dennis@gmail.com)
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB. If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- *
- */
-
-#ifndef TimingFunction_h
-#define TimingFunction_h
-
-#include "RuntimeEnabledFeatures.h"
-#include "platform/animation/AnimationUtilities.h" // For blend()
-#include "platform/animation/UnitBezier.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
-#include "wtf/PassRefPtr.h"
-#include "wtf/RefCounted.h"
-#include "wtf/StdLibExtras.h"
-#include "wtf/Vector.h"
-#include <algorithm>
-
-
-namespace WebCore {
-
-class TimingFunction : public RefCounted<TimingFunction> {
-public:
-
- enum Type {
- LinearFunction, CubicBezierFunction, StepsFunction, ChainedFunction
- };
-
- virtual ~TimingFunction() { }
-
- Type type() const { return m_type; }
-
- // 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;
-
-protected:
- TimingFunction(Type type)
- : m_type(type)
- {
- }
-
-private:
- Type m_type;
-};
-
-class LinearTimingFunction : public TimingFunction {
-public:
- static PassRefPtr<LinearTimingFunction> create()
- {
- return adoptRef(new LinearTimingFunction);
- }
-
- ~LinearTimingFunction() { }
-
- virtual double evaluate(double fraction, double) const
- {
- ASSERT(RuntimeEnabledFeatures::webAnimationsCSSEnabled() || (fraction >= 0 && fraction <= 1));
- ASSERT_WITH_MESSAGE(!RuntimeEnabledFeatures::webAnimationsCSSEnabled() || (fraction >= 0 && fraction <= 1), "Web Animations not yet implemented: Timing function behavior outside the range [0, 1] is not yet specified");
- return fraction;
- }
-
-private:
- LinearTimingFunction()
- : TimingFunction(LinearFunction)
- {
- }
-};
-
-
-// Forward declare so we can friend it below. Don't use in production code!
-class ChainedTimingFunctionTestHelper;
-
-class CubicBezierTimingFunction : public TimingFunction {
-public:
- enum SubType {
- Ease,
- EaseIn,
- EaseOut,
- EaseInOut,
- Custom
- };
-
- static PassRefPtr<CubicBezierTimingFunction> create(double x1, double y1, double x2, double y2)
- {
- return adoptRef(new CubicBezierTimingFunction(Custom, x1, y1, x2, y2));
- }
-
- static CubicBezierTimingFunction* preset(SubType subType)
- {
- switch (subType) {
- case Ease:
- {
- DEFINE_STATIC_REF(CubicBezierTimingFunction, ease, (adoptRef(new CubicBezierTimingFunction(Ease, 0.25, 0.1, 0.25, 1.0))));
- return ease;
- }
- case EaseIn:
- {
- DEFINE_STATIC_REF(CubicBezierTimingFunction, easeIn, (adoptRef(new CubicBezierTimingFunction(EaseIn, 0.42, 0.0, 1.0, 1.0))));
- return easeIn;
- }
- case EaseOut:
- {
- DEFINE_STATIC_REF(CubicBezierTimingFunction, easeOut, (adoptRef(new CubicBezierTimingFunction(EaseOut, 0.0, 0.0, 0.58, 1.0))));
- return easeOut;
- }
- case EaseInOut:
- {
- DEFINE_STATIC_REF(CubicBezierTimingFunction, easeInOut, (adoptRef(new CubicBezierTimingFunction(EaseInOut, 0.42, 0.0, 0.58, 1.0))));
- return easeInOut;
- }
- default:
- ASSERT_NOT_REACHED();
- return 0;
- }
- }
-
- ~CubicBezierTimingFunction() { }
-
- virtual double evaluate(double fraction, double accuracy) const
- {
- ASSERT(RuntimeEnabledFeatures::webAnimationsCSSEnabled() || (fraction >= 0 && fraction <= 1));
- ASSERT_WITH_MESSAGE(!RuntimeEnabledFeatures::webAnimationsCSSEnabled() || (fraction >= 0 && fraction <= 1), "Web Animations not yet implemented: Timing function behavior outside the range [0, 1] is not yet specified");
- if (!m_bezier)
- m_bezier = adoptPtr(new UnitBezier(m_x1, m_y1, m_x2, m_y2));
- return m_bezier->solve(fraction, accuracy);
- }
-
- double x1() const { return m_x1; }
- double y1() const { return m_y1; }
- double x2() const { return m_x2; }
- double y2() const { return m_y2; }
-
- SubType subType() const { return m_subType; }
-
-private:
- explicit CubicBezierTimingFunction(SubType subType, double x1, double y1, double x2, double y2)
- : TimingFunction(CubicBezierFunction)
- , m_x1(x1)
- , m_y1(y1)
- , m_x2(x2)
- , m_y2(y2)
- , m_subType(subType)
- {
- }
-
- double m_x1;
- double m_y1;
- double m_x2;
- double m_y2;
- SubType m_subType;
- mutable OwnPtr<UnitBezier> m_bezier;
-};
-
-class StepsTimingFunction : public TimingFunction {
-public:
- enum SubType {
- Start,
- End,
- Custom
- };
-
- static PassRefPtr<StepsTimingFunction> create(int steps, bool stepAtStart)
- {
- return adoptRef(new StepsTimingFunction(Custom, steps, stepAtStart));
- }
-
- static StepsTimingFunction* preset(SubType subType)
- {
- switch (subType) {
- case Start:
- {
- DEFINE_STATIC_REF(StepsTimingFunction, start, (adoptRef(new StepsTimingFunction(Start, 1, true))));
- return start;
- }
- case End:
- {
- DEFINE_STATIC_REF(StepsTimingFunction, end, (adoptRef(new StepsTimingFunction(End, 1, false))));
- return end;
- }
- default:
- ASSERT_NOT_REACHED();
- return 0;
- }
- }
-
-
- ~StepsTimingFunction() { }
-
- virtual double evaluate(double fraction, double) const
- {
- ASSERT(RuntimeEnabledFeatures::webAnimationsCSSEnabled() || (fraction >= 0 && fraction <= 1));
- ASSERT_WITH_MESSAGE(!RuntimeEnabledFeatures::webAnimationsCSSEnabled() || (fraction >= 0 && fraction <= 1), "Web Animations not yet implemented: Timing function behavior outside the range [0, 1] is not yet specified");
- return std::min(1.0, (floor(m_steps * fraction) + m_stepAtStart) / m_steps);
- }
-
- int numberOfSteps() const { return m_steps; }
- bool stepAtStart() const { return m_stepAtStart; }
-
- SubType subType() const { return m_subType; }
-
-private:
- StepsTimingFunction(SubType subType, int steps, bool stepAtStart)
- : TimingFunction(StepsFunction)
- , m_steps(steps)
- , m_stepAtStart(stepAtStart)
- , m_subType(subType)
- {
- }
-
- int m_steps;
- bool m_stepAtStart;
- SubType m_subType;
-};
-
-class ChainedTimingFunction : public TimingFunction {
-public:
- static PassRefPtr<ChainedTimingFunction> create()
- {
- return adoptRef(new ChainedTimingFunction);
- }
-
- void appendSegment(double upperBound, TimingFunction* timingFunction)
- {
- double max = m_segments.isEmpty() ? 0 : m_segments.last().max();
- ASSERT(upperBound > max);
- m_segments.append(Segment(max, upperBound, timingFunction));
- }
- virtual double evaluate(double fraction, double accuracy) const
- {
- ASSERT_WITH_MESSAGE(fraction >= 0 && fraction <= 1, "Web Animations not yet implemented: Timing function behavior outside the range [0, 1] is not yet specified");
- ASSERT(!m_segments.isEmpty());
- ASSERT(m_segments.last().max() == 1);
- size_t i = 0;
- const Segment* segment = &m_segments[i++];
- while (fraction >= segment->max() && i < m_segments.size()) {
- segment = &m_segments[i++];
- }
- return segment->evaluate(fraction, accuracy);
- }
-
-private:
- class Segment {
- public:
- Segment(double min, double max, TimingFunction* timingFunction)
- : m_min(min)
- , m_max(max)
- , m_timingFunction(timingFunction)
- { ASSERT(timingFunction); }
-
- double max() const { return m_max; }
- double evaluate(double fraction, double accuracy) const
- {
- return scaleFromLocal(m_timingFunction->evaluate(scaleToLocal(fraction), accuracy));
- }
-
- private:
- double scaleToLocal(double x) const { return (x - m_min) / (m_max - m_min); }
- double scaleFromLocal(double x) const { return blend(m_min, m_max, x); }
-
- double m_min;
- double m_max;
- RefPtr<TimingFunction> m_timingFunction;
-
- // FIXME: Come up with a public API for the segments and remove this.
- friend class CompositorAnimationsImpl;
- friend class CompositorAnimations;
-
- // Allow the compositor to reverse the timing function.
- friend class CompositorAnimationsTimingFunctionReverser;
-
- // Allow PrintTo/operator== of the segments. Can be removed once
- // ChainedTimingFunction has a public API for segments.
- friend class ChainedTimingFunctionTestHelper;
- };
-
- ChainedTimingFunction()
- : TimingFunction(ChainedFunction)
- {
- ASSERT(RuntimeEnabledFeatures::webAnimationsCSSEnabled());
- }
-
- Vector<Segment> m_segments;
-
- // FIXME: Come up with a public API for the segments and remove this.
- friend class CompositorAnimationsImpl;
- friend class CompositorAnimations;
-
- // Allow the compositor to reverse the timing function.
- friend class CompositorAnimationsTimingFunctionReverser;
-
- // Allow PrintTo/operator== of the segments. Can be removed once
- // ChainedTimingFunction has a public API for segments.
- friend class ChainedTimingFunctionTestHelper;
-};
-
-#define DEFINE_TIMING_FUNCTION_TYPE_CASTS(typeName) \
- DEFINE_TYPE_CASTS( \
- typeName##TimingFunction, TimingFunction, value, \
- value->type() == TimingFunction::typeName##Function, \
- value.type() == TimingFunction::typeName##Function)
-
-DEFINE_TIMING_FUNCTION_TYPE_CASTS(Linear);
-DEFINE_TIMING_FUNCTION_TYPE_CASTS(CubicBezier);
-DEFINE_TIMING_FUNCTION_TYPE_CASTS(Steps);
-DEFINE_TIMING_FUNCTION_TYPE_CASTS(Chained);
-
-} // namespace WebCore
-
-#endif // TimingFunction_h
« no previous file with comments | « Source/core/platform/animation/KeyframeValueList.cpp ('k') | Source/core/platform/animation/TimingFunctionTestHelper.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698