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

Unified Diff: third_party/WebKit/Source/web/WebInputEventConversion.cpp

Issue 2646163002: Remove PlatformTouchEvent/Point and use WebTouchEvent/Point instead (Closed)
Patch Set: Fix nit Created 3 years, 11 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: 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;
}
« no previous file with comments | « third_party/WebKit/Source/web/WebInputEventConversion.h ('k') | third_party/WebKit/Source/web/WebPluginContainerImpl.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698