Index: ui/events/blink/blink_event_util.cc |
diff --git a/ui/events/blink/blink_event_util.cc b/ui/events/blink/blink_event_util.cc |
index c0b32d721abb1868d8fe8fd7d86c0c87ad8d9eb9..c3ac973d93b12b9f5af8cb70f4e01cbe7b9bb114 100644 |
--- a/ui/events/blink/blink_event_util.cc |
+++ b/ui/events/blink/blink_event_util.cc |
@@ -22,6 +22,7 @@ |
#include "ui/events/gesture_event_details.h" |
#include "ui/events/keycodes/dom/keycode_converter.h" |
#include "ui/gfx/geometry/safe_integer_conversions.h" |
+#include "ui/gfx/geometry/vector2d.h" |
using blink::WebGestureEvent; |
using blink::WebInputEvent; |
@@ -362,13 +363,22 @@ WebGestureEvent CreateWebGestureEventFromGestureEventData( |
std::unique_ptr<blink::WebInputEvent> ScaleWebInputEvent( |
const blink::WebInputEvent& event, |
float scale) { |
+ return TranslateAndScaleWebInputEvent(event, gfx::Vector2d(0, 0), scale); |
+} |
+ |
+std::unique_ptr<blink::WebInputEvent> TranslateAndScaleWebInputEvent( |
+ const blink::WebInputEvent& event, |
+ const gfx::Vector2d& delta, |
+ float scale) { |
std::unique_ptr<blink::WebInputEvent> scaled_event; |
- if (scale == 1.f) |
+ if (scale == 1.f && delta.IsZero()) |
return scaled_event; |
if (event.type == blink::WebMouseEvent::MouseWheel) { |
blink::WebMouseWheelEvent* wheel_event = new blink::WebMouseWheelEvent; |
scaled_event.reset(wheel_event); |
*wheel_event = static_cast<const blink::WebMouseWheelEvent&>(event); |
+ wheel_event->x += delta.x(); |
+ wheel_event->y += delta.y(); |
wheel_event->x *= scale; |
wheel_event->y *= scale; |
wheel_event->deltaX *= scale; |
@@ -379,6 +389,8 @@ std::unique_ptr<blink::WebInputEvent> ScaleWebInputEvent( |
blink::WebMouseEvent* mouse_event = new blink::WebMouseEvent; |
scaled_event.reset(mouse_event); |
*mouse_event = static_cast<const blink::WebMouseEvent&>(event); |
+ mouse_event->x += delta.x(); |
+ mouse_event->y += delta.y(); |
mouse_event->x *= scale; |
mouse_event->y *= scale; |
mouse_event->windowX = mouse_event->x; |
@@ -390,6 +402,8 @@ std::unique_ptr<blink::WebInputEvent> ScaleWebInputEvent( |
scaled_event.reset(touch_event); |
*touch_event = static_cast<const blink::WebTouchEvent&>(event); |
for (unsigned i = 0; i < touch_event->touchesLength; i++) { |
+ touch_event->touches[i].position.x += delta.x(); |
+ touch_event->touches[i].position.y += delta.y(); |
touch_event->touches[i].position.x *= scale; |
touch_event->touches[i].position.y *= scale; |
touch_event->touches[i].radiusX *= scale; |
@@ -399,6 +413,8 @@ std::unique_ptr<blink::WebInputEvent> ScaleWebInputEvent( |
blink::WebGestureEvent* gesture_event = new blink::WebGestureEvent; |
scaled_event.reset(gesture_event); |
*gesture_event = static_cast<const blink::WebGestureEvent&>(event); |
+ gesture_event->x += delta.x(); |
+ gesture_event->y += delta.y(); |
gesture_event->x *= scale; |
gesture_event->y *= scale; |
switch (gesture_event->type) { |