| Index: third_party/WebKit/Source/web/WebInputEventConversion.cpp
|
| diff --git a/third_party/WebKit/Source/web/WebInputEventConversion.cpp b/third_party/WebKit/Source/web/WebInputEventConversion.cpp
|
| index f720a9fa7f693772cc4be9dddbcf18de1e635cf2..aed825ce918ec8e496f48ca293ac7ab271801bc2 100644
|
| --- a/third_party/WebKit/Source/web/WebInputEventConversion.cpp
|
| +++ b/third_party/WebKit/Source/web/WebInputEventConversion.cpp
|
| @@ -89,11 +89,6 @@ float scaleDeltaToWindow(const Widget* widget, float delta) {
|
| return delta / frameScale(widget);
|
| }
|
|
|
| -FloatSize scaleSizeToWindow(const Widget* widget, FloatSize size) {
|
| - return FloatSize(scaleDeltaToWindow(widget, size.width()),
|
| - scaleDeltaToWindow(widget, size.height()));
|
| -}
|
| -
|
| // This method converts from the renderer's coordinate space into Blink's root
|
| // frame coordinate space. It's somewhat unique in that it takes into account
|
| // DevTools emulation, which applies a scale and offset in the root layer (see
|
| @@ -127,31 +122,6 @@ FloatPoint convertHitPointToRootFrame(const Widget* widget,
|
| visualViewport.y() + overscrollOffset.height());
|
| }
|
|
|
| -PlatformEvent::DispatchType toPlatformDispatchType(
|
| - WebInputEvent::DispatchType type) {
|
| - static_assert(PlatformEvent::DispatchType::Blocking ==
|
| - static_cast<PlatformEvent::DispatchType>(
|
| - WebInputEvent::DispatchType::Blocking),
|
| - "Dispatch Types not equal");
|
| - static_assert(PlatformEvent::DispatchType::EventNonBlocking ==
|
| - static_cast<PlatformEvent::DispatchType>(
|
| - WebInputEvent::DispatchType::EventNonBlocking),
|
| - "Dispatch Types not equal");
|
| - static_assert(
|
| - PlatformEvent::DispatchType::ListenersNonBlockingPassive ==
|
| - static_cast<PlatformEvent::DispatchType>(
|
| - WebInputEvent::DispatchType::ListenersNonBlockingPassive),
|
| - "Dispatch Types not equal");
|
| - static_assert(
|
| - PlatformEvent::DispatchType::ListenersForcedNonBlockingDueToFling ==
|
| - static_cast<PlatformEvent::DispatchType>(
|
| - WebInputEvent::DispatchType::
|
| - ListenersForcedNonBlockingDueToFling),
|
| - "Dispatch Types not equal");
|
| -
|
| - return static_cast<PlatformEvent::DispatchType>(type);
|
| -}
|
| -
|
| unsigned toPlatformModifierFrom(WebMouseEvent::Button button) {
|
| if (button == WebMouseEvent::Button::NoButton)
|
| return 0;
|
| @@ -163,6 +133,45 @@ unsigned toPlatformModifierFrom(WebMouseEvent::Button button) {
|
| return webMouseButtonToPlatformModifier[static_cast<int>(button)];
|
| }
|
|
|
| +FloatPoint convertAbsoluteLocationForLayoutObjectFloat(
|
| + const DoublePoint& location,
|
| + const LayoutItem layoutItem) {
|
| + return layoutItem.absoluteToLocal(FloatPoint(location), UseTransforms);
|
| +}
|
| +
|
| +IntPoint convertAbsoluteLocationForLayoutObjectInt(
|
| + const DoublePoint& location,
|
| + const LayoutItem layoutItem) {
|
| + return roundedIntPoint(
|
| + convertAbsoluteLocationForLayoutObjectFloat(location, layoutItem));
|
| +}
|
| +
|
| +// FIXME: Change |widget| to const Widget& after RemoteFrames get
|
| +// RemoteFrameViews.
|
| +void updateWebMouseEventFromCoreMouseEvent(const MouseEvent& event,
|
| + const Widget* widget,
|
| + const LayoutItem layoutItem,
|
| + WebMouseEvent& webEvent) {
|
| + webEvent.setTimeStampSeconds(event.platformTimeStamp().InSeconds());
|
| + webEvent.setModifiers(event.modifiers());
|
| +
|
| + FrameView* view = widget ? toFrameView(widget->parent()) : 0;
|
| + // TODO(bokan): If view == nullptr, pointInRootFrame will really be
|
| + // pointInRootContent.
|
| + IntPoint pointInRootFrame(event.absoluteLocation().x(),
|
| + event.absoluteLocation().y());
|
| + if (view)
|
| + pointInRootFrame = view->contentsToRootFrame(pointInRootFrame);
|
| + webEvent.globalX = event.screenX();
|
| + webEvent.globalY = event.screenY();
|
| + webEvent.windowX = pointInRootFrame.x();
|
| + webEvent.windowY = pointInRootFrame.y();
|
| + IntPoint localPoint = convertAbsoluteLocationForLayoutObjectInt(
|
| + event.absoluteLocation(), layoutItem);
|
| + webEvent.x = localPoint.x();
|
| + webEvent.y = localPoint.y();
|
| +}
|
| +
|
| } // namespace
|
|
|
| // MakePlatformMouseEvent -----------------------------------------------------
|
| @@ -227,127 +236,23 @@ WebGestureEvent TransformWebGestureEvent(Widget* widget,
|
| return result;
|
| }
|
|
|
| -inline PlatformEvent::EventType toPlatformTouchEventType(
|
| - const WebInputEvent::Type type) {
|
| - switch (type) {
|
| - case WebInputEvent::TouchStart:
|
| - return PlatformEvent::TouchStart;
|
| - case WebInputEvent::TouchMove:
|
| - return PlatformEvent::TouchMove;
|
| - case WebInputEvent::TouchEnd:
|
| - return PlatformEvent::TouchEnd;
|
| - case WebInputEvent::TouchCancel:
|
| - return PlatformEvent::TouchCancel;
|
| - case WebInputEvent::TouchScrollStarted:
|
| - return PlatformEvent::TouchScrollStarted;
|
| - default:
|
| - NOTREACHED();
|
| - }
|
| - return PlatformEvent::TouchStart;
|
| -}
|
| -
|
| -inline PlatformTouchPoint::TouchState toPlatformTouchPointState(
|
| - const WebTouchPoint::State state) {
|
| - switch (state) {
|
| - case WebTouchPoint::StateReleased:
|
| - return PlatformTouchPoint::TouchReleased;
|
| - case WebTouchPoint::StatePressed:
|
| - return PlatformTouchPoint::TouchPressed;
|
| - case WebTouchPoint::StateMoved:
|
| - return PlatformTouchPoint::TouchMoved;
|
| - case WebTouchPoint::StateStationary:
|
| - return PlatformTouchPoint::TouchStationary;
|
| - case WebTouchPoint::StateCancelled:
|
| - return PlatformTouchPoint::TouchCancelled;
|
| - case WebTouchPoint::StateUndefined:
|
| - NOTREACHED();
|
| - }
|
| - return PlatformTouchPoint::TouchReleased;
|
| -}
|
| -
|
| -inline WebTouchPoint::State toWebTouchPointState(const AtomicString& type) {
|
| - if (type == EventTypeNames::touchend)
|
| - return WebTouchPoint::StateReleased;
|
| - if (type == EventTypeNames::touchcancel)
|
| - return WebTouchPoint::StateCancelled;
|
| - if (type == EventTypeNames::touchstart)
|
| - return WebTouchPoint::StatePressed;
|
| - if (type == EventTypeNames::touchmove)
|
| - return WebTouchPoint::StateMoved;
|
| - return WebTouchPoint::StateUndefined;
|
| -}
|
| -
|
| -// TODO(mustaq): Add tests for this.
|
| -PlatformTouchPointBuilder::PlatformTouchPointBuilder(
|
| - Widget* widget,
|
| - const WebTouchPoint& point) {
|
| - m_pointerProperties = point;
|
| - m_state = toPlatformTouchPointState(point.state);
|
| -
|
| - FloatPoint floatPos = convertHitPointToRootFrame(widget, point.position);
|
| - IntPoint flooredPoint = flooredIntPoint(floatPos);
|
| - m_pos =
|
| - widget->convertFromRootFrame(flooredPoint) + (floatPos - flooredPoint);
|
| -
|
| - m_screenPos = FloatPoint(point.screenPosition.x, point.screenPosition.y);
|
| - m_radius = scaleSizeToWindow(widget, FloatSize(point.radiusX, point.radiusY));
|
| - m_rotationAngle = point.rotationAngle;
|
| -}
|
| -
|
| -PlatformTouchEventBuilder::PlatformTouchEventBuilder(
|
| - Widget* widget,
|
| - const WebTouchEvent& event) {
|
| - m_type = toPlatformTouchEventType(event.type());
|
| - m_modifiers = event.modifiers();
|
| - m_timestamp = TimeTicks::FromSeconds(event.timeStampSeconds());
|
| - m_causesScrollingIfUncanceled = event.movedBeyondSlopRegion;
|
| - m_touchStartOrFirstTouchMove = event.touchStartOrFirstTouchMove;
|
| -
|
| - for (unsigned i = 0; i < event.touchesLength; ++i)
|
| - m_touchPoints.push_back(
|
| - PlatformTouchPointBuilder(widget, event.touches[i]));
|
| -
|
| - m_dispatchType = toPlatformDispatchType(event.dispatchType);
|
| - m_uniqueTouchEventId = event.uniqueTouchEventId;
|
| -}
|
| -
|
| -static FloatPoint convertAbsoluteLocationForLayoutObjectFloat(
|
| - const DoublePoint& location,
|
| - const LayoutItem layoutItem) {
|
| - return layoutItem.absoluteToLocal(FloatPoint(location), UseTransforms);
|
| -}
|
| -
|
| -static IntPoint convertAbsoluteLocationForLayoutObjectInt(
|
| - const DoublePoint& location,
|
| - const LayoutItem layoutItem) {
|
| - return roundedIntPoint(
|
| - convertAbsoluteLocationForLayoutObjectFloat(location, layoutItem));
|
| +WebTouchEvent TransformWebTouchEvent(float frameScale,
|
| + FloatPoint frameTranslate,
|
| + const WebTouchEvent& event) {
|
| + // frameScale is default initialized in debug builds to be 0.
|
| + DCHECK_EQ(0, event.frameScale());
|
| + DCHECK_EQ(0, event.frameTranslate().x);
|
| + DCHECK_EQ(0, event.frameTranslate().y);
|
| + WebTouchEvent result = event;
|
| + result.setFrameScale(frameScale);
|
| + result.setFrameTranslate(frameTranslate);
|
| + return result;
|
| }
|
|
|
| -// FIXME: Change |widget| to const Widget& after RemoteFrames get
|
| -// RemoteFrameViews.
|
| -static void updateWebMouseEventFromCoreMouseEvent(const MouseEvent& event,
|
| - const Widget* widget,
|
| - const LayoutItem layoutItem,
|
| - WebMouseEvent& webEvent) {
|
| - webEvent.setTimeStampSeconds(event.platformTimeStamp().InSeconds());
|
| - webEvent.setModifiers(event.modifiers());
|
| -
|
| - FrameView* view = widget ? toFrameView(widget->parent()) : 0;
|
| - // TODO(bokan): If view == nullptr, pointInRootFrame will really be
|
| - // pointInRootContent.
|
| - IntPoint pointInRootFrame(event.absoluteLocation().x(),
|
| - event.absoluteLocation().y());
|
| - if (view)
|
| - pointInRootFrame = view->contentsToRootFrame(pointInRootFrame);
|
| - webEvent.globalX = event.screenX();
|
| - webEvent.globalY = event.screenY();
|
| - webEvent.windowX = pointInRootFrame.x();
|
| - webEvent.windowY = pointInRootFrame.y();
|
| - IntPoint localPoint = convertAbsoluteLocationForLayoutObjectInt(
|
| - event.absoluteLocation(), layoutItem);
|
| - webEvent.x = localPoint.x();
|
| - webEvent.y = localPoint.y();
|
| +WebTouchEvent TransformWebTouchEvent(Widget* widget,
|
| + const WebTouchEvent& event) {
|
| + return TransformWebTouchEvent(frameScale(widget), frameTranslation(widget),
|
| + event);
|
| }
|
|
|
| WebMouseEventBuilder::WebMouseEventBuilder(const Widget* widget,
|
| @@ -437,6 +342,8 @@ WebMouseEventBuilder::WebMouseEventBuilder(const Widget* widget,
|
|
|
| m_timeStampSeconds = event.platformTimeStamp().InSeconds();
|
| m_modifiers = event.modifiers();
|
| + m_frameScale = 1;
|
| + m_frameTranslate = WebFloatPoint();
|
|
|
| // The mouse event co-ordinates should be generated from the co-ordinates of
|
| // the touch point.
|
| @@ -489,99 +396,6 @@ WebKeyboardEventBuilder::WebKeyboardEventBuilder(const KeyboardEvent& event) {
|
| windowsKeyCode = event.keyCode();
|
| }
|
|
|
| -static WebTouchPoint toWebTouchPoint(const Touch* touch,
|
| - const LayoutItem layoutItem,
|
| - WebTouchPoint::State state,
|
| - WebPointerProperties::PointerType type) {
|
| - WebTouchPoint point;
|
| - point.pointerType = type;
|
| - point.id = touch->identifier();
|
| - point.screenPosition = touch->screenLocation();
|
| - point.position = convertAbsoluteLocationForLayoutObjectFloat(
|
| - DoublePoint(touch->absoluteLocation()), layoutItem);
|
| - point.radiusX = touch->radiusX();
|
| - point.radiusY = touch->radiusY();
|
| - point.rotationAngle = touch->rotationAngle();
|
| - point.force = touch->force();
|
| - point.state = state;
|
| - return point;
|
| -}
|
| -
|
| -static unsigned indexOfTouchPointWithId(const WebTouchPoint* touchPoints,
|
| - unsigned touchPointsLength,
|
| - unsigned id) {
|
| - for (unsigned i = 0; i < touchPointsLength; ++i) {
|
| - if (touchPoints[i].id == static_cast<int>(id))
|
| - return i;
|
| - }
|
| - return std::numeric_limits<unsigned>::max();
|
| -}
|
| -
|
| -static void addTouchPointsUpdateStateIfNecessary(
|
| - WebTouchPoint::State state,
|
| - TouchList* touches,
|
| - WebTouchPoint* touchPoints,
|
| - unsigned* touchPointsLength,
|
| - const LayoutItem layoutItem,
|
| - WebPointerProperties::PointerType pointerType) {
|
| - unsigned initialTouchPointsLength = *touchPointsLength;
|
| - for (unsigned i = 0; i < touches->length(); ++i) {
|
| - const unsigned pointIndex = *touchPointsLength;
|
| - if (pointIndex >= static_cast<unsigned>(WebTouchEvent::kTouchesLengthCap))
|
| - return;
|
| -
|
| - const Touch* touch = touches->item(i);
|
| - unsigned existingPointIndex = indexOfTouchPointWithId(
|
| - touchPoints, initialTouchPointsLength, touch->identifier());
|
| - if (existingPointIndex != std::numeric_limits<unsigned>::max()) {
|
| - touchPoints[existingPointIndex].state = state;
|
| - } else {
|
| - touchPoints[pointIndex] =
|
| - toWebTouchPoint(touch, layoutItem, state, pointerType);
|
| - ++(*touchPointsLength);
|
| - }
|
| - }
|
| -}
|
| -
|
| -WebTouchEventBuilder::WebTouchEventBuilder(const LayoutItem layoutItem,
|
| - const TouchEvent& event) {
|
| - if (event.type() == EventTypeNames::touchstart)
|
| - m_type = TouchStart;
|
| - else if (event.type() == EventTypeNames::touchmove)
|
| - m_type = TouchMove;
|
| - else if (event.type() == EventTypeNames::touchend)
|
| - m_type = TouchEnd;
|
| - else if (event.type() == EventTypeNames::touchcancel)
|
| - m_type = TouchCancel;
|
| - else {
|
| - NOTREACHED();
|
| - m_type = Undefined;
|
| - return;
|
| - }
|
| -
|
| - m_timeStampSeconds = event.platformTimeStamp().InSeconds();
|
| - m_modifiers = event.modifiers();
|
| - dispatchType = event.cancelable() ? WebInputEvent::Blocking
|
| - : WebInputEvent::EventNonBlocking;
|
| - movedBeyondSlopRegion = event.causesScrollingIfUncanceled();
|
| -
|
| - // Currently touches[] is empty, add stationary points as-is.
|
| - for (unsigned i = 0;
|
| - i < event.touches()->length() &&
|
| - i < static_cast<unsigned>(WebTouchEvent::kTouchesLengthCap);
|
| - ++i) {
|
| - touches[i] =
|
| - toWebTouchPoint(event.touches()->item(i), layoutItem,
|
| - WebTouchPoint::StateStationary, event.pointerType());
|
| - ++touchesLength;
|
| - }
|
| - // If any existing points are also in the change list, we should update
|
| - // their state, otherwise just add the new points.
|
| - addTouchPointsUpdateStateIfNecessary(
|
| - toWebTouchPointState(event.type()), event.changedTouches(), touches,
|
| - &touchesLength, layoutItem, event.pointerType());
|
| -}
|
| -
|
| Vector<PlatformMouseEvent> createPlatformMouseEventVector(
|
| Widget* widget,
|
| const std::vector<const WebInputEvent*>& coalescedEvents) {
|
| @@ -594,14 +408,16 @@ Vector<PlatformMouseEvent> createPlatformMouseEventVector(
|
| return result;
|
| }
|
|
|
| -Vector<PlatformTouchEvent> createPlatformTouchEventVector(
|
| +Vector<WebTouchEvent> TransformWebTouchEventVector(
|
| Widget* widget,
|
| const std::vector<const WebInputEvent*>& coalescedEvents) {
|
| - Vector<PlatformTouchEvent> result;
|
| + float scale = frameScale(widget);
|
| + FloatPoint translation = frameTranslation(widget);
|
| + Vector<WebTouchEvent> result;
|
| for (const auto& event : coalescedEvents) {
|
| DCHECK(WebInputEvent::isTouchEventType(event->type()));
|
| - result.push_back(PlatformTouchEventBuilder(
|
| - widget, static_cast<const WebTouchEvent&>(*event)));
|
| + result.push_back(TransformWebTouchEvent(
|
| + scale, translation, static_cast<const WebTouchEvent&>(*event)));
|
| }
|
| return result;
|
| }
|
|
|