Index: content/browser/renderer_host/touch_smooth_scroll_gesture_android.cc |
diff --git a/content/browser/renderer_host/touch_smooth_scroll_gesture_android.cc b/content/browser/renderer_host/touch_smooth_scroll_gesture_android.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..c504f6c07c92f8c568ddc478279cf7a27506930c |
--- /dev/null |
+++ b/content/browser/renderer_host/touch_smooth_scroll_gesture_android.cc |
@@ -0,0 +1,75 @@ |
+// Copyright (c) 2013 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "content/browser/renderer_host/touch_smooth_scroll_gesture_android.h" |
+ |
+#include "base/debug/trace_event.h" |
+#include "content/browser/renderer_host/render_widget_host_impl.h" |
+#include "jni/SmoothScroller_jni.h" |
+ |
+namespace { |
+bool g_jni_initialized = false; |
+ |
+void RegisterNativesIfNeeded(JNIEnv* env) { |
+ if (!g_jni_initialized) { |
+ content::RegisterNativesImpl(env); |
+ g_jni_initialized = true; |
+ } |
+} |
+} // namespace |
+ |
+namespace content { |
+ |
+TouchSmoothScrollGestureAndroid::TouchSmoothScrollGestureAndroid( |
+ int pixels_to_scroll, |
+ RenderWidgetHost* rwh, |
+ base::android::ScopedJavaLocalRef<jobject> java_scroller) |
+ : pixels_scrolled_(0), |
+ has_started_(false), |
+ has_sent_motion_up_(false), |
+ pixels_to_scroll_(pixels_to_scroll), |
+ rwh_(rwh), |
+ java_scroller_(java_scroller) { |
+ JNIEnv* env = base::android::AttachCurrentThread(); |
+ RegisterNativesIfNeeded(env); |
+} |
+ |
+TouchSmoothScrollGestureAndroid::~TouchSmoothScrollGestureAndroid() { |
+} |
+ |
+bool TouchSmoothScrollGestureAndroid::ForwardInputEvents( |
+ base::TimeTicks now, RenderWidgetHost* host) { |
+ if (!has_started_) { |
+ has_started_ = true; |
+ JNIEnv* env = base::android::AttachCurrentThread(); |
+ Java_SmoothScroller_start( |
+ env, java_scroller_.obj(), reinterpret_cast<int>(this)); |
+ } |
+ |
+ TRACE_COUNTER_ID1( |
+ "gpu", "smooth_scroll_by_pixels_scrolled", this, pixels_scrolled_); |
+ |
+ return !has_sent_motion_up_; |
+} |
+ |
+double TouchSmoothScrollGestureAndroid::GetScrollDelta( |
+ JNIEnv* env, jobject obj, double scale) { |
+ double delta = smooth_scroll_calculator_.GetScrollDelta( |
+ base::TimeTicks::Now(), |
+ RenderWidgetHostImpl::From(rwh_)->GetSyntheticScrollMessageInterval()) |
+ * scale; |
+ pixels_scrolled_ += delta; |
+ return delta; |
+} |
+ |
+bool TouchSmoothScrollGestureAndroid::HasFinished(JNIEnv* env, jobject obj) { |
+ return pixels_scrolled_ >= pixels_to_scroll_; |
+} |
+ |
+void TouchSmoothScrollGestureAndroid::SetHasSentMotionUp( |
+ JNIEnv* env, jobject obj) { |
+ has_sent_motion_up_ = true; |
+} |
+ |
+} // namespace content |