Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1701)

Unified Diff: android_webview/browser/browser_view_renderer.cc

Issue 274323004: NOT FOR LANDING - [WebView] Allow fling animation via the LayerScrollOffsetDelegate (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix test Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: android_webview/browser/browser_view_renderer.cc
diff --git a/android_webview/browser/browser_view_renderer.cc b/android_webview/browser/browser_view_renderer.cc
index ea9d60312836a4a3c45dc9dd20850bf05028defd..9730bbd3a151b3680664ec815a6997636905d30c 100644
--- a/android_webview/browser/browser_view_renderer.cc
+++ b/android_webview/browser/browser_view_renderer.cc
@@ -422,6 +422,12 @@ void BrowserViewRenderer::OnDetachedFromWindow() {
DCHECK(!hardware_enabled_);
}
+void BrowserViewRenderer::OnComputeScroll(base::TimeTicks animation_time) {
+ if (pending_fling_animation_.is_null())
+ return;
+ FlushPendingFlingAnimation(animation_time);
+}
+
void BrowserViewRenderer::ReleaseHardware() {
DCHECK(hardware_enabled_);
ReturnUnusedResource(shared_renderer_state_.PassUncommittedFrameOnUI());
@@ -626,6 +632,13 @@ BrowserViewRenderer::RootLayerStateAsValue(
return state;
}
+void BrowserViewRenderer::SetNeedsAnimateFling(
+ const AnimationCallback& fling_animation) {
+ // TODO(jdduke): Skip invalidate if animation already pending?
+ pending_fling_animation_ = fling_animation;
+ client_->PostInvalidate();
+}
+
void BrowserViewRenderer::DidOverscroll(gfx::Vector2dF accumulated_overscroll,
gfx::Vector2dF latest_overscroll_delta,
gfx::Vector2dF current_fling_velocity) {
@@ -638,7 +651,21 @@ void BrowserViewRenderer::DidOverscroll(gfx::Vector2dF accumulated_overscroll,
scaled_overscroll_delta + overscroll_rounding_error_);
overscroll_rounding_error_ =
scaled_overscroll_delta - rounded_overscroll_delta;
- client_->DidOverscroll(rounded_overscroll_delta);
+
+ gfx::Vector2dF fling_velocity_pixels = gfx::ScaleVector2d(
+ current_fling_velocity, physical_pixel_scale);
+
+ const bool first_overscroll_x =
+ accumulated_overscroll.x() &&
+ accumulated_overscroll.x() == latest_overscroll_delta.x();
+ const bool first_overscroll_y =
+ accumulated_overscroll.y() &&
+ accumulated_overscroll.y() == latest_overscroll_delta.y();
+
+ client_->DidOverscroll(rounded_overscroll_delta,
+ fling_velocity_pixels,
+ first_overscroll_x,
+ first_overscroll_y);
}
void BrowserViewRenderer::EnsureContinuousInvalidation(
@@ -742,6 +769,16 @@ void BrowserViewRenderer::ForceFakeCompositeSW() {
CompositeSW(&canvas);
}
+void BrowserViewRenderer::FlushPendingFlingAnimation(
+ base::TimeTicks animation_time) {
+ TRACE_EVENT0("android_webview",
+ "BrowserViewRenderer::FlushPendingFlingAnimation");
+ DCHECK(!pending_fling_animation_.is_null());
+ AnimationCallback animation = pending_fling_animation_;
+ pending_fling_animation_.Reset();
+ animation.Run(animation_time);
+}
+
bool BrowserViewRenderer::CompositeSW(SkCanvas* canvas) {
DCHECK(compositor_);
ReturnResourceFromParent();
« no previous file with comments | « android_webview/browser/browser_view_renderer.h ('k') | android_webview/browser/browser_view_renderer_client.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698