Chromium Code Reviews| Index: content/browser/renderer_host/render_widget_host_impl.cc |
| diff --git a/content/browser/renderer_host/render_widget_host_impl.cc b/content/browser/renderer_host/render_widget_host_impl.cc |
| index 3b93544dbc9bd8efccc9bd2e4549160fc561c4dd..ddf287403271fb29e00c1bb08f625d92c7f39e3a 100644 |
| --- a/content/browser/renderer_host/render_widget_host_impl.cc |
| +++ b/content/browser/renderer_host/render_widget_host_impl.cc |
| @@ -4,6 +4,7 @@ |
| #include "content/browser/renderer_host/render_widget_host_impl.h" |
| +#include <math.h> |
| #include <utility> |
| #include "base/auto_reset.h" |
| @@ -747,12 +748,105 @@ void RenderWidgetHostImpl::EnableFullAccessibilityMode() { |
| SetAccessibilityMode(AccessibilityModeComplete); |
| } |
| +static WebGestureEvent makeGestureEvent(WebInputEvent::Type type, |
| + double timeStampSeconds, |
| + int x, |
| + int y, |
| + float deltaX, |
| + float deltaY, |
| + int modifiers) |
| +{ |
|
jam
2012/08/06 18:33:21
nit: this function is using webkit style, please c
aelias_OOO_until_Jul13
2012/08/06 18:46:30
Done. By the way, is there a style checker tool I
|
| + WebGestureEvent result; |
| + |
| + result.type = type; |
| + result.x = x; |
| + result.y = y; |
| + result.deltaX = deltaX; |
| + result.deltaY = deltaY; |
| + result.timeStampSeconds = timeStampSeconds; |
| + result.modifiers = modifiers; |
| + |
| + return result; |
| +} |
| + |
| +void RenderWidgetHostImpl::SimulateTouchGestureWithMouse( |
| + const WebMouseEvent& mouse_event) { |
| + int x = mouse_event.x, y = mouse_event.y; |
| + float dx = mouse_event.movementX, dy = mouse_event.movementY; |
| + static int startX = 0, startY = 0; |
| + |
| + switch (mouse_event.button) { |
| + case WebMouseEvent::ButtonLeft: |
| + if (mouse_event.type == WebInputEvent::MouseDown) { |
| + startX = x; |
| + startY = y; |
| + ForwardGestureEvent(makeGestureEvent( |
| + WebInputEvent::GestureScrollBegin, mouse_event.timeStampSeconds, |
| + x, y, 0, 0, 0)); |
| + } |
| + if (dx != 0 || dy != 0) { |
| + ForwardGestureEvent(makeGestureEvent( |
| + WebInputEvent::GestureScrollUpdate, mouse_event.timeStampSeconds, |
| + x, y, dx, dy, 0)); |
| + } |
| + if (mouse_event.type == WebInputEvent::MouseUp) { |
| + ForwardGestureEvent(makeGestureEvent( |
| + WebInputEvent::GestureScrollEnd, mouse_event.timeStampSeconds, |
| + x, y, dx, dy, 0)); |
| + } |
| + break; |
| + case WebMouseEvent::ButtonMiddle: |
| + if (mouse_event.type == WebInputEvent::MouseDown) { |
| + startX = x; |
| + startY = y; |
| + ForwardGestureEvent(makeGestureEvent( |
| + WebInputEvent::GestureTapDown, mouse_event.timeStampSeconds, |
| + x, y, 0, 0, 0)); |
| + } |
| + if (mouse_event.type == WebInputEvent::MouseUp) { |
| + ForwardGestureEvent(makeGestureEvent( |
| + WebInputEvent::GestureTap, mouse_event.timeStampSeconds, |
| + x, y, dx, dy, 0)); |
| + } |
| + break; |
| + case WebMouseEvent::ButtonRight: |
| + if (mouse_event.type == WebInputEvent::MouseDown) { |
| + startX = x; |
| + startY = y; |
| + ForwardGestureEvent(makeGestureEvent( |
| + WebInputEvent::GesturePinchBegin, mouse_event.timeStampSeconds, |
| + x, y, 1, 1, 0)); |
| + } |
| + if (dx != 0 || dy != 0) { |
| + dx = pow(dy < 0 ? 0.998 : 1.002, abs(dy)); |
| + dy = dx; |
| + ForwardGestureEvent(makeGestureEvent( |
| + WebInputEvent::GesturePinchUpdate, mouse_event.timeStampSeconds, |
| + startX, startY, dx, dy, 0)); |
| + } |
| + if (mouse_event.type == WebInputEvent::MouseUp) { |
| + ForwardGestureEvent(makeGestureEvent( |
| + WebInputEvent::GesturePinchEnd, mouse_event.timeStampSeconds, |
| + x, y, dx, dy, 0)); |
| + } |
| + break; |
| + case WebMouseEvent::ButtonNone: |
| + break; |
| + } |
| +} |
| + |
| void RenderWidgetHostImpl::ForwardMouseEvent(const WebMouseEvent& mouse_event) { |
| TRACE_EVENT2("renderer_host", "RenderWidgetHostImpl::ForwardMouseEvent", |
| "x", mouse_event.x, "y", mouse_event.y); |
| if (ignore_input_events_ || process_->IgnoreInputEvents()) |
| return; |
| + if (CommandLine::ForCurrentProcess()->HasSwitch( |
| + switches::kSimulateTouchScreenWithMouse)) { |
| + SimulateTouchGestureWithMouse(mouse_event); |
| + return; |
| + } |
| + |
| // Avoid spamming the renderer with mouse move events. It is important |
| // to note that WM_MOUSEMOVE events are anyways synthetic, but since our |
| // thread is able to rapidly consume WM_MOUSEMOVE events, we may get way |