Title: [211663] trunk
Revision
211663
Author
commit-qu...@webkit.org
Date
2017-02-03 19:03:39 -0800 (Fri, 03 Feb 2017)

Log Message

WK1 mouse events are missing movementX and movementY for pointerlock.
https://bugs.webkit.org/show_bug.cgi?id=167775
rdar://problem/30343810

Patch by Jeremy Jones <jere...@apple.com> on 2017-02-03
Reviewed by Alexey Proskuryakov.

Source/WebCore:

pointer-lock/mouse-event-delivery.html

Improve mouse-event-delivery.html test to mouse move and check for valid movementX and movementY.

* platform/mac/PlatformEventFactoryMac.mm:
(WebCore::PlatformMouseEventBuilder::PlatformMouseEventBuilder): WK1 plumb throuhg movementX and movementY

Tools:

Set kCGMouseEventDeltaX and kCGMouseEventDeltaY when synthesizing mouse move events.

* DumpRenderTree/mac/EventSendingController.mm:
(-[EventSendingController mouseMoveToX:Y:]):
* WebKitTestRunner/mac/EventSenderProxy.mm:
(WTR::EventSenderProxy::mouseMoveTo):

LayoutTests:

Enable pointer-lock/mouse-event-delivery.html for mac.

* platform/mac/TestExpectations:

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (211662 => 211663)


--- trunk/LayoutTests/ChangeLog	2017-02-04 01:53:38 UTC (rev 211662)
+++ trunk/LayoutTests/ChangeLog	2017-02-04 03:03:39 UTC (rev 211663)
@@ -1,3 +1,15 @@
+2017-02-03  Jeremy Jones  <jere...@apple.com>
+
+        WK1 mouse events are missing movementX and movementY for pointerlock.
+        https://bugs.webkit.org/show_bug.cgi?id=167775
+        rdar://problem/30343810
+
+        Reviewed by Alexey Proskuryakov.
+
+        Enable pointer-lock/mouse-event-delivery.html for mac.
+
+        * platform/mac/TestExpectations:
+
 2017-02-03  Simon Fraser  <simon.fra...@apple.com>
 
         Correctly set the "inWindow" flag for TileControllers that aren't the page tiles, and clarify "usingTiledBacking" logic

Modified: trunk/LayoutTests/pointer-lock/mouse-event-delivery-expected.txt (211662 => 211663)


--- trunk/LayoutTests/pointer-lock/mouse-event-delivery-expected.txt	2017-02-04 01:53:38 UTC (rev 211662)
+++ trunk/LayoutTests/pointer-lock/mouse-event-delivery-expected.txt	2017-02-04 03:03:39 UTC (rev 211663)
@@ -8,6 +8,9 @@
      With a lock in place send a wheel event.
 PASS event type: wheel, target: target1, received on: target1
 PASS event type: wheel, target: target1, received on: body
+     With a lock in place move the mouse.
+PASS event type: mousemove, movementX: 25, movementY: -30, target: target1, received on: target1
+PASS event type: mousemove, movementX: 25, movementY: -30, target: target1, received on: body
      With a lock in place send a click.
 PASS event type: mousedown, target: target1, received on: target1
 PASS event type: mousedown, target: target1, received on: body

Modified: trunk/LayoutTests/pointer-lock/mouse-event-delivery.html (211662 => 211663)


--- trunk/LayoutTests/pointer-lock/mouse-event-delivery.html	2017-02-04 01:53:38 UTC (rev 211662)
+++ trunk/LayoutTests/pointer-lock/mouse-event-delivery.html	2017-02-04 03:03:39 UTC (rev 211663)
@@ -38,6 +38,13 @@
       testPassed("event type: " + e.type + ", target: " + e.target.id + ", received on: " + e.currentTarget.id);
       doNextStep();
     }
