| Index: content/browser/renderer_host/input/web_input_event_util.cc
|
| diff --git a/content/browser/renderer_host/input/web_input_event_util.cc b/content/browser/renderer_host/input/web_input_event_util.cc
|
| index 150d83e8ee55a5024ce24dfefe0bba853db8207c..5de6ed44c9b97eb2fb3e3225f2a83e2a3b8a5365 100644
|
| --- a/content/browser/renderer_host/input/web_input_event_util.cc
|
| +++ b/content/browser/renderer_host/input/web_input_event_util.cc
|
| @@ -11,6 +11,7 @@
|
|
|
| #include "base/strings/string_util.h"
|
| #include "content/common/input/web_touch_event_traits.h"
|
| +#include "ui/events/blink/blink_event_util.h"
|
| #include "ui/events/event_constants.h"
|
| #include "ui/events/gesture_detection/gesture_event_data.h"
|
| #include "ui/events/gesture_detection/motion_event.h"
|
| @@ -140,106 +141,6 @@ const char* GetKeyIdentifier(ui::KeyboardCode key_code) {
|
| };
|
| }
|
|
|
| -WebInputEvent::Type ToWebInputEventType(MotionEvent::Action action) {
|
| - switch (action) {
|
| - case MotionEvent::ACTION_DOWN:
|
| - return WebInputEvent::TouchStart;
|
| - case MotionEvent::ACTION_MOVE:
|
| - return WebInputEvent::TouchMove;
|
| - case MotionEvent::ACTION_UP:
|
| - return WebInputEvent::TouchEnd;
|
| - case MotionEvent::ACTION_CANCEL:
|
| - return WebInputEvent::TouchCancel;
|
| - case MotionEvent::ACTION_POINTER_DOWN:
|
| - return WebInputEvent::TouchStart;
|
| - case MotionEvent::ACTION_POINTER_UP:
|
| - return WebInputEvent::TouchEnd;
|
| - }
|
| - NOTREACHED() << "Invalid MotionEvent::Action.";
|
| - return WebInputEvent::Undefined;
|
| -}
|
| -
|
| -// Note that |is_action_pointer| is meaningful only in the context of
|
| -// |ACTION_POINTER_UP| and |ACTION_POINTER_DOWN|; other actions map directly to
|
| -// WebTouchPoint::State.
|
| -WebTouchPoint::State ToWebTouchPointState(const MotionEvent& event,
|
| - size_t pointer_index) {
|
| - switch (event.GetAction()) {
|
| - case MotionEvent::ACTION_DOWN:
|
| - return WebTouchPoint::StatePressed;
|
| - case MotionEvent::ACTION_MOVE:
|
| - return WebTouchPoint::StateMoved;
|
| - case MotionEvent::ACTION_UP:
|
| - return WebTouchPoint::StateReleased;
|
| - case MotionEvent::ACTION_CANCEL:
|
| - return WebTouchPoint::StateCancelled;
|
| - case MotionEvent::ACTION_POINTER_DOWN:
|
| - return static_cast<int>(pointer_index) == event.GetActionIndex()
|
| - ? WebTouchPoint::StatePressed
|
| - : WebTouchPoint::StateStationary;
|
| - case MotionEvent::ACTION_POINTER_UP:
|
| - return static_cast<int>(pointer_index) == event.GetActionIndex()
|
| - ? WebTouchPoint::StateReleased
|
| - : WebTouchPoint::StateStationary;
|
| - }
|
| - NOTREACHED() << "Invalid MotionEvent::Action.";
|
| - return WebTouchPoint::StateUndefined;
|
| -}
|
| -
|
| -WebTouchPoint CreateWebTouchPoint(const MotionEvent& event,
|
| - size_t pointer_index) {
|
| - WebTouchPoint touch;
|
| - touch.id = event.GetPointerId(pointer_index);
|
| - touch.state = ToWebTouchPointState(event, pointer_index);
|
| - touch.position.x = event.GetX(pointer_index);
|
| - touch.position.y = event.GetY(pointer_index);
|
| - touch.screenPosition.x = event.GetRawX(pointer_index);
|
| - touch.screenPosition.y = event.GetRawY(pointer_index);
|
| -
|
| - // A note on touch ellipse specifications:
|
| - //
|
| - // Android MotionEvent provides the major and minor axes of the touch ellipse,
|
| - // as well as the orientation of the major axis clockwise from vertical, in
|
| - // radians. See:
|
| - // http://developer.android.com/reference/android/view/MotionEvent.html
|
| - //
|
| - // The proposed extension to W3C Touch Events specifies the touch ellipse
|
| - // using two radii along x- & y-axes and a positive acute rotation angle in
|
| - // degrees. See:
|
| - // http://dvcs.w3.org/hg/webevents/raw-file/default/touchevents.html
|
| -
|
| - float major_radius = event.GetTouchMajor(pointer_index) / 2.f;
|
| - float minor_radius = event.GetTouchMinor(pointer_index) / 2.f;
|
| -
|
| - DCHECK_LE(minor_radius, major_radius);
|
| - DCHECK_IMPLIES(major_radius, minor_radius);
|
| -
|
| - float orientation_deg = event.GetOrientation(pointer_index) * 180.f / M_PI;
|
| - DCHECK_GE(major_radius, 0);
|
| - DCHECK_GE(minor_radius, 0);
|
| - DCHECK_GE(major_radius, minor_radius);
|
| - // Allow a small bound tolerance to account for floating point conversion.
|
| - DCHECK_GT(orientation_deg, -90.01f);
|
| - DCHECK_LT(orientation_deg, 90.01f);
|
| - if (orientation_deg >= 0) {
|
| - // The case orientation_deg == 0 is handled here on purpose: although the
|
| - // 'else' block is equivalent in this case, we want to pass the 0 value
|
| - // unchanged (and 0 is the default value for many devices that don't
|
| - // report elliptical touches).
|
| - touch.radiusX = minor_radius;
|
| - touch.radiusY = major_radius;
|
| - touch.rotationAngle = orientation_deg;
|
| - } else {
|
| - touch.radiusX = major_radius;
|
| - touch.radiusY = minor_radius;
|
| - touch.rotationAngle = orientation_deg + 90;
|
| - }
|
| -
|
| - touch.force = event.GetPressure(pointer_index);
|
| -
|
| - return touch;
|
| -}
|
| -
|
| } // namespace
|
|
|
| namespace content {
|
| @@ -259,182 +160,6 @@ void UpdateWindowsKeyCodeAndKeyIdentifier(blink::WebKeyboardEvent* event,
|
| }
|
| }
|
|
|
| -blink::WebTouchEvent CreateWebTouchEventFromMotionEvent(
|
| - const ui::MotionEvent& event,
|
| - bool may_cause_scrolling) {
|
| - static_assert(static_cast<int>(MotionEvent::MAX_TOUCH_POINT_COUNT) ==
|
| - static_cast<int>(blink::WebTouchEvent::touchesLengthCap),
|
| - "inconsistent maximum number of active touch points");
|
| -
|
| - blink::WebTouchEvent result;
|
| -
|
| - WebTouchEventTraits::ResetType(
|
| - ToWebInputEventType(event.GetAction()),
|
| - (event.GetEventTime() - base::TimeTicks()).InSecondsF(),
|
| - &result);
|
| - result.causesScrollingIfUncanceled = may_cause_scrolling;
|
| -
|
| - result.modifiers = EventFlagsToWebEventModifiers(event.GetFlags());
|
| - result.touchesLength =
|
| - std::min(event.GetPointerCount(),
|
| - static_cast<size_t>(WebTouchEvent::touchesLengthCap));
|
| - DCHECK_GT(result.touchesLength, 0U);
|
| -
|
| - for (size_t i = 0; i < result.touchesLength; ++i)
|
| - result.touches[i] = CreateWebTouchPoint(event, i);
|
| -
|
| - return result;
|
| -}
|
| -
|
| -WebGestureEvent CreateWebGestureEvent(const ui::GestureEventDetails& details,
|
| - base::TimeDelta timestamp,
|
| - const gfx::PointF& location,
|
| - const gfx::PointF& raw_location,
|
| - int flags) {
|
| - WebGestureEvent gesture;
|
| - gesture.timeStampSeconds = timestamp.InSecondsF();
|
| - gesture.x = gfx::ToFlooredInt(location.x());
|
| - gesture.y = gfx::ToFlooredInt(location.y());
|
| - gesture.globalX = gfx::ToFlooredInt(raw_location.x());
|
| - gesture.globalY = gfx::ToFlooredInt(raw_location.y());
|
| - gesture.modifiers = EventFlagsToWebEventModifiers(flags);
|
| - gesture.sourceDevice = blink::WebGestureDeviceTouchscreen;
|
| -
|
| - switch (details.type()) {
|
| - case ui::ET_GESTURE_SHOW_PRESS:
|
| - gesture.type = WebInputEvent::GestureShowPress;
|
| - gesture.data.showPress.width = details.bounding_box_f().width();
|
| - gesture.data.showPress.height = details.bounding_box_f().height();
|
| - break;
|
| - case ui::ET_GESTURE_DOUBLE_TAP:
|
| - gesture.type = WebInputEvent::GestureDoubleTap;
|
| - DCHECK_EQ(1, details.tap_count());
|
| - gesture.data.tap.tapCount = details.tap_count();
|
| - gesture.data.tap.width = details.bounding_box_f().width();
|
| - gesture.data.tap.height = details.bounding_box_f().height();
|
| - break;
|
| - case ui::ET_GESTURE_TAP:
|
| - gesture.type = WebInputEvent::GestureTap;
|
| - DCHECK_GE(details.tap_count(), 1);
|
| - gesture.data.tap.tapCount = details.tap_count();
|
| - gesture.data.tap.width = details.bounding_box_f().width();
|
| - gesture.data.tap.height = details.bounding_box_f().height();
|
| - break;
|
| - case ui::ET_GESTURE_TAP_UNCONFIRMED:
|
| - gesture.type = WebInputEvent::GestureTapUnconfirmed;
|
| - DCHECK_EQ(1, details.tap_count());
|
| - gesture.data.tap.tapCount = details.tap_count();
|
| - gesture.data.tap.width = details.bounding_box_f().width();
|
| - gesture.data.tap.height = details.bounding_box_f().height();
|
| - break;
|
| - case ui::ET_GESTURE_LONG_PRESS:
|
| - gesture.type = WebInputEvent::GestureLongPress;
|
| - gesture.data.longPress.width = details.bounding_box_f().width();
|
| - gesture.data.longPress.height = details.bounding_box_f().height();
|
| - break;
|
| - case ui::ET_GESTURE_LONG_TAP:
|
| - gesture.type = WebInputEvent::GestureLongTap;
|
| - gesture.data.longPress.width = details.bounding_box_f().width();
|
| - gesture.data.longPress.height = details.bounding_box_f().height();
|
| - break;
|
| - case ui::ET_GESTURE_TWO_FINGER_TAP:
|
| - gesture.type = blink::WebInputEvent::GestureTwoFingerTap;
|
| - gesture.data.twoFingerTap.firstFingerWidth = details.first_finger_width();
|
| - gesture.data.twoFingerTap.firstFingerHeight =
|
| - details.first_finger_height();
|
| - break;
|
| - case ui::ET_GESTURE_SCROLL_BEGIN:
|
| - gesture.type = WebInputEvent::GestureScrollBegin;
|
| - gesture.data.scrollBegin.deltaXHint = details.scroll_x_hint();
|
| - gesture.data.scrollBegin.deltaYHint = details.scroll_y_hint();
|
| - break;
|
| - case ui::ET_GESTURE_SCROLL_UPDATE:
|
| - gesture.type = WebInputEvent::GestureScrollUpdate;
|
| - gesture.data.scrollUpdate.deltaX = details.scroll_x();
|
| - gesture.data.scrollUpdate.deltaY = details.scroll_y();
|
| - gesture.data.scrollUpdate.previousUpdateInSequencePrevented =
|
| - details.previous_scroll_update_in_sequence_prevented();
|
| - break;
|
| - case ui::ET_GESTURE_SCROLL_END:
|
| - gesture.type = WebInputEvent::GestureScrollEnd;
|
| - break;
|
| - case ui::ET_SCROLL_FLING_START:
|
| - gesture.type = WebInputEvent::GestureFlingStart;
|
| - gesture.data.flingStart.velocityX = details.velocity_x();
|
| - gesture.data.flingStart.velocityY = details.velocity_y();
|
| - break;
|
| - case ui::ET_SCROLL_FLING_CANCEL:
|
| - gesture.type = WebInputEvent::GestureFlingCancel;
|
| - break;
|
| - case ui::ET_GESTURE_PINCH_BEGIN:
|
| - gesture.type = WebInputEvent::GesturePinchBegin;
|
| - break;
|
| - case ui::ET_GESTURE_PINCH_UPDATE:
|
| - gesture.type = WebInputEvent::GesturePinchUpdate;
|
| - gesture.data.pinchUpdate.scale = details.scale();
|
| - break;
|
| - case ui::ET_GESTURE_PINCH_END:
|
| - gesture.type = WebInputEvent::GesturePinchEnd;
|
| - break;
|
| - case ui::ET_GESTURE_TAP_CANCEL:
|
| - gesture.type = WebInputEvent::GestureTapCancel;
|
| - break;
|
| - case ui::ET_GESTURE_TAP_DOWN:
|
| - gesture.type = WebInputEvent::GestureTapDown;
|
| - gesture.data.tapDown.width = details.bounding_box_f().width();
|
| - gesture.data.tapDown.height = details.bounding_box_f().height();
|
| - break;
|
| - case ui::ET_GESTURE_BEGIN:
|
| - case ui::ET_GESTURE_END:
|
| - case ui::ET_GESTURE_SWIPE:
|
| - // The caller is responsible for discarding these gestures appropriately.
|
| - gesture.type = WebInputEvent::Undefined;
|
| - break;
|
| - default:
|
| - NOTREACHED() << "ui::EventType provided wasn't a valid gesture event: "
|
| - << details.type();
|
| - }
|
| -
|
| - return gesture;
|
| -}
|
| -
|
| -WebGestureEvent CreateWebGestureEventFromGestureEventData(
|
| - const ui::GestureEventData& data) {
|
| - return CreateWebGestureEvent(data.details,
|
| - data.time - base::TimeTicks(),
|
| - gfx::PointF(data.x, data.y),
|
| - gfx::PointF(data.raw_x, data.raw_y),
|
| - data.flags);
|
| -}
|
| -
|
| -int EventFlagsToWebEventModifiers(int flags) {
|
| - int modifiers = 0;
|
| -
|
| - if (flags & ui::EF_SHIFT_DOWN)
|
| - modifiers |= blink::WebInputEvent::ShiftKey;
|
| - if (flags & ui::EF_CONTROL_DOWN)
|
| - modifiers |= blink::WebInputEvent::ControlKey;
|
| - if (flags & ui::EF_ALT_DOWN)
|
| - modifiers |= blink::WebInputEvent::AltKey;
|
| - if (flags & ui::EF_COMMAND_DOWN)
|
| - modifiers |= blink::WebInputEvent::MetaKey;
|
| -
|
| - if (flags & ui::EF_LEFT_MOUSE_BUTTON)
|
| - modifiers |= blink::WebInputEvent::LeftButtonDown;
|
| - if (flags & ui::EF_MIDDLE_MOUSE_BUTTON)
|
| - modifiers |= blink::WebInputEvent::MiddleButtonDown;
|
| - if (flags & ui::EF_RIGHT_MOUSE_BUTTON)
|
| - modifiers |= blink::WebInputEvent::RightButtonDown;
|
| - if (flags & ui::EF_CAPS_LOCK_DOWN)
|
| - modifiers |= blink::WebInputEvent::CapsLockOn;
|
| - if (flags & ui::EF_IS_REPEAT)
|
| - modifiers |= blink::WebInputEvent::IsAutoRepeat;
|
| - if (flags & ui::EF_NUMPAD_KEY)
|
| - modifiers |= blink::WebInputEvent::IsKeyPad;
|
| -
|
| - return modifiers;
|
| -}
|
| -
|
| int WebEventModifiersToEventFlags(int modifiers) {
|
| int flags = 0;
|
|
|
|
|