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

Unified Diff: Source/WebKit/chromium/src/WebInputEventConversion.cpp

Issue 12319074: Merge 142571 (Closed) Base URL: http://svn.webkit.org/repository/webkit/branches/chromium/1410/
Patch Set: Created 7 years, 10 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
« no previous file with comments | « Source/WebKit/chromium/public/WebInputEvent.h ('k') | Source/WebKit/chromium/src/WebViewImpl.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/WebKit/chromium/src/WebInputEventConversion.cpp
===================================================================
--- Source/WebKit/chromium/src/WebInputEventConversion.cpp (revision 143772)
+++ Source/WebKit/chromium/src/WebInputEventConversion.cpp (working copy)
@@ -54,16 +54,29 @@
static const double millisPerSecond = 1000.0;
+static float widgetScaleFactor(const Widget* widget)
+{
+ if (!widget)
+ return 1;
+
+ ScrollView* rootView = widget->root();
+ if (!rootView)
+ return 1;
+
+ return rootView->visibleContentScaleFactor();
+}
+
// MakePlatformMouseEvent -----------------------------------------------------
PlatformMouseEventBuilder::PlatformMouseEventBuilder(Widget* widget, const WebMouseEvent& e)
{
+ float scale = widgetScaleFactor(widget);
// FIXME: widget is always toplevel, unless it's a popup. We may be able
// to get rid of this once we abstract popups into a WebKit API.
- m_position = widget->convertFromContainingWindow(IntPoint(e.x, e.y));
+ m_position = widget->convertFromContainingWindow(IntPoint(e.x / scale, e.y / scale));
m_globalPosition = IntPoint(e.globalX, e.globalY);
#if ENABLE(POINTER_LOCK)
- m_movementDelta = IntPoint(e.movementX, e.movementY);
+ m_movementDelta = IntPoint(e.movementX / scale, e.movementY / scale);
#endif
m_button = static_cast<MouseButton>(e.button);
@@ -104,7 +117,8 @@
PlatformWheelEventBuilder::PlatformWheelEventBuilder(Widget* widget, const WebMouseWheelEvent& e)
{
- m_position = widget->convertFromContainingWindow(IntPoint(e.x, e.y));
+ float scale = widgetScaleFactor(widget);
+ m_position = widget->convertFromContainingWindow(IntPoint(e.x / scale, e.y / scale));
m_globalPosition = IntPoint(e.globalX, e.globalY);
m_deltaX = e.deltaX;
m_deltaY = e.deltaY;
@@ -141,6 +155,7 @@
#if ENABLE(GESTURE_EVENTS)
PlatformGestureEventBuilder::PlatformGestureEventBuilder(Widget* widget, const WebGestureEvent& e)
{
+ float scale = widgetScaleFactor(widget);
switch (e.type) {
case WebInputEvent::GestureScrollBegin:
m_type = PlatformEvent::GestureScrollBegin;
@@ -150,23 +165,23 @@
break;
case WebInputEvent::GestureScrollUpdate:
m_type = PlatformEvent::GestureScrollUpdate;
- m_deltaX = e.data.scrollUpdate.deltaX;
- m_deltaY = e.data.scrollUpdate.deltaY;
+ m_deltaX = e.data.scrollUpdate.deltaX / scale;
+ m_deltaY = e.data.scrollUpdate.deltaY / scale;
break;
case WebInputEvent::GestureScrollUpdateWithoutPropagation:
m_type = PlatformEvent::GestureScrollUpdateWithoutPropagation;
- m_deltaX = e.data.scrollUpdate.deltaX;
- m_deltaY = e.data.scrollUpdate.deltaY;
+ m_deltaX = e.data.scrollUpdate.deltaX / scale;
+ m_deltaY = e.data.scrollUpdate.deltaY / scale;
break;
case WebInputEvent::GestureTap:
m_type = PlatformEvent::GestureTap;
- m_area = IntSize(e.data.tap.width, e.data.tap.height);
+ m_area = expandedIntSize(FloatSize(e.data.tap.width / scale, e.data.tap.height / scale));
// FIXME: PlatformGestureEvent deltaX is overloaded - wkb.ug/93123
m_deltaX = static_cast<int>(e.data.tap.tapCount);
break;
case WebInputEvent::GestureTapDown:
m_type = PlatformEvent::GestureTapDown;
- m_area = IntSize(e.data.tapDown.width, e.data.tapDown.height);
+ m_area = expandedIntSize(FloatSize(e.data.tapDown.width / scale, e.data.tapDown.height / scale));
break;
case WebInputEvent::GestureTapCancel:
m_type = PlatformEvent::GestureTapDownCancel;
@@ -176,15 +191,15 @@
break;
case WebInputEvent::GestureTwoFingerTap:
m_type = PlatformEvent::GestureTwoFingerTap;
- m_area = IntSize(e.data.twoFingerTap.firstFingerWidth, e.data.twoFingerTap.firstFingerHeight);
+ m_area = expandedIntSize(FloatSize(e.data.twoFingerTap.firstFingerWidth / scale, e.data.twoFingerTap.firstFingerHeight / scale));
break;
case WebInputEvent::GestureLongPress:
m_type = PlatformEvent::GestureLongPress;
- m_area = IntSize(e.data.longPress.width, e.data.longPress.height);
+ m_area = expandedIntSize(FloatSize(e.data.longPress.width / scale, e.data.longPress.height / scale));
break;
case WebInputEvent::GestureLongTap:
m_type = PlatformEvent::GestureLongTap;
- m_area = IntSize(e.data.longPress.width, e.data.longPress.height);
+ m_area = expandedIntSize(FloatSize(e.data.longPress.width / scale, e.data.longPress.height / scale));
break;
case WebInputEvent::GesturePinchBegin:
m_type = PlatformEvent::GesturePinchBegin;
@@ -200,7 +215,7 @@
default:
ASSERT_NOT_REACHED();
}
- m_position = widget->convertFromContainingWindow(IntPoint(e.x, e.y));
+ m_position = widget->convertFromContainingWindow(IntPoint(e.x / scale, e.y / scale));
m_globalPosition = IntPoint(e.globalX, e.globalY);
m_timestamp = e.timeStampSeconds;
@@ -362,12 +377,13 @@
PlatformTouchPointBuilder::PlatformTouchPointBuilder(Widget* widget, const WebTouchPoint& point)
{
+ float scale = widgetScaleFactor(widget);
m_id = point.id;
m_state = toPlatformTouchPointState(point.state);
- m_pos = widget->convertFromContainingWindow(point.position);
+ m_pos = widget->convertFromContainingWindow(IntPoint(point.position.x / scale, point.position.y / scale));
m_screenPos = point.screenPosition;
- m_radiusY = point.radiusY;
- m_radiusX = point.radiusX;
+ m_radiusY = point.radiusY / scale;
+ m_radiusX = point.radiusX / scale;
m_rotationAngle = point.rotationAngle;
m_force = point.force;
}
@@ -414,18 +430,19 @@
static void updateWebMouseEventFromWebCoreMouseEvent(const MouseRelatedEvent& event, const Widget& widget, const WebCore::RenderObject& renderObject, WebMouseEvent& webEvent)
{
+ float scale = widgetScaleFactor(&widget);
webEvent.timeStampSeconds = event.timeStamp() / millisPerSecond;
webEvent.modifiers = getWebInputModifiers(event);
- ScrollView* view = widget.parent();
+ ScrollView* view = widget.root();
IntPoint windowPoint = view->contentsToWindow(IntPoint(event.absoluteLocation().x(), event.absoluteLocation().y()));
webEvent.globalX = event.screenX();
webEvent.globalY = event.screenY();
- webEvent.windowX = windowPoint.x();
- webEvent.windowY = windowPoint.y();
+ webEvent.windowX = windowPoint.x() * scale;
+ webEvent.windowY = windowPoint.y() * scale;
IntPoint localPoint = convertAbsoluteLocationForRenderObject(event.absoluteLocation(), renderObject);
- webEvent.x = localPoint.x();
- webEvent.y = localPoint.y();
+ webEvent.x = localPoint.x() * scale;
+ webEvent.y = localPoint.y() * scale;
}
WebMouseEventBuilder::WebMouseEventBuilder(const Widget* widget, const WebCore::RenderObject* renderObject, const MouseEvent& event)
@@ -472,14 +489,16 @@
}
}
#if ENABLE(POINTER_LOCK)
- movementX = event.webkitMovementX();
- movementY = event.webkitMovementY();
+ float scale = widgetScaleFactor(widget);
+ movementX = event.webkitMovementX() * scale;
+ movementY = event.webkitMovementY() * scale;
#endif
clickCount = event.detail();
}
WebMouseEventBuilder::WebMouseEventBuilder(const Widget* widget, const WebCore::RenderObject* renderObject, const TouchEvent& event)
{
+ float scale = widgetScaleFactor(widget);
if (!event.touches())
return;
if (event.touches()->length() != 1) {
@@ -507,8 +526,8 @@
clickCount = (type == MouseDown || type == MouseUp);
IntPoint localPoint = convertAbsoluteLocationForRenderObject(touch->absoluteLocation(), *renderObject);
- x = localPoint.x();
- y = localPoint.y();
+ x = localPoint.x() * scale;
+ y = localPoint.y() * scale;
}
WebMouseWheelEventBuilder::WebMouseWheelEventBuilder(const Widget* widget, const WebCore::RenderObject* renderObject, const WheelEvent& event)
@@ -562,8 +581,9 @@
#if ENABLE(TOUCH_EVENTS)
-static void addTouchPoints(const AtomicString& touchType, TouchList* touches, WebTouchPoint* touchPoints, unsigned* touchPointsLength, const WebCore::RenderObject* renderObject)
+static void addTouchPoints(const Widget* widget, const AtomicString& touchType, TouchList* touches, WebTouchPoint* touchPoints, unsigned* touchPointsLength, const WebCore::RenderObject* renderObject)
{
+ float scale = widgetScaleFactor(widget);
unsigned numberOfTouches = std::min(touches->length(), static_cast<unsigned>(WebTouchEvent::touchesLengthCap));
for (unsigned i = 0; i < numberOfTouches; ++i) {
const Touch* touch = touches->item(i);
@@ -572,8 +592,10 @@
point.id = touch->identifier();
point.screenPosition = WebPoint(touch->screenX(), touch->screenY());
point.position = convertAbsoluteLocationForRenderObject(touch->absoluteLocation(), *renderObject);
- point.radiusX = touch->webkitRadiusX();
- point.radiusY = touch->webkitRadiusY();
+ point.position.x *= scale;
+ point.position.y *= scale;
+ point.radiusX = touch->webkitRadiusX() * scale;
+ point.radiusY = touch->webkitRadiusY() * scale;
point.rotationAngle = touch->webkitRotationAngle();
point.force = touch->webkitForce();
point.state = toWebTouchPointState(touchType);
@@ -602,9 +624,9 @@
modifiers = getWebInputModifiers(event);
timeStampSeconds = event.timeStamp() / millisPerSecond;
- addTouchPoints(event.type(), event.touches(), touches, &touchesLength, renderObject);
- addTouchPoints(event.type(), event.changedTouches(), changedTouches, &changedTouchesLength, renderObject);
- addTouchPoints(event.type(), event.targetTouches(), targetTouches, &targetTouchesLength, renderObject);
+ addTouchPoints(widget, event.type(), event.touches(), touches, &touchesLength, renderObject);
+ addTouchPoints(widget, event.type(), event.changedTouches(), changedTouches, &changedTouchesLength, renderObject);
+ addTouchPoints(widget, event.type(), event.targetTouches(), targetTouches, &targetTouchesLength, renderObject);
}
#endif // ENABLE(TOUCH_EVENTS)
@@ -612,6 +634,7 @@
#if ENABLE(GESTURE_EVENTS)
WebGestureEventBuilder::WebGestureEventBuilder(const Widget* widget, const WebCore::RenderObject* renderObject, const GestureEvent& event)
{
+ float scale = widgetScaleFactor(widget);
if (event.type() == eventNames().gesturetapEvent)
type = GestureTap;
else if (event.type() == eventNames().gesturetapdownEvent)
@@ -622,8 +645,8 @@
type = GestureScrollEnd;
else if (event.type() == eventNames().gesturescrollupdateEvent) {
type = GestureScrollUpdate;
- data.scrollUpdate.deltaX = event.deltaX();
- data.scrollUpdate.deltaY = event.deltaY();
+ data.scrollUpdate.deltaX = event.deltaX() * scale;
+ data.scrollUpdate.deltaY = event.deltaY() * scale;
}
timeStampSeconds = event.timeStamp() / millisPerSecond;
@@ -632,8 +655,8 @@
globalX = event.screenX();
globalY = event.screenY();
IntPoint localPoint = convertAbsoluteLocationForRenderObject(event.absoluteLocation(), *renderObject);
- x = localPoint.x();
- y = localPoint.y();
+ x = localPoint.x() * scale;
+ y = localPoint.y() * scale;
}
#endif // ENABLE(GESTURE_EVENTS)
« no previous file with comments | « Source/WebKit/chromium/public/WebInputEvent.h ('k') | Source/WebKit/chromium/src/WebViewImpl.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698