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

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

Issue 2234023002: Refactor WebInputEventAura to ui/events/blink (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 4 years, 4 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/web_input_event_aura.cc
diff --git a/content/browser/renderer_host/web_input_event_aura.cc b/content/browser/renderer_host/web_input_event_aura.cc
deleted file mode 100644
index e0fa0a558468bffa400f23985c28521eb17112c7..0000000000000000000000000000000000000000
--- a/content/browser/renderer_host/web_input_event_aura.cc
+++ /dev/null
@@ -1,457 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "content/browser/renderer_host/web_input_event_aura.h"
-
-#include "build/build_config.h"
-#include "content/browser/renderer_host/input/web_input_event_util.h"
-#include "ui/aura/client/screen_position_client.h"
-#include "ui/aura/window.h"
-#include "ui/events/base_event_utils.h"
-#include "ui/events/blink/blink_event_util.h"
-#include "ui/events/event.h"
-#include "ui/events/event_utils.h"
-#include "ui/events/keycodes/dom/keycode_converter.h"
-#include "ui/events/keycodes/keyboard_code_conversion.h"
-
-namespace content {
-
-namespace {
-
-gfx::Point GetScreenLocationFromEvent(const ui::LocatedEvent& event) {
- if (!event.target())
- return event.root_location();
-
- aura::Window* root =
- static_cast<aura::Window*>(event.target())->GetRootWindow();
- aura::client::ScreenPositionClient* spc =
- aura::client::GetScreenPositionClient(root);
- if (!spc)
- return event.root_location();
-
- gfx::Point screen_location(event.root_location());
- spc->ConvertPointToScreen(root, &screen_location);
- return screen_location;
-}
-
-blink::WebPointerProperties::PointerType EventPointerTypeToWebPointerType(
- ui::EventPointerType pointer_type) {
- switch (pointer_type) {
- case ui::EventPointerType::POINTER_TYPE_UNKNOWN:
- return blink::WebPointerProperties::PointerType::Unknown;
- case ui::EventPointerType::POINTER_TYPE_MOUSE:
- return blink::WebPointerProperties::PointerType::Mouse;
- case ui::EventPointerType::POINTER_TYPE_PEN:
- return blink::WebPointerProperties::PointerType::Pen;
- case ui::EventPointerType::POINTER_TYPE_TOUCH:
- return blink::WebPointerProperties::PointerType::Touch;
- }
- NOTREACHED() << "Unexpected EventPointerType";
- return blink::WebPointerProperties::PointerType::Unknown;
-}
-
-// Creates a WebGestureEvent from a ui::GestureEvent. Note that it does not
-// populate the event coordinates (i.e. |x|, |y|, |globalX|, and |globalY|). So
-// the caller must populate these fields.
-blink::WebGestureEvent MakeWebGestureEventFromUIEvent(
- const ui::GestureEvent& event) {
- return ui::CreateWebGestureEvent(
- event.details(), event.time_stamp(), event.location_f(),
- event.root_location_f(), event.flags(), event.unique_touch_event_id());
-}
-
-} // namespace
-
-#if defined(OS_WIN)
-blink::WebMouseEvent MakeUntranslatedWebMouseEventFromNativeEvent(
- const base::NativeEvent& native_event,
- const base::TimeTicks& time_stamp,
- blink::WebPointerProperties::PointerType pointer_type);
-blink::WebMouseWheelEvent MakeUntranslatedWebMouseWheelEventFromNativeEvent(
- const base::NativeEvent& native_event,
- const base::TimeTicks& time_stamp,
- blink::WebPointerProperties::PointerType pointer_type);
-blink::WebKeyboardEvent MakeWebKeyboardEventFromNativeEvent(
- const base::NativeEvent& native_event,
- const base::TimeTicks& time_stamp);
-blink::WebGestureEvent MakeWebGestureEventFromNativeEvent(
- const base::NativeEvent& native_event,
- const base::TimeTicks& time_stamp);
-#endif
-
-blink::WebKeyboardEvent MakeWebKeyboardEventFromAuraEvent(
- const ui::KeyEvent& event) {
- blink::WebKeyboardEvent webkit_event;
-
- webkit_event.timeStampSeconds =
- ui::EventTimeStampToSeconds(event.time_stamp());
- webkit_event.modifiers = ui::EventFlagsToWebEventModifiers(event.flags()) |
- DomCodeToWebInputEventModifiers(event.code());
-
- switch (event.type()) {
- case ui::ET_KEY_PRESSED:
- webkit_event.type = event.is_char() ? blink::WebInputEvent::Char :
- blink::WebInputEvent::RawKeyDown;
- break;
- case ui::ET_KEY_RELEASED:
- webkit_event.type = blink::WebInputEvent::KeyUp;
- break;
- default:
- NOTREACHED();
- }
-
- if (webkit_event.modifiers & blink::WebInputEvent::AltKey)
- webkit_event.isSystemKey = true;
-
- // TODO(dtapuska): crbug.com/570388. Ozone appears to deliver
- // key_code events that aren't "located" for the keypad like
- // Windows and X11 do and blink expects.
- webkit_event.windowsKeyCode =
- ui::NonLocatedToLocatedKeypadKeyboardCode(event.key_code(), event.code());
- webkit_event.nativeKeyCode =
- ui::KeycodeConverter::DomCodeToNativeKeycode(event.code());
- webkit_event.domCode = static_cast<int>(event.code());
- webkit_event.domKey = static_cast<int>(event.GetDomKey());
- webkit_event.unmodifiedText[0] = event.GetUnmodifiedText();
- webkit_event.text[0] = event.GetText();
-
- return webkit_event;
-}
-
-blink::WebMouseWheelEvent MakeWebMouseWheelEventFromAuraEvent(
- const ui::ScrollEvent& event) {
- blink::WebMouseWheelEvent webkit_event;
-
- webkit_event.type = blink::WebInputEvent::MouseWheel;
- webkit_event.button = blink::WebMouseEvent::ButtonNone;
- webkit_event.modifiers = ui::EventFlagsToWebEventModifiers(event.flags());
- webkit_event.timeStampSeconds =
- ui::EventTimeStampToSeconds(event.time_stamp());
- webkit_event.hasPreciseScrollingDeltas = true;
-
- float offset_ordinal_x = 0.f;
- float offset_ordinal_y = 0.f;
- if ((event.flags() & ui::EF_SHIFT_DOWN) != 0 && event.x_offset() == 0) {
- webkit_event.deltaX = event.y_offset();
- webkit_event.deltaY = 0;
- offset_ordinal_x = event.y_offset_ordinal();
- offset_ordinal_y = event.x_offset_ordinal();
- } else {
- webkit_event.deltaX = event.x_offset();
- webkit_event.deltaY = event.y_offset();
- offset_ordinal_x = event.x_offset_ordinal();
- offset_ordinal_y = event.y_offset_ordinal();
- }
-
- if (offset_ordinal_x != 0.f && webkit_event.deltaX != 0.f)
- webkit_event.accelerationRatioX = offset_ordinal_x / webkit_event.deltaX;
- webkit_event.wheelTicksX = webkit_event.deltaX / kPixelsPerTick;
- webkit_event.wheelTicksY = webkit_event.deltaY / kPixelsPerTick;
- if (offset_ordinal_y != 0.f && webkit_event.deltaY != 0.f)
- webkit_event.accelerationRatioY = offset_ordinal_y / webkit_event.deltaY;
-
- webkit_event.pointerType =
- EventPointerTypeToWebPointerType(event.pointer_details().pointer_type);
- return webkit_event;
-}
-
-blink::WebGestureEvent MakeWebGestureEventFromAuraEvent(
- const ui::ScrollEvent& event) {
- blink::WebGestureEvent webkit_event;
-
- switch (event.type()) {
- case ui::ET_SCROLL_FLING_START:
- webkit_event.type = blink::WebInputEvent::GestureFlingStart;
- webkit_event.data.flingStart.velocityX = event.x_offset();
- webkit_event.data.flingStart.velocityY = event.y_offset();
- break;
- case ui::ET_SCROLL_FLING_CANCEL:
- webkit_event.type = blink::WebInputEvent::GestureFlingCancel;
- break;
- case ui::ET_SCROLL:
- NOTREACHED() << "Invalid gesture type: " << event.type();
- break;
- default:
- NOTREACHED() << "Unknown gesture type: " << event.type();
- }
-
- webkit_event.sourceDevice = blink::WebGestureDeviceTouchpad;
- webkit_event.modifiers = ui::EventFlagsToWebEventModifiers(event.flags());
- webkit_event.timeStampSeconds =
- ui::EventTimeStampToSeconds(event.time_stamp());
- return webkit_event;
-}
-
-blink::WebMouseEvent MakeWebMouseEventFromAuraEvent(
- const ui::MouseEvent& event);
-blink::WebMouseWheelEvent MakeWebMouseWheelEventFromAuraEvent(
- const ui::MouseWheelEvent& event);
-
-// General approach:
-//
-// ui::Event only carries a subset of possible event data provided to Aura by
-// the host platform. WebKit utilizes a larger subset of that information than
-// Aura itself. WebKit includes some built in cracking functionality that we
-// rely on to obtain this information cleanly and consistently.
-//
-// The only place where an ui::Event's data differs from what the underlying
-// base::NativeEvent would provide is position data, since we would like to
-// provide coordinates relative to the aura::Window that is hosting the
-// renderer, not the top level platform window.
-//
-// The approach is to fully construct a blink::WebInputEvent from the
-// ui::Event's base::NativeEvent, and then replace the coordinate fields with
-// the translated values from the ui::Event.
-//
-// The exception is mouse events on linux. The ui::MouseEvent contains enough
-// necessary information to construct a WebMouseEvent. So instead of extracting
-// the information from the XEvent, which can be tricky when supporting both
-// XInput2 and XInput, the WebMouseEvent is constructed from the
-// ui::MouseEvent. This will not be necessary once only XInput2 is supported.
-//
-
-blink::WebMouseEvent MakeWebMouseEvent(const ui::MouseEvent& event) {
- // Construct an untranslated event from the platform event data.
- blink::WebMouseEvent webkit_event =
-#if defined(OS_WIN)
- // On Windows we have WM_ events comming from desktop and pure aura
- // events comming from metro mode.
- event.native_event().message && (event.type() != ui::ET_MOUSE_EXITED)
- ? MakeUntranslatedWebMouseEventFromNativeEvent(
- event.native_event(), event.time_stamp(),
- EventPointerTypeToWebPointerType(
- event.pointer_details().pointer_type))
- : MakeWebMouseEventFromAuraEvent(event);
-#else
- MakeWebMouseEventFromAuraEvent(event);
-#endif
- // Replace the event's coordinate fields with translated position data from
- // |event|.
- webkit_event.windowX = webkit_event.x = event.x();
- webkit_event.windowY = webkit_event.y = event.y();
-
-#if defined(OS_WIN)
- if (event.native_event().message)
- return webkit_event;
-#endif
- const gfx::Point screen_point = GetScreenLocationFromEvent(event);
- webkit_event.globalX = screen_point.x();
- webkit_event.globalY = screen_point.y();
-
- return webkit_event;
-}
-
-blink::WebMouseWheelEvent MakeWebMouseWheelEvent(
- const ui::MouseWheelEvent& event) {
-#if defined(OS_WIN)
- // Construct an untranslated event from the platform event data.
- blink::WebMouseWheelEvent webkit_event =
- event.native_event().message
- ? MakeUntranslatedWebMouseWheelEventFromNativeEvent(
- event.native_event(), event.time_stamp(),
- EventPointerTypeToWebPointerType(
- event.pointer_details().pointer_type))
- : MakeWebMouseWheelEventFromAuraEvent(event);
-#else
- blink::WebMouseWheelEvent webkit_event =
- MakeWebMouseWheelEventFromAuraEvent(event);
-#endif
-
- // Replace the event's coordinate fields with translated position data from
- // |event|.
- webkit_event.windowX = webkit_event.x = event.x();
- webkit_event.windowY = webkit_event.y = event.y();
-
- const gfx::Point screen_point = GetScreenLocationFromEvent(event);
- webkit_event.globalX = screen_point.x();
- webkit_event.globalY = screen_point.y();
-
- return webkit_event;
-}
-
-blink::WebMouseWheelEvent MakeWebMouseWheelEvent(const ui::ScrollEvent& event) {
-#if defined(OS_WIN)
- // Construct an untranslated event from the platform event data.
- blink::WebMouseWheelEvent webkit_event =
- event.native_event().message
- ? MakeUntranslatedWebMouseWheelEventFromNativeEvent(
- event.native_event(), event.time_stamp(),
- EventPointerTypeToWebPointerType(
- event.pointer_details().pointer_type))
- : MakeWebMouseWheelEventFromAuraEvent(event);
-#else
- blink::WebMouseWheelEvent webkit_event =
- MakeWebMouseWheelEventFromAuraEvent(event);
-#endif
-
- // Replace the event's coordinate fields with translated position data from
- // |event|.
- webkit_event.windowX = webkit_event.x = event.x();
- webkit_event.windowY = webkit_event.y = event.y();
-
- const gfx::Point screen_point = GetScreenLocationFromEvent(event);
- webkit_event.globalX = screen_point.x();
- webkit_event.globalY = screen_point.y();
-
- return webkit_event;
-}
-
-blink::WebKeyboardEvent MakeWebKeyboardEvent(const ui::KeyEvent& event) {
- // Windows can figure out whether or not to construct a RawKeyDown or a Char
- // WebInputEvent based on the type of message carried in
- // event.native_event(). X11 is not so fortunate, there is no separate
- // translated event type, so DesktopHostLinux sends an extra KeyEvent with
- // is_char() == true. We need to pass the ui::KeyEvent to the X11 function
- // to detect this case so the right event type can be constructed.
-#if defined(OS_WIN)
- if (event.HasNativeEvent()) {
- // Key events require no translation by the aura system.
- blink::WebKeyboardEvent webkit_event(MakeWebKeyboardEventFromNativeEvent(
- event.native_event(), event.time_stamp()));
- webkit_event.modifiers |= DomCodeToWebInputEventModifiers(event.code());
- webkit_event.domCode = static_cast<int>(event.code());
- webkit_event.domKey = static_cast<int>(event.GetDomKey());
- return webkit_event;
- }
-#endif
- return MakeWebKeyboardEventFromAuraEvent(event);
-}
-
-blink::WebGestureEvent MakeWebGestureEvent(const ui::GestureEvent& event) {
- blink::WebGestureEvent gesture_event;
-#if defined(OS_WIN)
- if (event.HasNativeEvent())
- gesture_event = MakeWebGestureEventFromNativeEvent(event.native_event(),
- event.time_stamp());
- else
- gesture_event = MakeWebGestureEventFromUIEvent(event);
-#else
- gesture_event = MakeWebGestureEventFromUIEvent(event);
-#endif
-
- gesture_event.x = event.x();
- gesture_event.y = event.y();
-
- const gfx::Point screen_point = GetScreenLocationFromEvent(event);
- gesture_event.globalX = screen_point.x();
- gesture_event.globalY = screen_point.y();
-
- return gesture_event;
-}
-
-blink::WebGestureEvent MakeWebGestureEvent(const ui::ScrollEvent& event) {
- blink::WebGestureEvent gesture_event;
-
-#if defined(OS_WIN)
- gesture_event = MakeWebGestureEventFromNativeEvent(event.native_event(),
- event.time_stamp());
-#else
- gesture_event = MakeWebGestureEventFromAuraEvent(event);
-#endif
-
- gesture_event.x = event.x();
- gesture_event.y = event.y();
-
- const gfx::Point screen_point = GetScreenLocationFromEvent(event);
- gesture_event.globalX = screen_point.x();
- gesture_event.globalY = screen_point.y();
-
- return gesture_event;
-}
-
-blink::WebGestureEvent MakeWebGestureEventFlingCancel() {
- blink::WebGestureEvent gesture_event;
-
- // All other fields are ignored on a GestureFlingCancel event.
- gesture_event.type = blink::WebInputEvent::GestureFlingCancel;
- gesture_event.timeStampSeconds =
- ui::EventTimeStampToSeconds(ui::EventTimeForNow());
- gesture_event.sourceDevice = blink::WebGestureDeviceTouchpad;
- return gesture_event;
-}
-
-blink::WebMouseEvent MakeWebMouseEventFromAuraEvent(
- const ui::MouseEvent& event) {
- blink::WebMouseEvent webkit_event;
-
- webkit_event.modifiers = ui::EventFlagsToWebEventModifiers(event.flags());
- webkit_event.timeStampSeconds =
- ui::EventTimeStampToSeconds(event.time_stamp());
- webkit_event.button = blink::WebMouseEvent::ButtonNone;
- int button_flags = event.flags();
- if (event.type() == ui::ET_MOUSE_PRESSED ||
- event.type() == ui::ET_MOUSE_RELEASED) {
- // We want to use changed_button_flags() for mouse pressed & released.
- // These flags can be used only if they are set which is not always the case
- // (see e.g. GetChangedMouseButtonFlagsFromNative() in events_win.cc).
- if (event.changed_button_flags())
- button_flags = event.changed_button_flags();
- }
- if (button_flags & ui::EF_LEFT_MOUSE_BUTTON)
- webkit_event.button = blink::WebMouseEvent::ButtonLeft;
- if (button_flags & ui::EF_MIDDLE_MOUSE_BUTTON)
- webkit_event.button = blink::WebMouseEvent::ButtonMiddle;
- if (button_flags & ui::EF_RIGHT_MOUSE_BUTTON)
- webkit_event.button = blink::WebMouseEvent::ButtonRight;
-
- switch (event.type()) {
- case ui::ET_MOUSE_PRESSED:
- webkit_event.type = blink::WebInputEvent::MouseDown;
- webkit_event.clickCount = event.GetClickCount();
- break;
- case ui::ET_MOUSE_RELEASED:
- webkit_event.type = blink::WebInputEvent::MouseUp;
- webkit_event.clickCount = event.GetClickCount();
- break;
- case ui::ET_MOUSE_ENTERED:
- case ui::ET_MOUSE_EXITED:
- case ui::ET_MOUSE_MOVED:
- case ui::ET_MOUSE_DRAGGED:
- webkit_event.type = blink::WebInputEvent::MouseMove;
- break;
- default:
- NOTIMPLEMENTED() << "Received unexpected event: " << event.type();
- break;
- }
-
- webkit_event.tiltX = roundf(event.pointer_details().tilt_x);
- webkit_event.tiltY = roundf(event.pointer_details().tilt_y);
- webkit_event.force = event.pointer_details().force;
- webkit_event.pointerType =
- EventPointerTypeToWebPointerType(event.pointer_details().pointer_type);
-
- return webkit_event;
-}
-
-blink::WebMouseWheelEvent MakeWebMouseWheelEventFromAuraEvent(
- const ui::MouseWheelEvent& event) {
- blink::WebMouseWheelEvent webkit_event;
-
- webkit_event.type = blink::WebInputEvent::MouseWheel;
- webkit_event.button = blink::WebMouseEvent::ButtonNone;
- webkit_event.modifiers = ui::EventFlagsToWebEventModifiers(event.flags());
- webkit_event.timeStampSeconds =
- ui::EventTimeStampToSeconds(event.time_stamp());
-
- if ((event.flags() & ui::EF_SHIFT_DOWN) != 0 && event.x_offset() == 0) {
- webkit_event.deltaX = event.y_offset();
- webkit_event.deltaY = 0;
- } else {
- webkit_event.deltaX = event.x_offset();
- webkit_event.deltaY = event.y_offset();
- }
-
- webkit_event.wheelTicksX = webkit_event.deltaX / kPixelsPerTick;
- webkit_event.wheelTicksY = webkit_event.deltaY / kPixelsPerTick;
-
- webkit_event.tiltX = roundf(event.pointer_details().tilt_x);
- webkit_event.tiltY = roundf(event.pointer_details().tilt_y);
- webkit_event.force = event.pointer_details().force;
- webkit_event.pointerType =
- EventPointerTypeToWebPointerType(event.pointer_details().pointer_type);
-
- return webkit_event;
-}
-
-} // namespace content
« no previous file with comments | « content/browser/renderer_host/web_input_event_aura.h ('k') | content/browser/renderer_host/web_input_event_aura_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698