12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef CC_ANIMATION_KEYFRAMED_ANIMATION_CURVE_H_ 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define CC_ANIMATION_KEYFRAMED_ANIMATION_CURVE_H_ 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/animation/animation_curve.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/animation/timing_function.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/animation/transform_operations.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/base/cc_export.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/base/scoped_ptr_vector.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace cc { 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class CC_EXPORT Keyframe { 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) double Time() const; 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const TimingFunction* timing_function() const { 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return timing_function_.get(); 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Keyframe(double time, scoped_ptr<TimingFunction> timing_function); 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~Keyframe(); 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) double time_; 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<TimingFunction> timing_function_; 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(Keyframe); 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)class CC_EXPORT ColorKeyframe : public Keyframe { 351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) public: 361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) static scoped_ptr<ColorKeyframe> Create( 371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) double time, 381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SkColor value, 391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) scoped_ptr<TimingFunction> timing_function); 401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual ~ColorKeyframe(); 411e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 421e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SkColor Value() const; 431e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) scoped_ptr<ColorKeyframe> Clone() const; 451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) private: 471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ColorKeyframe(double time, 481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SkColor value, 491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) scoped_ptr<TimingFunction> timing_function); 501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SkColor value_; 521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}; 531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class CC_EXPORT FloatKeyframe : public Keyframe { 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static scoped_ptr<FloatKeyframe> Create( 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) double time, 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) float value, 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<TimingFunction> timing_function); 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~FloatKeyframe(); 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) float Value() const; 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<FloatKeyframe> Clone() const; 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FloatKeyframe(double time, 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) float value, 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<TimingFunction> timing_function); 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) float value_; 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class CC_EXPORT TransformKeyframe : public Keyframe { 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static scoped_ptr<TransformKeyframe> Create( 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) double time, 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const TransformOperations& value, 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<TimingFunction> timing_function); 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~TransformKeyframe(); 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const TransformOperations& Value() const; 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<TransformKeyframe> Clone() const; 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TransformKeyframe( 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) double time, 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const TransformOperations& value, 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<TimingFunction> timing_function); 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TransformOperations value_; 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 95ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochclass CC_EXPORT FilterKeyframe : public Keyframe { 96ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch public: 97ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch static scoped_ptr<FilterKeyframe> Create( 98ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch double time, 99ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const FilterOperations& value, 100ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch scoped_ptr<TimingFunction> timing_function); 101ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch virtual ~FilterKeyframe(); 102ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 103ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const FilterOperations& Value() const; 104ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 105ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch scoped_ptr<FilterKeyframe> Clone() const; 106ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 107ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch private: 108ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch FilterKeyframe( 109ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch double time, 110ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const FilterOperations& value, 111ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch scoped_ptr<TimingFunction> timing_function); 112ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 113ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch FilterOperations value_; 114ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch}; 115ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 1161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)class CC_EXPORT KeyframedColorAnimationCurve : public ColorAnimationCurve { 1171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) public: 1181e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // It is required that the keyframes be sorted by time. 1191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) static scoped_ptr<KeyframedColorAnimationCurve> Create(); 1201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 1211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual ~KeyframedColorAnimationCurve(); 1221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 1231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) void AddKeyframe(scoped_ptr<ColorKeyframe> keyframe); 1241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 1251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // AnimationCurve implementation 1261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual double Duration() const OVERRIDE; 1271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual scoped_ptr<AnimationCurve> Clone() const OVERRIDE; 1281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 1291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // BackgrounColorAnimationCurve implementation 1301e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual SkColor GetValue(double t) const OVERRIDE; 1311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 1321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) private: 1331e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) KeyframedColorAnimationCurve(); 1341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 1351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Always sorted in order of increasing time. No two keyframes have the 1361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // same time. 1371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ScopedPtrVector<ColorKeyframe> keyframes_; 1381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 1391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(KeyframedColorAnimationCurve); 1401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}; 1411e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class CC_EXPORT KeyframedFloatAnimationCurve : public FloatAnimationCurve { 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // It is required that the keyframes be sorted by time. 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static scoped_ptr<KeyframedFloatAnimationCurve> Create(); 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~KeyframedFloatAnimationCurve(); 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void AddKeyframe(scoped_ptr<FloatKeyframe> keyframe); 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // AnimationCurve implementation 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual double Duration() const OVERRIDE; 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual scoped_ptr<AnimationCurve> Clone() const OVERRIDE; 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // FloatAnimationCurve implementation 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual float GetValue(double t) const OVERRIDE; 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) KeyframedFloatAnimationCurve(); 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Always sorted in order of increasing time. No two keyframes have the 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // same time. 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedPtrVector<FloatKeyframe> keyframes_; 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(KeyframedFloatAnimationCurve); 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class CC_EXPORT KeyframedTransformAnimationCurve 169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) : public TransformAnimationCurve { 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // It is required that the keyframes be sorted by time. 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static scoped_ptr<KeyframedTransformAnimationCurve> Create(); 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~KeyframedTransformAnimationCurve(); 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void AddKeyframe(scoped_ptr<TransformKeyframe> keyframe); 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // AnimationCurve implementation 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual double Duration() const OVERRIDE; 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual scoped_ptr<AnimationCurve> Clone() const OVERRIDE; 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // TransformAnimationCurve implementation 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual gfx::Transform GetValue(double t) const OVERRIDE; 1843551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual bool AnimatedBoundsForBox(const gfx::BoxF& box, 1853551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) gfx::BoxF* bounds) const OVERRIDE; 186e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch virtual bool AffectsScale() const OVERRIDE; 187c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual bool IsTranslation() const OVERRIDE; 1881675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch virtual bool MaximumTargetScale(bool forward_direction, 1891675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch float* max_scale) const OVERRIDE; 1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) KeyframedTransformAnimationCurve(); 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Always sorted in order of increasing time. No two keyframes have the 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // same time. 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedPtrVector<TransformKeyframe> keyframes_; 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(KeyframedTransformAnimationCurve); 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 201ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochclass CC_EXPORT KeyframedFilterAnimationCurve 202ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch : public FilterAnimationCurve { 203ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch public: 204ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // It is required that the keyframes be sorted by time. 205ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch static scoped_ptr<KeyframedFilterAnimationCurve> Create(); 206ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 207ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch virtual ~KeyframedFilterAnimationCurve(); 208ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 209ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch void AddKeyframe(scoped_ptr<FilterKeyframe> keyframe); 210ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 211ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // AnimationCurve implementation 212ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch virtual double Duration() const OVERRIDE; 213ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch virtual scoped_ptr<AnimationCurve> Clone() const OVERRIDE; 214ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 215ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // FilterAnimationCurve implementation 216ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch virtual FilterOperations GetValue(double t) const OVERRIDE; 2175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual bool HasFilterThatMovesPixels() const OVERRIDE; 218ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 219ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch private: 220ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch KeyframedFilterAnimationCurve(); 221ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 222ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // Always sorted in order of increasing time. No two keyframes have the 223ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // same time. 224ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch ScopedPtrVector<FilterKeyframe> keyframes_; 225ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 226ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch DISALLOW_COPY_AND_ASSIGN(KeyframedFilterAnimationCurve); 227ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch}; 228ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace cc 2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // CC_ANIMATION_KEYFRAMED_ANIMATION_CURVE_H_ 232