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

Unified Diff: content/renderer/gpu/input_handler_proxy.cc

Issue 16156002: gpu: Avoid flinging beyond content edge (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 7 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
« no previous file with comments | « content/renderer/gpu/input_handler_proxy.h ('k') | content/renderer/gpu/input_handler_proxy_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/renderer/gpu/input_handler_proxy.cc
diff --git a/content/renderer/gpu/input_handler_proxy.cc b/content/renderer/gpu/input_handler_proxy.cc
index 8943b33644ed6237e7e688b55ba5062bacd471ac..416c8eec530b9bd0439917d3d075848bc8fedc4e 100644
--- a/content/renderer/gpu/input_handler_proxy.cc
+++ b/content/renderer/gpu/input_handler_proxy.cc
@@ -29,7 +29,9 @@ InputHandlerProxy::InputHandlerProxy(cc::InputHandler* input_handler)
#endif
gesture_scroll_on_impl_thread_(false),
gesture_pinch_on_impl_thread_(false),
- fling_may_be_active_on_main_thread_(false) {
+ fling_may_be_active_on_main_thread_(false),
+ fling_overscrolled_horizontally_(false),
+ fling_overscrolled_vertically_(false) {
input_handler_->BindToClient(this);
}
@@ -231,6 +233,8 @@ InputHandlerProxy::HandleGestureFling(
WebFloatPoint(gesture_event.data.flingStart.velocityX,
gesture_event.data.flingStart.velocityY),
WebKit::WebSize()));
+ fling_overscrolled_horizontally_ = false;
+ fling_overscrolled_vertically_ = false;
TRACE_EVENT_ASYNC_BEGIN0(
"renderer",
"InputHandlerProxy::HandleGestureFling::started",
@@ -300,6 +304,14 @@ void InputHandlerProxy::MainThreadHasStoppedFlinging() {
void InputHandlerProxy::DidOverscroll(gfx::Vector2dF accumulated_overscroll,
gfx::Vector2dF current_fling_velocity) {
DCHECK(client_);
+ if (fling_curve_) {
+ const int kFlingOverscrollThreshold = 1;
jamesr 2013/05/31 18:23:28 why not static?
+ fling_overscrolled_horizontally_ |=
+ std::abs(accumulated_overscroll.x()) >= kFlingOverscrollThreshold;
+ fling_overscrolled_vertically_ |=
+ std::abs(accumulated_overscroll.y()) >= kFlingOverscrollThreshold;
+ }
+
client_->DidOverscroll(accumulated_overscroll, current_fling_velocity);
}
@@ -369,31 +381,38 @@ static gfx::Vector2dF ToClientScrollIncrement(const WebFloatSize& increment) {
}
void InputHandlerProxy::scrollBy(const WebFloatSize& increment) {
- if (increment == WebFloatSize())
+ WebFloatSize clipped_increment;
+ if (!fling_overscrolled_horizontally_)
+ clipped_increment.width = increment.width;
+ if (!fling_overscrolled_vertically_)
+ clipped_increment.height = increment.height;
+
+ if (clipped_increment == WebFloatSize())
return;
TRACE_EVENT2("renderer",
"InputHandlerProxy::scrollBy",
"x",
- increment.width,
+ clipped_increment.width,
"y",
- increment.height);
+ clipped_increment.height);
bool did_scroll = false;
switch (fling_parameters_.sourceDevice) {
case WebGestureEvent::Touchpad:
- did_scroll = TouchpadFlingScroll(increment);
+ did_scroll = TouchpadFlingScroll(clipped_increment);
break;
case WebGestureEvent::Touchscreen:
+ clipped_increment = ToClientScrollIncrement(clipped_increment);
did_scroll = input_handler_->ScrollBy(fling_parameters_.point,
- ToClientScrollIncrement(increment));
+ clipped_increment);
break;
}
if (did_scroll) {
- fling_parameters_.cumulativeScroll.width += increment.width;
- fling_parameters_.cumulativeScroll.height += increment.height;
+ fling_parameters_.cumulativeScroll.width += clipped_increment.width;
+ fling_parameters_.cumulativeScroll.height += clipped_increment.height;
}
}
« no previous file with comments | « content/renderer/gpu/input_handler_proxy.h ('k') | content/renderer/gpu/input_handler_proxy_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698