+    function eventDeltaExpected(e) {
+      testPassed("event type: " + e.type + ", movementX: " + e.movementX + ", movementY: " + e.movementY + ", target: " + e.target.id + ", received on: " + e.currentTarget.id);
+    }
+    function eventDeltaExpectedThenNextStep(e) {
+      testPassed("event type: " + e.type + ", movementX: " + e.movementX + ", movementY: " + e.movementY + ", target: " + e.target.id + ", received on: " + e.currentTarget.id);
+      doNextStep();
+    }
 
     todo = [
         function () {
@@ -57,7 +64,20 @@
             }
         },
         function () {
+            debug("     With a lock in place move the mouse.")
+            targetdiv1._onmousemove_ = eventDeltaExpectedThenNextStep;
+            targetdiv2._onmousemove_ = eventNotExpected;
+            document.body._onmousemove_ = eventDeltaExpected;
+            if (window.eventSender) {
+                window.eventSender.mouseMoveTo(45,50);
+            }
+        },
+        function () {
             debug("     With a lock in place send a click.")
+            targetdiv1._onmousemove_ = null;
+            targetdiv2._onmousemove_ = null;
+            document.body._onmousemove_ = null;
+
             targetdiv1._onmousedown_ = eventExpected;
             targetdiv2._onmousedown_ = eventNotExpected;
             document.body._onmousedown_ = eventExpected;

Modified: trunk/Source/WebCore/ChangeLog (211662 => 211663)


--- trunk/Source/WebCore/ChangeLog	2017-02-04 01:53:38 UTC (rev 211662)
+++ trunk/Source/WebCore/ChangeLog	2017-02-04 03:03:39 UTC (rev 211663)
@@ -1,3 +1,18 @@
+2017-02-03  Jeremy Jones  <jere...@apple.com>
+
+        WK1 mouse events are missing movementX and movementY for pointerlock.
+        https://bugs.webkit.org/show_bug.cgi?id=167775
+        rdar://problem/30343810
+
+        Reviewed by Alexey Proskuryakov.
+
+        pointer-lock/mouse-event-delivery.html
+
+        Improve mouse-event-delivery.html test to mouse move and check for valid movementX and movementY.
+        
+        * platform/mac/PlatformEventFactoryMac.mm:
+        (WebCore::PlatformMouseEventBuilder::PlatformMouseEventBuilder): WK1 plumb throuhg movementX and movementY
+
 2017-02-03  Simon Fraser  <simon.fra...@apple.com>
 
         Correctly set the "inWindow" flag for TileControllers that aren't the page tiles, and clarify "usingTiledBacking" logic

Modified: trunk/Source/WebCore/platform/mac/PlatformEventFactoryMac.mm (211662 => 211663)


--- trunk/Source/WebCore/platform/mac/PlatformEventFactoryMac.mm	2017-02-04 01:53:38 UTC (rev 211662)
+++ trunk/Source/WebCore/platform/mac/PlatformEventFactoryMac.mm	2017-02-04 03:03:39 UTC (rev 211663)
@@ -714,6 +714,9 @@
         m_globalPosition = IntPoint(globalPointForEvent(event));
         m_button = mouseButtonForEvent(event);
         m_clickCount = clickCountForEvent(event);
+#if ENABLE(POINTER_LOCK)
+        m_movementDelta = IntPoint(event.deltaX, event.deltaY);
+#endif
 
         m_force = 0;
 #if defined(__LP64__) && __MAC_OS_X_VERSION_MAX_ALLOWED >= 101003

Modified: trunk/Tools/ChangeLog (211662 => 211663)


--- trunk/Tools/ChangeLog	2017-02-04 01:53:38 UTC (rev 211662)
+++ trunk/Tools/ChangeLog	2017-02-04 03:03:39 UTC (rev 211663)
@@ -1,3 +1,18 @@
+2017-02-03  Jeremy Jones  <jere...@apple.com>
+
+        WK1 mouse events are missing movementX and movementY for pointerlock.
+        https://bugs.webkit.org/show_bug.cgi?id=167775
+        rdar://problem/30343810
+
+        Reviewed by Alexey Proskuryakov.
+
+        Set kCGMouseEventDeltaX and kCGMouseEventDeltaY when synthesizing mouse move events.
+
+        * DumpRenderTree/mac/EventSendingController.mm:
+        (-[EventSendingController mouseMoveToX:Y:]):
+        * WebKitTestRunner/mac/EventSenderProxy.mm:
+        (WTR::EventSenderProxy::mouseMoveTo):
+
 2017-02-03  Simon Fraser  <simon.fra...@apple.com>
 
         Correctly set the "inWindow" flag for TileControllers that aren't the page tiles, and clarify "usingTiledBacking" logic

Modified: trunk/Tools/DumpRenderTree/mac/EventSendingController.mm (211662 => 211663)


--- trunk/Tools/DumpRenderTree/mac/EventSendingController.mm	2017-02-04 01:53:38 UTC (rev 211662)
+++ trunk/Tools/DumpRenderTree/mac/EventSendingController.mm	2017-02-04 03:03:39 UTC (rev 211663)
@@ -643,9 +643,9 @@
 
     NSView *view = [mainFrame webView];
 #if !PLATFORM(IOS)
-    lastMousePosition = [view convertPoint:NSMakePoint(x, [view frame].size.height - y) toView:nil];
+    NSPoint newMousePosition = [view convertPoint:NSMakePoint(x, [view frame].size.height - y) toView:nil];
     NSEvent *event = [NSEvent mouseEventWithType:(leftMouseButtonDown ? NSEventTypeLeftMouseDragged : NSEventTypeMouseMoved)
-                                        location:lastMousePosition 
+                                        location:newMousePosition
                                    modifierFlags:0 
                                        timestamp:[self currentEventTime]
                                     windowNumber:[[view window] windowNumber] 
@@ -653,6 +653,11 @@
                                      eventNumber:++eventNumber 
                                       clickCount:(leftMouseButtonDown ? clickCount : 0) 
                                         pressure:0.0];
+    CGEventRef cgEvent = event.CGEvent;
+    CGEventSetIntegerValueField(cgEvent, kCGMouseEventDeltaX, newMousePosition.x - lastMousePosition.x);
+    CGEventSetIntegerValueField(cgEvent, kCGMouseEventDeltaY, newMousePosition.y - lastMousePosition.y);
+    event = [NSEvent eventWithCGEvent:cgEvent];
+    lastMousePosition = newMousePosition;
 #else
     lastMousePosition = [view convertPoint:NSMakePoint(x, y) toView:nil];
     WebEvent *event = [[WebEvent alloc] initWithMouseEventType:WebEventMouseMoved

Modified: trunk/Tools/WebKitTestRunner/mac/EventSenderProxy.mm (211662 => 211663)


--- trunk/Tools/WebKitTestRunner/mac/EventSenderProxy.mm	2017-02-04 01:53:38 UTC (rev 211662)
+++ trunk/Tools/WebKitTestRunner/mac/EventSenderProxy.mm	2017-02-04 03:03:39 UTC (rev 211663)
@@ -600,12 +600,10 @@
 void EventSenderProxy::mouseMoveTo(double x, double y)
 {
     NSView *view = m_testController->mainWebView()->platformView();
-    NSPoint position = [view convertPoint:NSMakePoint(x, y) toView:nil];
-    m_position.x = position.x;
-    m_position.y = position.y;
+    NSPoint newMousePosition = [view convertPoint:NSMakePoint(x, y) toView:nil];
     bool isDrag = m_leftMouseButtonDown;
     NSEvent *event = [NSEvent mouseEventWithType:(isDrag ? NSEventTypeLeftMouseDragged : NSEventTypeMouseMoved)
-                                        location:position
+                                        location:newMousePosition
                                    modifierFlags:0 
                                        timestamp:absoluteTimeForEventTime(currentEventTime())
                                     windowNumber:view.window.windowNumber
@@ -614,6 +612,13 @@
                                       clickCount:(m_leftMouseButtonDown ? m_clickCount : 0) 
                                         pressure:0];
 
+    CGEventRef cgEvent = event.CGEvent;
+    CGEventSetIntegerValueField(cgEvent, kCGMouseEventDeltaX, newMousePosition.x - m_position.x);
+    CGEventSetIntegerValueField(cgEvent, kCGMouseEventDeltaY, newMousePosition.y - m_position.y);
+    event = [NSEvent eventWithCGEvent:cgEvent];
+    m_position.x = newMousePosition.x;
+    m_position.y = newMousePosition.y;
+
     NSPoint windowLocation = event.locationInWindow;
     // Always target drags at the WKWebView to allow for drag-scrolling outside the view.
     NSView *targetView = isDrag ? m_testController->mainWebView()->platformView() : [m_testController->mainWebView()->platformView() hitTest:windowLocation];
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to