1 // Copyright 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CC_ANIMATION_SCROLL_OFFSET_ANIMATION_CURVE_H_ 6 #define CC_ANIMATION_SCROLL_OFFSET_ANIMATION_CURVE_H_ 7 8 #include "base/memory/scoped_ptr.h" 9 #include "base/time/time.h" 10 #include "cc/animation/animation_curve.h" 11 #include "cc/base/cc_export.h" 12 13 namespace cc { 14 15 class TimingFunction; 16 17 class CC_EXPORT ScrollOffsetAnimationCurve : public AnimationCurve { 18 public: 19 static scoped_ptr<ScrollOffsetAnimationCurve> Create( 20 const gfx::Vector2dF& target_value, 21 scoped_ptr<TimingFunction> timing_function); 22 23 virtual ~ScrollOffsetAnimationCurve(); 24 25 void SetInitialValue(const gfx::Vector2dF& initial_value); 26 gfx::Vector2dF GetValue(double t) const; 27 gfx::Vector2dF target_value() const { return target_value_; } 28 void UpdateTarget(double t, const gfx::Vector2dF& new_target); 29 30 // AnimationCurve implementation 31 virtual double Duration() const OVERRIDE; 32 virtual CurveType Type() const OVERRIDE; 33 virtual scoped_ptr<AnimationCurve> Clone() const OVERRIDE; 34 35 private: 36 ScrollOffsetAnimationCurve(const gfx::Vector2dF& target_value, 37 scoped_ptr <TimingFunction> timing_function); 38 39 gfx::Vector2dF initial_value_; 40 gfx::Vector2dF target_value_; 41 base::TimeDelta total_animation_duration_; 42 43 // Time from animation start to most recent UpdateTarget. 44 base::TimeDelta last_retarget_; 45 46 scoped_ptr<TimingFunction> timing_function_; 47 48 DISALLOW_COPY_AND_ASSIGN(ScrollOffsetAnimationCurve); 49 }; 50 51 } // namespace cc 52 53 #endif // CC_ANIMATION_SCROLL_OFFSET_ANIMATION_CURVE_H_ 54