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

Unified Diff: content/browser/renderer_host/render_widget_host_view_win.cc

Issue 11188012: gesture recognizer: Remove the touch-event queue. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: tot-merge Created 8 years, 2 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: content/browser/renderer_host/render_widget_host_view_win.cc
diff --git a/content/browser/renderer_host/render_widget_host_view_win.cc b/content/browser/renderer_host/render_widget_host_view_win.cc
index d94cd51d5a5ca7d11b4eea48b2f163a3ace4a34d..32775cb25b1900bd0c213ea59aeb393031590584 100644
--- a/content/browser/renderer_host/render_widget_host_view_win.cc
+++ b/content/browser/renderer_host/render_widget_host_view_win.cc
@@ -32,6 +32,7 @@
#include "content/browser/renderer_host/backing_store_win.h"
#include "content/browser/renderer_host/render_process_host_impl.h"
#include "content/browser/renderer_host/render_widget_host_impl.h"
+#include "content/browser/renderer_host/ui_events_helper.h"
#include "content/common/accessibility_messages.h"
#include "content/common/gpu/gpu_messages.h"
#include "content/common/plugin_messages.h"
@@ -410,24 +411,6 @@ class WebTouchState {
// Returns if any touches are modified in the event.
bool is_changed() { return touch_event_.changedTouchesLength != 0; }
- void QueueEvents(ui::GestureConsumer* consumer, ui::GestureRecognizer* gr) {
- if (touch_event_.touchesLength > 0)
- touch_count_.push(touch_event_.touchesLength);
- base::TimeDelta timestamp = base::TimeDelta::FromMilliseconds(
- touch_event_.timeStampSeconds * 1000);
- for (size_t i = 0; i < touch_event_.touchesLength; ++i) {
- gr->QueueTouchEventForGesture(consumer,
- TouchEventFromWebTouchPoint(touch_event_.touches[i], timestamp));
- }
- }
-
- int GetNextTouchCount() {
- DCHECK(!touch_count_.empty());
- int result = touch_count_.top();
- touch_count_.pop();
- return result;
- }
-
private:
typedef std::map<unsigned int, int> MapType;
@@ -445,12 +428,6 @@ class WebTouchState {
// Remove any mappings that are no longer in use.
void RemoveExpiredMappings();
- // The gesture recognizer processes touch events one at a time, but WebKit
- // (ForwardTouchEvent) takes a set of touch events. |touchCount_| tracks how
- // many individual touch events were sent to ForwardTouchEvent, so we can
- // send the correct number of AdvanceTouchQueue's
- std::stack<int> touch_count_;
-
WebKit::WebTouchEvent touch_event_;
const RenderWidgetHostViewWin* const window_;
@@ -954,13 +931,18 @@ void RenderWidgetHostViewWin::SetBackground(const SkBitmap& background) {
void RenderWidgetHostViewWin::ProcessAckedTouchEvent(
const WebKit::WebTouchEvent& touch,
bool processed) {
- DCHECK(render_widget_host_->has_touch_handler() &&
- touch_events_enabled_);
+ DCHECK(touch_events_enabled_);
+
+ ScopedVector<ui::TouchEvent> events;
+ if (!MakeUITouchEventsFromWebTouchEvents(touch, &events))
+ return;
- int touch_count = touch_state_->GetNextTouchCount();
- for (int i = 0; i < touch_count; ++i) {
+ ui::EventResult result = processed ? ui::ER_HANDLED : ui::ER_UNHANDLED;
+ for (ScopedVector<ui::TouchEvent>::iterator iter = events.begin(),
+ end = events.end(); iter != end; ++iter) {
scoped_ptr<ui::GestureRecognizer::Gestures> gestures;
- gestures.reset(gesture_recognizer_->AdvanceTouchQueue(this, processed));
+ gestures.reset(gesture_recognizer_->ProcessTouchEventForGesture(
+ *(*iter), result, this));
ProcessGestures(gestures.get());
}
}
@@ -1002,8 +984,10 @@ bool RenderWidgetHostViewWin::DispatchLongPressGestureEvent(
bool RenderWidgetHostViewWin::DispatchCancelTouchEvent(
ui::TouchEvent* event) {
- if (!render_widget_host_ || !touch_events_enabled_)
+ if (!render_widget_host_ || !touch_events_enabled_ ||
+ !render_widget_host_->ShouldForwardTouchEvent()) {
return false;
+ }
DCHECK(event->type() == WebKit::WebInputEvent::TouchCancel);
WebKit::WebTouchEvent cancel_event;
cancel_event.type = WebKit::WebInputEvent::TouchCancel;
@@ -2224,17 +2208,15 @@ LRESULT RenderWidgetHostViewWin::OnTouchEvent(UINT message, WPARAM wparam,
TOUCH_COORD_TO_PIXEL(points[0].y));
}
- bool has_touch_handler = render_widget_host_->has_touch_handler() &&
+ bool should_forward = render_widget_host_->ShouldForwardTouchEvent() &&
touch_events_enabled_;
// Send a copy of the touch events on to the gesture recognizer.
for (size_t start = 0; start < total;) {
start += touch_state_->UpdateTouchPoints(points + start, total - start);
- if (has_touch_handler) {
- if (touch_state_->is_changed()) {
+ if (should_forward) {
+ if (touch_state_->is_changed())
render_widget_host_->ForwardTouchEvent(touch_state_->touch_event());
- touch_state_->QueueEvents(this, gesture_recognizer_.get());
- }
} else {
const WebKit::WebTouchEvent& touch_event = touch_state_->touch_event();
base::TimeDelta timestamp = base::TimeDelta::FromMilliseconds(
« no previous file with comments | « content/browser/renderer_host/render_widget_host_view_aura.cc ('k') | content/browser/renderer_host/touch_event_queue.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698