1 // Copyright (c) 2012 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 WEBKIT_CHILD_FLING_ANIMATOR_IMPL_ANDROID_H_ 6 #define WEBKIT_CHILD_FLING_ANIMATOR_IMPL_ANDROID_H_ 7 8 #include "base/android/scoped_java_ref.h" 9 #include "third_party/WebKit/public/platform/WebFloatPoint.h" 10 #include "third_party/WebKit/public/platform/WebGestureCurve.h" 11 #include "third_party/WebKit/public/platform/WebSize.h" 12 #include "ui/gfx/point.h" 13 #include "ui/gfx/point_f.h" 14 #include "webkit/child/webkit_child_export.h" 15 16 namespace blink { 17 class WebGestureCurveTarget; 18 } 19 20 namespace webkit_glue { 21 22 class WEBKIT_CHILD_EXPORT FlingAnimatorImpl : public blink::WebGestureCurve { 23 public: 24 FlingAnimatorImpl(); 25 virtual ~FlingAnimatorImpl(); 26 27 static FlingAnimatorImpl* CreateAndroidGestureCurve( 28 const blink::WebFloatPoint& velocity, 29 const blink::WebSize&); 30 31 virtual bool apply(double time, 32 blink::WebGestureCurveTarget* target); 33 34 static bool RegisterJni(JNIEnv*); 35 36 private: 37 void StartFling(const gfx::PointF& velocity); 38 // Returns true if the animation is not yet finished. 39 bool UpdatePosition(); 40 gfx::Point GetCurrentPosition(); 41 float GetCurrentVelocity(); 42 virtual void CancelFling(); 43 44 bool is_active_; 45 46 // Java OverScroller instance and methods. 47 base::android::ScopedJavaGlobalRef<jobject> java_scroller_; 48 49 gfx::Point last_position_; 50 gfx::PointF last_velocity_; 51 double last_time_; 52 53 DISALLOW_COPY_AND_ASSIGN(FlingAnimatorImpl); 54 }; 55 56 } // namespace webkit_glue 57 58 #endif // WEBKIT_CHILD_FLING_ANIMATOR_IMPL_ANDROID_H_ 59