15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2000 Lars Knoll (knoll@kde.org) 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (C) 2000 Antti Koivisto (koivisto@kde.org) 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (C) 2000 Dirk Mueller (mueller@kde.org) 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2003, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2006 Graham Dennis (graham.dennis@gmail.com) 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * This library is free software; you can redistribute it and/or 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modify it under the terms of the GNU Library General Public 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * License as published by the Free Software Foundation; either 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * version 2 of the License, or (at your option) any later version. 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * This library is distributed in the hope that it will be useful, 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * but WITHOUT ANY WARRANTY; without even the implied warranty of 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Library General Public License for more details. 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * You should have received a copy of the GNU Library General Public License 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * along with this library; see the file COPYING.LIB. If not, write to 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Boston, MA 02110-1301, USA. 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef TimingFunction_h 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define TimingFunction_h 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 28bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)#include "platform/animation/AnimationUtilities.h" // For blend() 291e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/animation/UnitBezier.h" 308abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)#include "wtf/OwnPtr.h" 318abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)#include "wtf/PassOwnPtr.h" 3293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)#include "wtf/PassRefPtr.h" 3393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)#include "wtf/RefCounted.h" 3451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "wtf/StdLibExtras.h" 3509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "wtf/text/StringBuilder.h" 3609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "wtf/text/WTFString.h" 3793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)#include <algorithm> 385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 39c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink { 405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)class PLATFORM_EXPORT TimingFunction : public RefCounted<TimingFunction> { 425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public: 435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 448abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) enum Type { 45d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) LinearFunction, CubicBezierFunction, StepsFunction 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 4702772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual ~TimingFunction() { } 495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 508abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) Type type() const { return m_type; } 5102772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 5209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual String toString() const = 0; 5309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 5493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) // Evaluates the timing function at the given fraction. The accuracy parameter provides a hint as to the required 5593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) // accuracy and is not guaranteed. 56d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) virtual double evaluate(double fraction, double accuracy) const = 0; 575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 58197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch // This function returns the minimum and maximum values obtainable when 59197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch // calling evaluate(); 60197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch virtual void range(double* minValue, double* maxValue) const = 0; 61197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)protected: 638abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) TimingFunction(Type type) 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) : m_type(type) 655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 6702772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 688abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)private: 698abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) Type m_type; 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)class PLATFORM_EXPORT LinearTimingFunction FINAL : public TimingFunction { 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public: 74f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu static LinearTimingFunction* shared() 755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 76d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) DEFINE_STATIC_REF(LinearTimingFunction, linear, (adoptRef(new LinearTimingFunction()))); 77d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return linear; 785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 7902772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 8009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual ~LinearTimingFunction() { } 8102772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 8209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual String toString() const OVERRIDE; 8309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 8409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual double evaluate(double fraction, double) const OVERRIDE; 8593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 86197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch virtual void range(double* minValue, double* maxValue) const OVERRIDE; 875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private: 885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LinearTimingFunction() 895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) : TimingFunction(LinearFunction) 905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 9302772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 9409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)class PLATFORM_EXPORT CubicBezierTimingFunction FINAL : public TimingFunction { 955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public: 968abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) enum SubType { 97926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) Ease, 98926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) EaseIn, 99926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) EaseOut, 100926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) EaseInOut, 101926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) Custom 102926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }; 10302772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) static PassRefPtr<CubicBezierTimingFunction> create(double x1, double y1, double x2, double y2) 1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 106926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return adoptRef(new CubicBezierTimingFunction(Custom, x1, y1, x2, y2)); 1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1098abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) static CubicBezierTimingFunction* preset(SubType subType) 1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1118abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) switch (subType) { 112926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case Ease: 11393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) { 11451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) DEFINE_STATIC_REF(CubicBezierTimingFunction, ease, (adoptRef(new CubicBezierTimingFunction(Ease, 0.25, 0.1, 0.25, 1.0)))); 11593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) return ease; 11693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) } 117926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case EaseIn: 11893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) { 11951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) DEFINE_STATIC_REF(CubicBezierTimingFunction, easeIn, (adoptRef(new CubicBezierTimingFunction(EaseIn, 0.42, 0.0, 1.0, 1.0)))); 12093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) return easeIn; 12193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) } 122926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case EaseOut: 12393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) { 12451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) DEFINE_STATIC_REF(CubicBezierTimingFunction, easeOut, (adoptRef(new CubicBezierTimingFunction(EaseOut, 0.0, 0.0, 0.58, 1.0)))); 12593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) return easeOut; 12693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) } 127926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case EaseInOut: 12893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) { 12951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) DEFINE_STATIC_REF(CubicBezierTimingFunction, easeInOut, (adoptRef(new CubicBezierTimingFunction(EaseInOut, 0.42, 0.0, 0.58, 1.0)))); 13093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) return easeInOut; 13193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) } 132926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) default: 133926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ASSERT_NOT_REACHED(); 134926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return 0; 135926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 136926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual ~CubicBezierTimingFunction() { } 13993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 14009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual String toString() const OVERRIDE; 14109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 14209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual double evaluate(double fraction, double accuracy) const OVERRIDE; 143197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch virtual void range(double* minValue, double* maxValue) const OVERRIDE; 14493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) double x1() const { return m_x1; } 1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) double y1() const { return m_y1; } 1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) double x2() const { return m_x2; } 1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) double y2() const { return m_y2; } 14993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 1508abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) SubType subType() const { return m_subType; } 15193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private: 1538abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) explicit CubicBezierTimingFunction(SubType subType, double x1, double y1, double x2, double y2) 1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) : TimingFunction(CubicBezierFunction) 1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_x1(x1) 1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_y1(y1) 1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_x2(x2) 1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_y2(y2) 1598abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) , m_subType(subType) 1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) double m_x1; 1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) double m_y1; 1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) double m_x2; 1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) double m_y2; 1678abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) SubType m_subType; 1688abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) mutable OwnPtr<UnitBezier> m_bezier; 1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 17109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)class PLATFORM_EXPORT StepsTimingFunction FINAL : public TimingFunction { 1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public: 1737242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci enum StepAtPosition { 1748abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) Start, 175d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) Middle, 1767242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci End 177d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) }; 178d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 179d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) static PassRefPtr<StepsTimingFunction> create(int steps, StepAtPosition stepAtPosition) 1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1817242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return adoptRef(new StepsTimingFunction(steps, stepAtPosition)); 1828abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) } 1838abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) 1847242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci static StepsTimingFunction* preset(StepAtPosition position) 1858abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) { 1867242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci DEFINE_STATIC_REF(StepsTimingFunction, start, create(1, Start)); 1877242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci DEFINE_STATIC_REF(StepsTimingFunction, middle, create(1, Middle)); 1887242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci DEFINE_STATIC_REF(StepsTimingFunction, end, create(1, End)); 1897242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci switch (position) { 1908abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) case Start: 1917242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return start; 192d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) case Middle: 1937242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return middle; 1948abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) case End: 1957242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return end; 1968abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) default: 1978abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) ASSERT_NOT_REACHED(); 1987242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return end; 1998abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) } 2005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 20102772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 2028abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) 20309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual ~StepsTimingFunction() { } 20493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 20509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual String toString() const OVERRIDE; 20609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 20709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual double evaluate(double fraction, double) const OVERRIDE; 20893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 209197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch virtual void range(double* minValue, double* maxValue) const OVERRIDE; 2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int numberOfSteps() const { return m_steps; } 211d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) StepAtPosition stepAtPosition() const { return m_stepAtPosition; } 21202772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private: 2147242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci StepsTimingFunction(int steps, StepAtPosition stepAtPosition) 2155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) : TimingFunction(StepsFunction) 2165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_steps(steps) 217d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) , m_stepAtPosition(stepAtPosition) 2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 22002772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 2215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int m_steps; 222d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) StepAtPosition m_stepAtPosition; 2235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 22402772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 225d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)PLATFORM_EXPORT bool operator==(const LinearTimingFunction&, const TimingFunction&); 226d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)PLATFORM_EXPORT bool operator==(const CubicBezierTimingFunction&, const TimingFunction&); 227d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)PLATFORM_EXPORT bool operator==(const StepsTimingFunction&, const TimingFunction&); 2289bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) 229d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)PLATFORM_EXPORT bool operator==(const TimingFunction&, const TimingFunction&); 230d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)PLATFORM_EXPORT bool operator!=(const TimingFunction&, const TimingFunction&); 2319bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) 23251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#define DEFINE_TIMING_FUNCTION_TYPE_CASTS(typeName) \ 23351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) DEFINE_TYPE_CASTS( \ 23451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) typeName##TimingFunction, TimingFunction, value, \ 23551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) value->type() == TimingFunction::typeName##Function, \ 23651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) value.type() == TimingFunction::typeName##Function) 23751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 23851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)DEFINE_TIMING_FUNCTION_TYPE_CASTS(Linear); 23951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)DEFINE_TIMING_FUNCTION_TYPE_CASTS(CubicBezier); 24051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)DEFINE_TIMING_FUNCTION_TYPE_CASTS(Steps); 24151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 242c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink 2435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif // TimingFunction_h 245