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

Side by Side Diff: content/browser/renderer_host/overscroll_controller.cc

Issue 11574047: overscroll: Send all gesture-events to the gesture-event filter. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: add a test. Created 8 years 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | content/browser/renderer_host/render_widget_host_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/renderer_host/overscroll_controller.h" 5 #include "content/browser/renderer_host/overscroll_controller.h"
6 6
7 #include "content/browser/renderer_host/gesture_event_filter.h" 7 #include "content/browser/renderer_host/gesture_event_filter.h"
8 #include "content/browser/renderer_host/overscroll_controller_delegate.h" 8 #include "content/browser/renderer_host/overscroll_controller_delegate.h"
9 #include "content/browser/renderer_host/render_widget_host_impl.h" 9 #include "content/browser/renderer_host/render_widget_host_impl.h"
10 #include "content/public/browser/overscroll_configuration.h" 10 #include "content/public/browser/overscroll_configuration.h"
11 #include "content/public/browser/render_widget_host_view.h" 11 #include "content/public/browser/render_widget_host_view.h"
12 12
13 namespace {
14
15 // Some gesture events can also be triggered from the trackpad. This function
16 // checks to see if |event| was generated from a touchscreen.
17 bool IsGestureEventFromTouchscreen(const WebKit::WebInputEvent& event) {
18 if (!WebKit::WebInputEvent::isGestureEventType(event.type))
19 return false;
20
21 if (event.type == WebKit::WebInputEvent::GestureFlingStart) {
22 const WebKit::WebGestureEvent& gevent =
23 static_cast<const WebKit::WebGestureEvent&>(event);
24 return gevent.data.flingStart.sourceDevice ==
25 WebKit::WebGestureEvent::Touchscreen;
26 }
27
28 return true;
29 }
30
31 }
32
33 namespace content { 13 namespace content {
34 14
35 OverscrollController::OverscrollController( 15 OverscrollController::OverscrollController(
36 RenderWidgetHostImpl* render_widget_host) 16 RenderWidgetHostImpl* render_widget_host)
37 : render_widget_host_(render_widget_host), 17 : render_widget_host_(render_widget_host),
38 overscroll_mode_(OVERSCROLL_NONE), 18 overscroll_mode_(OVERSCROLL_NONE),
39 overscroll_delta_x_(0.f), 19 overscroll_delta_x_(0.f),
40 overscroll_delta_y_(0.f), 20 overscroll_delta_y_(0.f),
41 delegate_(NULL) { 21 delegate_(NULL) {
42 } 22 }
43 23
44 OverscrollController::~OverscrollController() { 24 OverscrollController::~OverscrollController() {
45 } 25 }
46 26
47 bool OverscrollController::WillDispatchEvent( 27 bool OverscrollController::WillDispatchEvent(
48 const WebKit::WebInputEvent& event) { 28 const WebKit::WebInputEvent& event) {
49 if (DispatchEventCompletesAction(event)) { 29 if (DispatchEventCompletesAction(event)) {
50 CompleteAction(); 30 CompleteAction();
51 31
52 // If the overscroll was caused by touch-scrolling, then the gesture event 32 // If the overscroll was caused by touch-scrolling, then the gesture event
53 // that completes the action needs to be sent to the renderer, because the 33 // that completes the action needs to be sent to the renderer, because the
54 // touch-scrolls maintain state in the renderer side (in the compositor, for 34 // touch-scrolls maintain state in the renderer side (in the compositor, for
55 // example), and the event that completes this action needs to be sent to 35 // example), and the event that completes this action needs to be sent to
56 // the renderer so that those states can be updated/reset appropriately. 36 // the renderer so that those states can be updated/reset appropriately.
57 // Send the event through the gesture-event filter when appropriate. 37 // Send the event through the gesture-event filter when appropriate.
58 if (IsGestureEventFromTouchscreen(event)) { 38 if (ShouldForwardToGestureFilter(event)) {
59 if (ShouldForwardToGestureFilter(event)) { 39 const WebKit::WebGestureEvent& gevent =
60 const WebKit::WebGestureEvent& gevent = 40 static_cast<const WebKit::WebGestureEvent&>(event);
61 static_cast<const WebKit::WebGestureEvent&>(event); 41 return render_widget_host_->gesture_event_filter()->
62 return render_widget_host_->gesture_event_filter()-> 42 ShouldForward(gevent);
63 ShouldForward(gevent);
64 }
65 return true;
66 } 43 }
67 44
68 return false; 45 return false;
69 } 46 }
70 47
71 if (overscroll_mode_ != OVERSCROLL_NONE && DispatchEventResetsState(event)) { 48 if (overscroll_mode_ != OVERSCROLL_NONE && DispatchEventResetsState(event)) {
72 SetOverscrollMode(OVERSCROLL_NONE); 49 SetOverscrollMode(OVERSCROLL_NONE);
73 // The overscroll gesture status is being reset. If the event is a 50 // The overscroll gesture status is being reset. If the event is a
74 // touch-screen gesture event, then make sure the gesture event filter gets 51 // gesture event (from either touchscreen or trackpad), then make sure the
75 // the event first (if it didn't already process it). 52 // gesture event filter gets the event first (if it didn't already process
76 if (IsGestureEventFromTouchscreen(event) && 53 // it).
77 ShouldForwardToGestureFilter(event)) { 54 if (ShouldForwardToGestureFilter(event)) {
78 const WebKit::WebGestureEvent& gevent = 55 const WebKit::WebGestureEvent& gevent =
79 static_cast<const WebKit::WebGestureEvent&>(event); 56 static_cast<const WebKit::WebGestureEvent&>(event);
80 return render_widget_host_->gesture_event_filter()->ShouldForward(gevent); 57 return render_widget_host_->gesture_event_filter()->ShouldForward(gevent);
81 } 58 }
82 59
83 // Let the event be dispatched to the renderer. 60 // Let the event be dispatched to the renderer.
84 return true; 61 return true;
85 } 62 }
86 63
87 if (overscroll_mode_ != OVERSCROLL_NONE) { 64 if (overscroll_mode_ != OVERSCROLL_NONE) {
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after
263 OverscrollMode old_mode = overscroll_mode_; 240 OverscrollMode old_mode = overscroll_mode_;
264 overscroll_mode_ = mode; 241 overscroll_mode_ = mode;
265 if (overscroll_mode_ == OVERSCROLL_NONE) 242 if (overscroll_mode_ == OVERSCROLL_NONE)
266 overscroll_delta_x_ = overscroll_delta_y_ = 0.f; 243 overscroll_delta_x_ = overscroll_delta_y_ = 0.f;
267 if (delegate_) 244 if (delegate_)
268 delegate_->OnOverscrollModeChange(old_mode, overscroll_mode_); 245 delegate_->OnOverscrollModeChange(old_mode, overscroll_mode_);
269 } 246 }
270 247
271 bool OverscrollController::ShouldForwardToGestureFilter( 248 bool OverscrollController::ShouldForwardToGestureFilter(
272 const WebKit::WebInputEvent& event) const { 249 const WebKit::WebInputEvent& event) const {
273 DCHECK(IsGestureEventFromTouchscreen(event)); 250 if (!WebKit::WebInputEvent::isGestureEventType(event.type))
251 return false;
274 252
275 // If the GestureEventFilter already processed this event, then the event must 253 // If the GestureEventFilter already processed this event, then the event must
276 // not be sent to the filter again. 254 // not be sent to the filter again.
277 return !render_widget_host_->gesture_event_filter()->HasQueuedGestureEvents(); 255 return !render_widget_host_->gesture_event_filter()->HasQueuedGestureEvents();
278 } 256 }
279 257
280 } // namespace content 258 } // namespace content
OLDNEW
« no previous file with comments | « no previous file | content/browser/renderer_host/render_widget_host_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698