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..22087cb62fdd302137bfcfb9516c36f626099fd8 100644 |
--- a/ui/events/blink/blink_event_util.cc |
+++ b/ui/events/blink/blink_event_util.cc |
@@ -359,46 +359,72 @@ WebGestureEvent CreateWebGestureEventFromGestureEventData( |
data.unique_touch_event_id); |
} |
+std::unique_ptr<blink::WebInputEvent> MakeDeepCopyOfWebInputEvent( |
+ const blink::WebInputEvent& event) { |
+ std::unique_ptr<blink::WebInputEvent> cloned_event; |
+ if (event.type == blink::WebMouseEvent::MouseWheel) { |
+ blink::WebMouseWheelEvent* wheel_event = new blink::WebMouseWheelEvent; |
+ cloned_event.reset(wheel_event); |
+ *wheel_event = static_cast<const blink::WebMouseWheelEvent&>(event); |
+ } else if (blink::WebInputEvent::isMouseEventType(event.type)) { |
+ blink::WebMouseEvent* mouse_event = new blink::WebMouseEvent; |
+ cloned_event.reset(mouse_event); |
+ *mouse_event = static_cast<const blink::WebMouseEvent&>(event); |
+ } else if (blink::WebInputEvent::isTouchEventType(event.type)) { |
+ blink::WebTouchEvent* touch_event = new blink::WebTouchEvent; |
+ cloned_event.reset(touch_event); |
+ *touch_event = static_cast<const blink::WebTouchEvent&>(event); |
+ } else if (blink::WebInputEvent::isGestureEventType(event.type)) { |
+ blink::WebGestureEvent* gesture_event = new blink::WebGestureEvent; |
+ cloned_event.reset(gesture_event); |
+ *gesture_event = static_cast<const blink::WebGestureEvent&>(event); |
+ } |
+ return cloned_event; |
+} |
+ |
std::unique_ptr<blink::WebInputEvent> ScaleWebInputEvent( |
const blink::WebInputEvent& event, |
float scale) { |
std::unique_ptr<blink::WebInputEvent> scaled_event; |
if (scale == 1.f) |
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); |
+ |
+ scaled_event = MakeDeepCopyOfWebInputEvent(event); |
+ ScaleWebInputEvent(scale, scaled_event.get()); |
+ return scaled_event; |
+} |
+ |
+void ScaleWebInputEvent(float scale, blink::WebInputEvent* event) { |
+ if (event->type == blink::WebMouseEvent::MouseWheel) { |
+ blink::WebMouseWheelEvent* wheel_event = |
+ static_cast<blink::WebMouseWheelEvent*>(event); |
wheel_event->x *= scale; |
wheel_event->y *= scale; |
wheel_event->deltaX *= scale; |
wheel_event->deltaY *= scale; |
wheel_event->wheelTicksX *= scale; |
wheel_event->wheelTicksY *= scale; |
- } else if (blink::WebInputEvent::isMouseEventType(event.type)) { |
- blink::WebMouseEvent* mouse_event = new blink::WebMouseEvent; |
- scaled_event.reset(mouse_event); |
- *mouse_event = static_cast<const blink::WebMouseEvent&>(event); |
+ } else if (blink::WebInputEvent::isMouseEventType(event->type)) { |
+ blink::WebMouseEvent* mouse_event = |
+ static_cast<blink::WebMouseEvent*>(event); |
mouse_event->x *= scale; |
mouse_event->y *= scale; |
mouse_event->windowX = mouse_event->x; |
mouse_event->windowY = mouse_event->y; |
mouse_event->movementX *= scale; |
mouse_event->movementY *= scale; |
- } else if (blink::WebInputEvent::isTouchEventType(event.type)) { |
- blink::WebTouchEvent* touch_event = new blink::WebTouchEvent; |
- scaled_event.reset(touch_event); |
- *touch_event = static_cast<const blink::WebTouchEvent&>(event); |
+ } else if (blink::WebInputEvent::isTouchEventType(event->type)) { |
+ blink::WebTouchEvent* touch_event = |
+ static_cast<blink::WebTouchEvent*>(event); |
for (unsigned i = 0; i < touch_event->touchesLength; i++) { |
touch_event->touches[i].position.x *= scale; |
touch_event->touches[i].position.y *= scale; |
touch_event->touches[i].radiusX *= scale; |
touch_event->touches[i].radiusY *= scale; |
} |
- } else if (blink::WebInputEvent::isGestureEventType(event.type)) { |
- blink::WebGestureEvent* gesture_event = new blink::WebGestureEvent; |
- scaled_event.reset(gesture_event); |
- *gesture_event = static_cast<const blink::WebGestureEvent&>(event); |
+ } else if (blink::WebInputEvent::isGestureEventType(event->type)) { |
+ blink::WebGestureEvent* gesture_event = |
+ static_cast<blink::WebGestureEvent*>(event); |
gesture_event->x *= scale; |
gesture_event->y *= scale; |
switch (gesture_event->type) { |
@@ -461,7 +487,28 @@ std::unique_ptr<blink::WebInputEvent> ScaleWebInputEvent( |
break; |
} |
} |
- return scaled_event; |
+} |
+ |
+void ShiftWebInputEvent(int delta_x, int delta_y, blink::WebInputEvent* event) { |
+ if (blink::WebInputEvent::isMouseEventType(event->type)) { |
+ blink::WebMouseEvent* mouse_event = |
+ static_cast<blink::WebMouseEvent*>(event); |
+ mouse_event->x += delta_x; |
+ mouse_event->y += delta_y; |
+ } else if (blink::WebInputEvent::isGestureEventType(event->type)) { |
+ blink::WebGestureEvent* gesture_event = |
+ static_cast<blink::WebGestureEvent*>(event); |
+ gesture_event->x += delta_x; |
+ gesture_event->y += delta_y; |
+ } else if (blink::WebInputEvent::isTouchEventType(event->type)) { |
+ blink::WebTouchEvent* touch_event = |
+ static_cast<blink::WebTouchEvent*>(event); |
+ for (unsigned i = 0; i < touch_event->touchesLength; i++) { |
+ blink::WebTouchPoint* p = touch_event->touches + i; |
+ p->position.x += delta_x; |
+ p->position.y += delta_y; |
+ } |
+ } |
} |
WebPointerProperties::PointerType ToWebPointerType( |