| Index: content/browser/renderer_host/render_widget_host_input_event_router.cc
|
| diff --git a/content/browser/renderer_host/render_widget_host_input_event_router.cc b/content/browser/renderer_host/render_widget_host_input_event_router.cc
|
| index 92b07666a80d3b3c46a51db126c86faad0e43ccb..c00ceabf5e0a00599a591f0359640fad24b67583 100644
|
| --- a/content/browser/renderer_host/render_widget_host_input_event_router.cc
|
| +++ b/content/browser/renderer_host/render_widget_host_input_event_router.cc
|
| @@ -11,6 +11,18 @@
|
| #include "content/common/frame_messages.h"
|
| #include "third_party/WebKit/public/web/WebInputEvent.h"
|
|
|
| +namespace {
|
| +
|
| +void TransformEventTouchPositions(blink::WebTouchEvent* event,
|
| + const gfx::Vector2d& delta) {
|
| + for (unsigned i = 0; i < event->touchesLength; ++i) {
|
| + event->touches[i].position.x += delta.x();
|
| + event->touches[i].position.y += delta.y();
|
| + }
|
| +}
|
| +
|
| +} // anonymous namespace
|
| +
|
| namespace content {
|
|
|
| RenderWidgetHostInputEventRouter::HittestDelegate::HittestDelegate(
|
| @@ -127,27 +139,42 @@ void RenderWidgetHostInputEventRouter::RouteTouchEvent(
|
| if (!target)
|
| return;
|
|
|
| + // TODO(wjmaclean): Instead of just computing a delta, we should extract
|
| + // the complete transform. We assume it doesn't change for the duration
|
| + // of the touch sequence, though this could be wrong; a better approach
|
| + // might be to always transform each point to the current_touch_target_
|
| + // for the duration of the sequence.
|
| + touch_delta_ = transformed_point - original_point;
|
| +
|
| // Store the weak-ptr to the target, since it could disappear in the
|
| // middle of a touch sequence.
|
| current_touch_target_ = target->GetWeakPtr();
|
| }
|
| ++active_touches_;
|
| - if (current_touch_target_)
|
| + if (current_touch_target_) {
|
| + TransformEventTouchPositions(event, touch_delta_);
|
| current_touch_target_->ProcessTouchEvent(*event, latency);
|
| + }
|
| break;
|
| }
|
| case blink::WebInputEvent::TouchMove:
|
| - if (current_touch_target_)
|
| + if (current_touch_target_) {
|
| + TransformEventTouchPositions(event, touch_delta_);
|
| current_touch_target_->ProcessTouchEvent(*event, latency);
|
| + }
|
| break;
|
| case blink::WebInputEvent::TouchEnd:
|
| case blink::WebInputEvent::TouchCancel:
|
| DCHECK(active_touches_);
|
| - if (current_touch_target_)
|
| + if (current_touch_target_) {
|
| + TransformEventTouchPositions(event, touch_delta_);
|
| current_touch_target_->ProcessTouchEvent(*event, latency);
|
| + }
|
| --active_touches_;
|
| - if (!active_touches_)
|
| + if (!active_touches_) {
|
| current_touch_target_ = WeakTarget();
|
| + touch_delta_ = gfx::Vector2d();
|
| + }
|
| break;
|
| default:
|
| NOTREACHED();
|
|
|