Changeset 182912 in webkit
- Timestamp:
- Apr 16, 2015 3:18:35 PM (9 years ago)
- Location:
- trunk
- Files:
-
- 6 added
- 38 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r182901 r182912 1 2015-04-16 Beth Dakin <bdakin@apple.com> 2 3 Force mouse events should go through normal mouse event handling code paths 4 https://bugs.webkit.org/show_bug.cgi?id=143749 5 -and corresponding- 6 rdar://problem/20472895 7 8 Reviewed by Dean Jackson. 9 10 Just a few new tests. More to come. 11 * fast/events/mouse-force-changed-expected.txt: Added. 12 * fast/events/mouse-force-changed.html: Added. 13 * fast/events/mouse-force-down-expected.txt: Added. 14 * fast/events/mouse-force-down.html: Added. 15 * fast/events/mouse-force-up-expected.txt: Added. 16 * fast/events/mouse-force-up.html: Added. 17 18 Right now the new tests will only work on Mac 10.10.3 and beyond. 19 * platform/efl/TestExpectations: 20 * platform/gtk/TestExpectations: 21 * platform/ios-simulator/TestExpectations: 22 * platform/mac-mavericks/TestExpectations: 23 * platform/win/TestExpectations: 24 1 25 2015-04-16 Chris Dumez <cdumez@apple.com> 2 26 -
trunk/LayoutTests/platform/efl/TestExpectations
r182830 r182912 68 68 animations/trigger-container-scroll-simple.html [ Skip ] 69 69 animations/trigger-container-scroll-boundaries.html [ Skip ] 70 71 # No support for force events 72 fast/events/mouse-force-changed.html [ Skip ] 73 fast/events/mouse-force-down.html [ Skip ] 74 fast/events/mouse-force-up.html [ Skip ] 70 75 71 76 # ---------------------------------------- -
trunk/LayoutTests/platform/gtk/TestExpectations
r182830 r182912 638 638 639 639 webkit.org/b/143703 fast/forms/listbox-visible-size.html [ Failure ] 640 641 # No support for force events 642 fast/events/mouse-force-changed.html [ Skip ] 643 fast/events/mouse-force-down.html [ Skip ] 644 fast/events/mouse-force-up.html [ Skip ] 640 645 641 646 #//////////////////////////////////////////////////////////////////////////////////////// -
trunk/LayoutTests/platform/ios-simulator/TestExpectations
r182830 r182912 204 204 http/tests/local/fileapi/send-dragged-file.html 205 205 http/tests/local/fileapi/send-sliced-dragged-file.html 206 207 # No support for force events 208 fast/events/mouse-force-changed.html [ Skip ] 209 fast/events/mouse-force-down.html [ Skip ] 210 fast/events/mouse-force-up.html [ Skip ] 206 211 207 212 ### -
trunk/LayoutTests/platform/mac-mavericks/TestExpectations
r182181 r182912 1 1 # https://bugs.webkit.org/show_bug.cgi?id=143258 2 2 http/tests/cache/disk-cache/disk-cache-validation-back-navigation-policy.html 3 4 # No support for force events 5 fast/events/mouse-force-changed.html [ Skip ] 6 fast/events/mouse-force-down.html [ Skip ] 7 fast/events/mouse-force-up.html [ Skip ] -
trunk/LayoutTests/platform/win/TestExpectations
r182850 r182912 603 603 animations/trigger-container-scroll-simple.html [ Skip ] 604 604 animations/trigger-container-scroll-boundaries.html [ Skip ] 605 606 # No support for force events 607 fast/events/mouse-force-changed.html [ Skip ] 608 fast/events/mouse-force-down.html [ Skip ] 609 fast/events/mouse-force-up.html [ Skip ] 605 610 606 611 ################################################################################ -
trunk/Source/WebCore/ChangeLog
r182910 r182912 1 2015-04-16 Beth Dakin <bdakin@apple.com> 2 3 Force mouse events should go through normal mouse event handling code paths 4 https://bugs.webkit.org/show_bug.cgi?id=143749 5 -and corresponding- 6 rdar://problem/20472895 7 8 Reviewed by Dean Jackson. 9 10 This patch moves all of the code to dispatch mouseforcedown, mouseforceup, and 11 mouseforcechanged into normal mouse event dispatching code. This patch leaves 12 behind the cancel and click events because we plan to remove those, and it also 13 leaves mouseforcewillbegin because that is necessarily a very different event more 14 tied to the NSImmediateActionGestureRecognizer than these other events which are 15 tied to NSResponder’s pressureChangeWithEvent. 16 17 New helper functions. 18 * dom/Document.cpp: 19 (WebCore::Document::hasListenerTypeForEventType): 20 * dom/Document.h: 21 * dom/Element.cpp: 22 (WebCore::isForceEvent): 23 24 Move the code to ensure the force events have listeners in order to fire to 25 dispatchMouseEvent, and delete the old implementations. 26 (WebCore::Element::dispatchMouseEvent): 27 (WebCore::Element::dispatchMouseForceChanged): Deleted. 28 (WebCore::Element::dispatchMouseForceDown): Deleted. 29 (WebCore::Element::dispatchMouseForceUp): Deleted. 30 * dom/Element.h: 31 32 Perform a hit test and pipe the events through dispatchMouseEvent(). 33 * page/EventHandler.cpp: 34 (WebCore::EventHandler::handleMouseForceEvent): 35 * page/EventHandler.h: 36 37 New types for the new events. 38 * platform/PlatformEvent.h: 39 40 Forward to EventHandler. 41 * replay/UserInputBridge.cpp: 42 (WebCore::UserInputBridge::handleMouseForceEvent): 43 * replay/UserInputBridge.h: 44 1 45 2015-04-16 Tim Horton <timothy_horton@apple.com> 2 46 -
trunk/Source/WebCore/dom/Document.cpp
r182842 r182912 3967 3967 } 3968 3968 3969 bool Document::hasListenerTypeForEventType(PlatformEvent::Type eventType) const 3970 { 3971 switch (eventType) { 3972 case PlatformEvent::MouseForceChanged: 3973 return m_listenerTypes & Document::FORCECHANGED_LISTENER; 3974 case PlatformEvent::MouseForceDown: 3975 return m_listenerTypes & Document::FORCEDOWN_LISTENER; 3976 case PlatformEvent::MouseForceUp: 3977 return m_listenerTypes & Document::FORCEUP_LISTENER; 3978 case PlatformEvent::MouseScroll: 3979 return m_listenerTypes & Document::SCROLL_LISTENER; 3980 default: 3981 return false; 3982 } 3983 } 3984 3969 3985 void Document::addListenerTypeIfNeeded(const AtomicString& eventType) 3970 3986 { -
trunk/Source/WebCore/dom/Document.h
r182842 r182912 39 39 #include "MutationObserver.h" 40 40 #include "PageVisibilityState.h" 41 #include "PlatformEvent.h" 41 42 #include "PlatformScreen.h" 42 43 #include "ReferrerPolicy.h" … … 781 782 782 783 bool hasListenerType(ListenerType listenerType) const { return (m_listenerTypes & listenerType); } 784 bool hasListenerTypeForEventType(PlatformEvent::Type) const; 783 785 void addListenerTypeIfNeeded(const AtomicString& eventType); 784 786 -
trunk/Source/WebCore/dom/Element.cpp
r182748 r182912 245 245 } 246 246 247 static bool isForceEvent(const PlatformMouseEvent& platformEvent) 248 { 249 return platformEvent.type() == PlatformEvent::MouseForceChanged || platformEvent.type() == PlatformEvent::MouseForceDown || platformEvent.type() == PlatformEvent::MouseForceUp; 250 } 251 247 252 bool Element::dispatchMouseEvent(const PlatformMouseEvent& platformEvent, const AtomicString& eventType, int detail, Element* relatedTarget) 248 253 { 249 254 if (isDisabledFormControl()) 255 return false; 256 257 if (isForceEvent(platformEvent) && !document().hasListenerTypeForEventType(platformEvent.type())) 250 258 return false; 251 259 … … 2254 2262 } 2255 2263 2256 void Element::dispatchMouseForceC hanged(float force)2257 { 2258 if (!document().hasListenerType(Document::FORCEC HANGED_LISTENER))2264 void Element::dispatchMouseForceClick() 2265 { 2266 if (!document().hasListenerType(Document::FORCECLICK_LISTENER)) 2259 2267 return; 2260 2268 … … 2263 2271 return; 2264 2272 2265 PlatformMouseEvent platformMouseEvent(frame->eventHandler().lastKnownMousePosition(), frame->eventHandler().lastKnownMouseGlobalPosition(), NoButton, PlatformEvent::NoType, 1, false, false, false, false, WTF::currentTime(), force);2266 RefPtr<MouseEvent> mouseForceC hangedEvent = MouseEvent::create(eventNames().webkitmouseforcechangedEvent, document().defaultView(), platformMouseEvent, 0, nullptr);2267 2268 mouseForceC hangedEvent->setTarget(this);2269 dispatchEvent(mouseForceC hangedEvent);2270 } 2271 2272 void Element::dispatchMouseForce Down()2273 { 2274 if (!document().hasListenerType(Document::FORCE DOWN_LISTENER))2273 PlatformMouseEvent platformMouseEvent(frame->eventHandler().lastKnownMousePosition(), frame->eventHandler().lastKnownMouseGlobalPosition(), NoButton, PlatformEvent::NoType, 1, false, false, false, false, WTF::currentTime(), ForceAtForceClick); 2274 RefPtr<MouseEvent> mouseForceClickEvent = MouseEvent::create(eventNames().webkitmouseforceclickEvent, document().defaultView(), platformMouseEvent, 0, nullptr); 2275 2276 mouseForceClickEvent->setTarget(this); 2277 dispatchEvent(mouseForceClickEvent); 2278 } 2279 2280 void Element::dispatchMouseForceCancelled() 2281 { 2282 if (!document().hasListenerType(Document::FORCECANCELLED_LISTENER)) 2275 2283 return; 2276 2284 … … 2279 2287 return; 2280 2288 2281 PlatformMouseEvent platformMouseEvent(frame->eventHandler().lastKnownMousePosition(), frame->eventHandler().lastKnownMouseGlobalPosition(), NoButton, PlatformEvent::NoType, 1, false, false, false, false, WTF::currentTime(), ForceAtForceClick);2282 RefPtr<MouseEvent> mouseForceDownEvent = MouseEvent::create(eventNames().webkitmouseforcedownEvent, document().defaultView(), platformMouseEvent, 0, nullptr);2283 2284 mouseForceDownEvent->setTarget(this);2285 dispatchEvent(mouseForceDownEvent);2286 }2287 2288 void Element::dispatchMouseForceUp()2289 {2290 if (!document().hasListenerType(Document::FORCEUP_LISTENER))2291 return;2292 2293 Frame* frame = document().frame();2294 if (!frame)2295 return;2296 2297 PlatformMouseEvent platformMouseEvent(frame->eventHandler().lastKnownMousePosition(), frame->eventHandler().lastKnownMouseGlobalPosition(), NoButton, PlatformEvent::NoType, 1, false, false, false, false, WTF::currentTime(), ForceAtForceClick);2298 RefPtr<MouseEvent> mouseForceUpEvent = MouseEvent::create(eventNames().webkitmouseforceupEvent, document().defaultView(), platformMouseEvent, 0, nullptr);2299 2300 mouseForceUpEvent->setTarget(this);2301 dispatchEvent(mouseForceUpEvent);2302 }2303 2304 void Element::dispatchMouseForceClick()2305 {2306 if (!document().hasListenerType(Document::FORCECLICK_LISTENER))2307 return;2308 2309 Frame* frame = document().frame();2310 if (!frame)2311 return;2312 2313 PlatformMouseEvent platformMouseEvent(frame->eventHandler().lastKnownMousePosition(), frame->eventHandler().lastKnownMouseGlobalPosition(), NoButton, PlatformEvent::NoType, 1, false, false, false, false, WTF::currentTime(), ForceAtForceClick);2314 RefPtr<MouseEvent> mouseForceClickEvent = MouseEvent::create(eventNames().webkitmouseforceclickEvent, document().defaultView(), platformMouseEvent, 0, nullptr);2315 2316 mouseForceClickEvent->setTarget(this);2317 dispatchEvent(mouseForceClickEvent);2318 }2319 2320 void Element::dispatchMouseForceCancelled()2321 {2322 if (!document().hasListenerType(Document::FORCECANCELLED_LISTENER))2323 return;2324 2325 Frame* frame = document().frame();2326 if (!frame)2327 return;2328 2329 2289 PlatformMouseEvent platformMouseEvent(frame->eventHandler().lastKnownMousePosition(), frame->eventHandler().lastKnownMouseGlobalPosition(), NoButton, PlatformEvent::NoType, 1, false, false, false, false, WTF::currentTime(), 0); 2330 2290 RefPtr<MouseEvent> mouseForceCancelledEvent = MouseEvent::create(eventNames().webkitmouseforcecancelledEvent, document().defaultView(), platformMouseEvent, 0, nullptr); … … 2339 2299 { 2340 2300 return false; 2341 }2342 2343 void Element::dispatchMouseForceChanged(float)2344 {2345 }2346 2347 void Element::dispatchMouseForceDown()2348 {2349 }2350 2351 void Element::dispatchMouseForceUp()2352 {2353 2301 } 2354 2302 -
trunk/Source/WebCore/dom/Element.h
r182748 r182912 470 470 471 471 WEBCORE_EXPORT bool dispatchMouseForceWillBegin(); 472 WEBCORE_EXPORT void dispatchMouseForceChanged(float force);473 WEBCORE_EXPORT void dispatchMouseForceDown();474 WEBCORE_EXPORT void dispatchMouseForceUp();475 472 WEBCORE_EXPORT void dispatchMouseForceClick(); 476 473 WEBCORE_EXPORT void dispatchMouseForceCancelled(); -
trunk/Source/WebCore/page/EventHandler.cpp
r182869 r182912 2105 2105 } 2106 2106 2107 #if ENABLE(MOUSE_FORCE_EVENTS) 2108 bool EventHandler::handleMouseForceEvent(const PlatformMouseEvent& event) 2109 { 2110 RefPtr<FrameView> protector(m_frame.view()); 2111 2112 setLastKnownMousePosition(event); 2113 2114 HitTestRequest::HitTestRequestType hitType = HitTestRequest::DisallowShadowContent | HitTestRequest::Active; 2115 2116 HitTestRequest request(hitType); 2117 MouseEventWithHitTestResults mouseEvent = prepareMouseEvent(request, event); 2118 2119 bool swallowedEvent = !dispatchMouseEvent(eventNames().webkitmouseforcechangedEvent, mouseEvent.targetNode(), false, 0, event, false); 2120 if (event.type() == PlatformEvent::MouseForceDown) 2121 swallowedEvent |= !dispatchMouseEvent(eventNames().webkitmouseforcedownEvent, mouseEvent.targetNode(), false, 0, event, false); 2122 if (event.type() == PlatformEvent::MouseForceUp) 2123 swallowedEvent |= !dispatchMouseEvent(eventNames().webkitmouseforceupEvent, mouseEvent.targetNode(), false, 0, event, false); 2124 2125 return swallowedEvent; 2126 } 2127 #else 2128 bool EventHandler::handleMouseForceEvent(const PlatformMouseEvent& ) 2129 { 2130 return false; 2131 } 2132 #endif // #if ENABLE(MOUSE_FORCE_EVENTS) 2133 2107 2134 bool EventHandler::handlePasteGlobalSelection(const PlatformMouseEvent& platformMouseEvent) 2108 2135 { -
trunk/Source/WebCore/page/EventHandler.h
r182748 r182912 203 203 bool handleMouseMoveEvent(const PlatformMouseEvent&, HitTestResult* hoveredNode = 0, bool onlyUpdateScrollbars = false); 204 204 WEBCORE_EXPORT bool handleMouseReleaseEvent(const PlatformMouseEvent&); 205 bool handleMouseForceEvent(const PlatformMouseEvent&); 205 206 WEBCORE_EXPORT bool handleWheelEvent(const PlatformWheelEvent&); 206 207 void defaultWheelEventHandler(Node*, WheelEvent*); -
trunk/Source/WebCore/platform/PlatformEvent.h
r166006 r182912 44 44 MousePressed, 45 45 MouseReleased, 46 MouseForceChanged, 47 MouseForceDown, 48 MouseForceUp, 46 49 MouseScroll, 47 50 -
trunk/Source/WebCore/replay/UserInputBridge.cpp
r170774 r182912 148 148 } 149 149 150 bool UserInputBridge::handleMouseForceEvent(const PlatformMouseEvent& mouseEvent, InputSource) 151 { 152 return m_page.mainFrame().eventHandler().handleMouseForceEvent(mouseEvent); 153 } 154 150 155 bool UserInputBridge::handleKeyEvent(const PlatformKeyboardEvent& keyEvent, InputSource inputSource) 151 156 { -
trunk/Source/WebCore/replay/UserInputBridge.h
r172849 r182912 79 79 WEBCORE_EXPORT bool handleMouseMoveEvent(const PlatformMouseEvent&, InputSource source = InputSource::User); 80 80 WEBCORE_EXPORT bool handleMouseMoveOnScrollbarEvent(const PlatformMouseEvent&, InputSource source = InputSource::User); 81 WEBCORE_EXPORT bool handleMouseForceEvent(const PlatformMouseEvent&, InputSource = InputSource::User); 81 82 WEBCORE_EXPORT bool handleWheelEvent(const PlatformWheelEvent&, InputSource source = InputSource::User); 82 83 WEBCORE_EXPORT bool handleKeyEvent(const PlatformKeyboardEvent&, InputSource source = InputSource::User); -
trunk/Source/WebKit2/ChangeLog
r182904 r182912 1 2015-04-16 Beth Dakin <bdakin@apple.com> 2 3 Force mouse events should go through normal mouse event handling code paths 4 https://bugs.webkit.org/show_bug.cgi?id=143749 5 -and corresponding- 6 rdar://problem/20472895 7 8 Reviewed by Dean Jackson. 9 10 This patch makes pressureChangeWithEvent create NativeWebMouseEvents with the 11 NSEventTypePressures that is gets and sends those down to the web process. 12 13 Re-name pressureEvent to lastPressureEvent. Now that event can sometimes be an 14 NSEventTypePressure, the new name makes it clear how the second parameter differs 15 from the first. 16 * Shared/NativeWebMouseEvent.h: 17 18 New event types for the new types of events. 19 * Shared/WebEvent.h: 20 * Shared/WebEventConversion.cpp: 21 (WebKit::WebKit2PlatformMouseEvent::WebKit2PlatformMouseEvent): 22 * Shared/mac/NativeWebMouseEventMac.mm: 23 (WebKit::NativeWebMouseEvent::NativeWebMouseEvent): 24 * Shared/mac/WebEventFactory.h: 25 26 All of the square-peg, round-hole problems of massaging the NSEventTypePressures 27 events into WebMouseEvents is taken care of here. 28 * Shared/mac/WebEventFactory.mm: 29 (WebKit::mouseButtonForEvent): 30 (WebKit::globalPointForEvent): 31 (WebKit::pointForEvent): 32 (WebKit::WebEventFactory::createWebMouseEvent): 33 34 Instead of calling the old inputDeviceForceDidChange, create a NativeWebMouseEvent 35 and handle it. 36 * UIProcess/API/mac/WKView.mm: 37 (-[WKView pressureChangeWithEvent:]): 38 39 Handle the new types. 40 * UIProcess/WebPageProxy.cpp: 41 (WebKit::WebPageProxy::didReceiveEvent): 42 43 Can delete inputDeviceForceDidChange since it’s no longer used. 44 (WebKit::WebPageProxy::inputDeviceForceDidChange): Deleted. 45 * UIProcess/WebPageProxy.h: 46 47 Handle the new types of mouse events properly. 48 * WebProcess/WebPage/WebPage.cpp: 49 (WebKit::handleMouseEvent): 50 51 Delete inputDeviceForceDidChange() and m_lastForceStage. 52 * WebProcess/WebPage/WebPage.h: 53 * WebProcess/WebPage/WebPage.messages.in: 54 * WebProcess/WebPage/mac/WebPageMac.mm: 55 (WebKit::WebPage::inputDeviceForceDidChange): Deleted. 56 57 Handle new WebEvent types. 58 * WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp: 59 1 60 2015-04-16 Dan Bernstein <mitz@apple.com> 2 61 -
trunk/Source/WebKit2/Shared/NativeWebMouseEvent.h
r182748 r182912 50 50 public: 51 51 #if USE(APPKIT) 52 NativeWebMouseEvent(NSEvent *, NSEvent * pressureEvent, NSView *);52 NativeWebMouseEvent(NSEvent *, NSEvent *lastPressureEvent, NSView *); 53 53 #elif PLATFORM(GTK) 54 54 NativeWebMouseEvent(const NativeWebMouseEvent&); -
trunk/Source/WebKit2/Shared/WebEvent.h
r182748 r182912 59 59 MouseUp, 60 60 MouseMove, 61 MouseForceChanged, 62 MouseForceDown, 63 MouseForceUp, 61 64 62 65 // WebWheelEvent -
trunk/Source/WebKit2/Shared/WebEventConversion.cpp
r182748 r182912 49 49 m_force = webEvent.force(); 50 50 break; 51 case WebEvent::MouseForceChanged: 52 m_type = WebCore::PlatformEvent::MouseForceChanged; 53 m_force = webEvent.force(); 54 break; 55 case WebEvent::MouseForceDown: 56 m_type = WebCore::PlatformEvent::MouseForceDown; 57 m_force = WebCore::ForceAtForceClick; 58 break; 59 case WebEvent::MouseForceUp: 60 m_type = WebCore::PlatformEvent::MouseForceUp; 61 m_force = WebCore::ForceAtForceClick; 62 break; 51 63 default: 52 64 ASSERT_NOT_REACHED(); -
trunk/Source/WebKit2/Shared/mac/NativeWebMouseEventMac.mm
r182748 r182912 33 33 namespace WebKit { 34 34 35 NativeWebMouseEvent::NativeWebMouseEvent(NSEvent *event, NSEvent * pressureEvent, NSView *view)36 : WebMouseEvent(WebEventFactory::createWebMouseEvent(event, pressureEvent, view))35 NativeWebMouseEvent::NativeWebMouseEvent(NSEvent *event, NSEvent *lastPressureEvent, NSView *view) 36 : WebMouseEvent(WebEventFactory::createWebMouseEvent(event, lastPressureEvent, view)) 37 37 , m_nativeEvent(event) 38 38 { -
trunk/Source/WebKit2/Shared/mac/WebEventFactory.h
r182748 r182912 43 43 public: 44 44 #if USE(APPKIT) 45 static WebMouseEvent createWebMouseEvent(NSEvent *, NSEvent * pressureEvent, NSView *windowView);45 static WebMouseEvent createWebMouseEvent(NSEvent *, NSEvent *lastPressureEvent, NSView *windowView); 46 46 static WebWheelEvent createWebWheelEvent(NSEvent *, NSView *windowView); 47 47 static WebKeyboardEvent createWebKeyboardEvent(NSEvent *, bool handledByInputMethod, const Vector<WebCore::KeypressCommand>&); -
trunk/Source/WebKit2/Shared/mac/WebEventFactory.mm
r182748 r182912 77 77 case NSOtherMouseDragged: 78 78 return WebMouseEvent::MiddleButton; 79 #if __MAC_OS_X_VERSION_MAX_ALLOWED >= 101003 80 case NSEventTypePressure: 81 #endif 79 82 case NSMouseEntered: 80 83 case NSMouseExited: … … 157 160 { 158 161 switch ([event type]) { 159 case NSLeftMouseDown: 160 case NSLeftMouseDragged: 161 case NSLeftMouseUp: 162 case NSMouseEntered: 163 case NSMouseExited: 164 case NSMouseMoved: 165 case NSOtherMouseDown: 166 case NSOtherMouseDragged: 167 case NSOtherMouseUp: 168 case NSRightMouseDown: 169 case NSRightMouseDragged: 170 case NSRightMouseUp: 171 case NSScrollWheel: 172 return globalPoint([event locationInWindow], [event window]); 173 default: 174 return NSZeroPoint; 162 #if __MAC_OS_X_VERSION_MAX_ALLOWED >= 101003 163 case NSEventTypePressure: 164 #endif 165 case NSLeftMouseDown: 166 case NSLeftMouseDragged: 167 case NSLeftMouseUp: 168 case NSMouseEntered: 169 case NSMouseExited: 170 case NSMouseMoved: 171 case NSOtherMouseDown: 172 case NSOtherMouseDragged: 173 case NSOtherMouseUp: 174 case NSRightMouseDown: 175 case NSRightMouseDragged: 176 case NSRightMouseUp: 177 case NSScrollWheel: 178 return globalPoint([event locationInWindow], [event window]); 179 default: 180 return NSZeroPoint; 175 181 } 176 182 } … … 179 185 { 180 186 switch ([event type]) { 181 case NSLeftMouseDown: 182 case NSLeftMouseDragged: 183 case NSLeftMouseUp: 184 case NSMouseEntered: 185 case NSMouseExited: 186 case NSMouseMoved: 187 case NSOtherMouseDown: 188 case NSOtherMouseDragged: 189 case NSOtherMouseUp: 190 case NSRightMouseDown: 191 case NSRightMouseDragged: 192 case NSRightMouseUp: 193 case NSScrollWheel: { 194 // Note: This will have its origin at the bottom left of the window unless windowView is flipped. 195 // In those cases, the Y coordinate gets flipped by Widget::convertFromContainingWindow. 196 NSPoint location = [event locationInWindow]; 197 if (windowView) 198 location = [windowView convertPoint:location fromView:nil]; 199 return location; 200 } 201 default: 202 return NSZeroPoint; 187 #if __MAC_OS_X_VERSION_MAX_ALLOWED >= 101003 188 case NSEventTypePressure: 189 #endif 190 case NSLeftMouseDown: 191 case NSLeftMouseDragged: 192 case NSLeftMouseUp: 193 case NSMouseEntered: 194 case NSMouseExited: 195 case NSMouseMoved: 196 case NSOtherMouseDown: 197 case NSOtherMouseDragged: 198 case NSOtherMouseUp: 199 case NSRightMouseDown: 200 case NSRightMouseDragged: 201 case NSRightMouseUp: 202 case NSScrollWheel: { 203 // Note: This will have its origin at the bottom left of the window unless windowView is flipped. 204 // In those cases, the Y coordinate gets flipped by Widget::convertFromContainingWindow. 205 NSPoint location = [event locationInWindow]; 206 if (windowView) 207 location = [windowView convertPoint:location fromView:nil]; 208 return location; 209 } 210 default: 211 return NSZeroPoint; 203 212 } 204 213 } … … 359 368 } 360 369 361 WebMouseEvent WebEventFactory::createWebMouseEvent(NSEvent *event, NSEvent * pressureEvent, NSView *windowView)370 WebMouseEvent WebEventFactory::createWebMouseEvent(NSEvent *event, NSEvent *lastPressureEvent, NSView *windowView) 362 371 { 363 372 NSPoint position = pointForEvent(event, windowView); 364 373 NSPoint globalPosition = globalPointForEvent(event); 365 374 366 WebEvent::Type type = mouseEventTypeForEvent(event); 367 WebMouseEvent::Button button = mouseButtonForEvent(event); 368 float deltaX = [event deltaX]; 369 float deltaY = [event deltaY]; 370 float deltaZ = [event deltaZ]; 371 int clickCount = clickCountForEvent(event); 372 WebEvent::Modifiers modifiers = modifiersForEvent(event); 373 double timestamp = eventTimeStampSince1970(event); 374 int eventNumber = [event eventNumber]; 375 int menuTypeForEvent = typeForEvent(event); 375 WebEvent::Type type = mouseEventTypeForEvent(event); 376 #if __MAC_OS_X_VERSION_MAX_ALLOWED >= 101003 377 if ([event type] == NSEventTypePressure) { 378 // Since AppKit doesn't send mouse events for force down or force up, we have to use the current pressure 379 // event and lastPressureEvent to detect if this is MouseForceDown, MouseForceUp, or just MouseForceChanged. 380 if (lastPressureEvent.stage == 1 && event.stage == 2) 381 type = WebEvent::MouseForceDown; 382 else if (lastPressureEvent.stage == 2 && event.stage == 1) 383 type = WebEvent::MouseForceUp; 384 else 385 type = WebEvent::MouseForceChanged; 386 } 387 #endif 388 389 WebMouseEvent::Button button = mouseButtonForEvent(event); 390 float deltaX = [event deltaX]; 391 float deltaY = [event deltaY]; 392 float deltaZ = [event deltaZ]; 393 int clickCount = clickCountForEvent(event); 394 WebEvent::Modifiers modifiers = modifiersForEvent(event); 395 double timestamp = eventTimeStampSince1970(event); 396 int eventNumber = [event eventNumber]; 397 int menuTypeForEvent = typeForEvent(event); 376 398 377 399 double force = 0; 378 400 #if __MAC_OS_X_VERSION_MAX_ALLOWED >= 101003 379 force = pressureEvent.stage < 1 ? pressureEvent.pressure : pressureEvent.pressure + pressureEvent.stage - 1;401 force = lastPressureEvent.stage < 1 ? lastPressureEvent.pressure : lastPressureEvent.pressure + lastPressureEvent.stage - 1; 380 402 #endif 381 403 -
trunk/Source/WebKit2/UIProcess/API/mac/WKView.mm
r182842 r182912 1432 1432 return; 1433 1433 1434 if (_data->_ignoresNonWheelEvents) 1435 return; 1436 1434 1437 if (event.phase != NSEventPhaseChanged && event.phase != NSEventPhaseBegan && event.phase != NSEventPhaseEnded) 1435 1438 return; 1439 1440 NativeWebMouseEvent webEvent(event, _data->_pressureEvent, self); 1441 _data->_page->handleMouseEvent(webEvent); 1436 1442 1437 1443 [_data->_pressureEvent release]; 1438 1444 _data->_pressureEvent = [event retain]; 1439 1440 _data->_page->inputDeviceForceDidChange(event.pressure, event.stage);1441 1445 #endif 1442 1446 } -
trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp
r182897 r182912 4398 4398 case WebEvent::MouseDown: 4399 4399 case WebEvent::MouseUp: 4400 case WebEvent::MouseForceChanged: 4401 case WebEvent::MouseForceDown: 4402 case WebEvent::MouseForceUp: 4400 4403 case WebEvent::Wheel: 4401 4404 case WebEvent::KeyDown: … … 4427 4430 case WebEvent::MouseUp: 4428 4431 m_currentlyProcessedMouseDownEvent = nullptr; 4432 break; 4433 case WebEvent::MouseForceChanged: 4434 case WebEvent::MouseForceDown: 4435 case WebEvent::MouseForceUp: 4429 4436 break; 4430 4437 … … 5675 5682 } 5676 5683 5677 void WebPageProxy::inputDeviceForceDidChange(float force, int stage)5678 {5679 m_process->send(Messages::WebPage::InputDeviceForceDidChange(force, stage), m_pageID);5680 }5681 5682 5684 void WebPageProxy::immediateActionDidUpdate() 5683 5685 { -
trunk/Source/WebKit2/UIProcess/WebPageProxy.h
r182896 r182912 995 995 void focusAndSelectLastActionMenuHitTestResult(); 996 996 997 void inputDeviceForceDidChange(float force, int stage);998 997 void immediateActionDidUpdate(); 999 998 void immediateActionDidCancel(); -
trunk/Source/WebKit2/WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp
r175696 r182912 475 475 setXMotionEventFields(xEvent, event, convertToRootView(IntPoint())); 476 476 break; 477 case WebEvent::MouseForceChanged: 478 case WebEvent::MouseForceDown: 479 case WebEvent::MouseForceUp: 477 480 case WebEvent::NoType: 478 481 case WebEvent::Wheel: -
trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp
r182798 r182912 1904 1904 return page->corePage()->userInputBridge().handleMouseMoveOnScrollbarEvent(platformMouseEvent); 1905 1905 return page->corePage()->userInputBridge().handleMouseMoveEvent(platformMouseEvent); 1906 1907 case PlatformEvent::MouseForceChanged: 1908 case PlatformEvent::MouseForceDown: 1909 case PlatformEvent::MouseForceUp: 1910 return page->corePage()->userInputBridge().handleMouseForceEvent(platformMouseEvent); 1911 1906 1912 default: 1907 1913 ASSERT_NOT_REACHED(); -
trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h
r182896 r182912 1095 1095 void selectLastActionMenuRange(); 1096 1096 void focusAndSelectLastActionMenuHitTestResult(); 1097 void inputDeviceForceDidChange(float force, int stage);1098 1097 void immediateActionDidUpdate(); 1099 1098 void immediateActionDidCancel(); … … 1356 1355 WebCore::HitTestResult m_lastActionMenuHitTestResult; 1357 1356 RefPtr<WebPageOverlay> m_lastActionMenuHitPageOverlay; 1358 int m_lastForceStage { 0 };1359 1357 #endif 1360 1358 -
trunk/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in
r182896 r182912 408 408 SelectLastActionMenuRange() 409 409 FocusAndSelectLastActionMenuHitTestResult() 410 InputDeviceForceDidChange(float force, int stage)411 410 ImmediateActionDidUpdate() 412 411 ImmediateActionDidCancel() -
trunk/Source/WebKit2/WebProcess/WebPage/mac/WebPageMac.mm
r182760 r182912 1142 1142 } 1143 1143 1144 void WebPage::inputDeviceForceDidChange(float force, int stage)1145 {1146 Element* element = m_lastActionMenuHitTestResult.innerElement();1147 if (!element)1148 return;1149 1150 float overallForce = stage < 1 ? force : force + stage - 1;1151 element->dispatchMouseForceChanged(overallForce);1152 1153 if (m_lastForceStage == 1 && stage == 2)1154 element->dispatchMouseForceDown();1155 else if (m_lastForceStage == 2 && stage == 1) {1156 element->dispatchMouseForceUp();1157 element->dispatchMouseForceClick();1158 }1159 1160 m_lastForceStage = stage;1161 }1162 1163 1144 void WebPage::immediateActionDidUpdate() 1164 1145 { -
trunk/Tools/ChangeLog
r182885 r182912 1 2015-04-16 Beth Dakin <bdakin@apple.com> 2 3 Force mouse events should go through normal mouse event handling code paths 4 https://bugs.webkit.org/show_bug.cgi?id=143749 5 -and corresponding- 6 rdar://problem/20472895 7 8 Reviewed by Dean Jackson. 9 10 Add mouseForceDown/mouseForceUp/mouseForceChanged support to WebKitTestRunner. 11 Since there is not a way to create an NSEventTypePressure from scratch, we 12 subclass NSEvent and override all of the critical methods. 13 14 * WebKitTestRunner/EventSenderProxy.h: 15 * WebKitTestRunner/InjectedBundle/Bindings/EventSendingController.idl: 16 * WebKitTestRunner/InjectedBundle/EventSendingController.cpp: 17 (WTR::EventSendingController::mouseForceDown): 18 (WTR::EventSendingController::mouseForceUp): 19 (WTR::EventSendingController::mouseForceChanged): 20 * WebKitTestRunner/InjectedBundle/EventSendingController.h: 21 * WebKitTestRunner/TestController.cpp: 22 (WTR::TestController::didReceiveSynchronousMessageFromInjectedBundle): 23 * WebKitTestRunner/mac/EventSenderProxy.mm: 24 (-[EventSenderPressureEvent initAtLocation:globalLocation:stage:pressure:phase:time:eventNumber:]): 25 (-[EventSenderPressureEvent timestamp]): 26 (-[EventSenderPressureEvent type]): 27 (-[EventSenderPressureEvent locationInWindow]): 28 (-[EventSenderPressureEvent location]): 29 (-[EventSenderPressureEvent stage]): 30 (-[EventSenderPressureEvent pressure]): 31 (-[EventSenderPressureEvent phase]): 32 (-[EventSenderPressureEvent eventNumber]): 33 (WTR::EventSenderProxy::mouseForceDown): 34 (WTR::EventSenderProxy::mouseForceUp): 35 (WTR::EventSenderProxy::mouseForceChanged): 36 1 37 2015-04-16 Csaba Osztrogonác <ossy@webkit.org> 2 38 -
trunk/Tools/WebKitTestRunner/EventSenderProxy.h
r171453 r182912 59 59 void mouseDown(unsigned button, WKEventModifiers); 60 60 void mouseUp(unsigned button, WKEventModifiers); 61 void mouseForceDown(); 62 void mouseForceUp(); 63 void mouseForceChanged(float); 61 64 void mouseMoveTo(double x, double y); 62 65 void mouseScrollBy(int x, int y); -
trunk/Tools/WebKitTestRunner/InjectedBundle/Bindings/EventSendingController.idl
r182768 r182912 28 28 void mouseUp(long buttonNumber, object modifierArray); 29 29 void mouseMoveTo(long x, long y); 30 void mouseForceDown(); 31 void mouseForceUp(); 32 void mouseForceChanged(double force); 30 33 void mouseScrollBy(long x, long y); 31 34 void mouseScrollByWithWheelAndMomentumPhases(long x, long y, DOMString phase, DOMString momentum, optional boolean asyncScrolling); -
trunk/Tools/WebKitTestRunner/InjectedBundle/EventSendingController.cpp
r182768 r182912 254 254 } 255 255 256 void EventSendingController::mouseForceDown() 257 { 258 WKRetainPtr<WKStringRef> EventSenderMessageName(AdoptWK, WKStringCreateWithUTF8CString("EventSender")); 259 WKRetainPtr<WKMutableDictionaryRef> EventSenderMessageBody(AdoptWK, WKMutableDictionaryCreate()); 260 261 WKRetainPtr<WKStringRef> subMessageKey(AdoptWK, WKStringCreateWithUTF8CString("SubMessage")); 262 WKRetainPtr<WKStringRef> subMessageName(AdoptWK, WKStringCreateWithUTF8CString("MouseForceDown")); 263 WKDictionarySetItem(EventSenderMessageBody.get(), subMessageKey.get(), subMessageName.get()); 264 265 WKBundlePagePostSynchronousMessage(InjectedBundle::singleton().page()->page(), EventSenderMessageName.get(), EventSenderMessageBody.get(), 0); 266 } 267 268 void EventSendingController::mouseForceUp() 269 { 270 WKRetainPtr<WKStringRef> EventSenderMessageName(AdoptWK, WKStringCreateWithUTF8CString("EventSender")); 271 WKRetainPtr<WKMutableDictionaryRef> EventSenderMessageBody(AdoptWK, WKMutableDictionaryCreate()); 272 273 WKRetainPtr<WKStringRef> subMessageKey(AdoptWK, WKStringCreateWithUTF8CString("SubMessage")); 274 WKRetainPtr<WKStringRef> subMessageName(AdoptWK, WKStringCreateWithUTF8CString("MouseForceUp")); 275 WKDictionarySetItem(EventSenderMessageBody.get(), subMessageKey.get(), subMessageName.get()); 276 277 WKBundlePagePostSynchronousMessage(InjectedBundle::singleton().page()->page(), EventSenderMessageName.get(), EventSenderMessageBody.get(), 0); 278 } 279 280 void EventSendingController::mouseForceChanged(double force) 281 { 282 WKRetainPtr<WKStringRef> EventSenderMessageName(AdoptWK, WKStringCreateWithUTF8CString("EventSender")); 283 WKRetainPtr<WKMutableDictionaryRef> EventSenderMessageBody(AdoptWK, WKMutableDictionaryCreate()); 284 285 WKRetainPtr<WKStringRef> subMessageKey(AdoptWK, WKStringCreateWithUTF8CString("SubMessage")); 286 WKRetainPtr<WKStringRef> subMessageName(AdoptWK, WKStringCreateWithUTF8CString("MouseForceChanged")); 287 WKDictionarySetItem(EventSenderMessageBody.get(), subMessageKey.get(), subMessageName.get()); 288 289 WKRetainPtr<WKStringRef> forceKey(AdoptWK, WKStringCreateWithUTF8CString("Force")); 290 WKRetainPtr<WKDoubleRef> forceRef(AdoptWK, WKDoubleCreate(force)); 291 WKDictionarySetItem(EventSenderMessageBody.get(), forceKey.get(), forceRef.get()); 292 293 WKBundlePagePostSynchronousMessage(InjectedBundle::singleton().page()->page(), EventSenderMessageName.get(), EventSenderMessageBody.get(), 0); 294 } 295 256 296 void EventSendingController::leapForward(int milliseconds) 257 297 { -
trunk/Tools/WebKitTestRunner/InjectedBundle/EventSendingController.h
r182768 r182912 47 47 void mouseUp(int button, JSValueRef modifierArray); 48 48 void mouseMoveTo(int x, int y); 49 void mouseForceDown(); 50 void mouseForceUp(); 51 void mouseForceChanged(double force); 49 52 void mouseScrollBy(int x, int y); 50 53 void mouseScrollByWithWheelAndMomentumPhases(int x, int y, JSStringRef phase, JSStringRef momentum, bool asyncScrolling); -
trunk/Tools/WebKitTestRunner/TestController.cpp
r182824 r182912 1103 1103 } 1104 1104 1105 #if PLATFORM(MAC) 1106 if (WKStringIsEqualToUTF8CString(subMessageName, "MouseForceDown")) { 1107 WKPageSetShouldSendEventsSynchronously(mainWebView()->page(), true); 1108 m_eventSenderProxy->mouseForceDown(); 1109 WKPageSetShouldSendEventsSynchronously(mainWebView()->page(), false); 1110 return 0; 1111 } 1112 1113 if (WKStringIsEqualToUTF8CString(subMessageName, "MouseForceUp")) { 1114 WKPageSetShouldSendEventsSynchronously(mainWebView()->page(), true); 1115 m_eventSenderProxy->mouseForceUp(); 1116 WKPageSetShouldSendEventsSynchronously(mainWebView()->page(), false); 1117 return 0; 1118 } 1119 1120 if (WKStringIsEqualToUTF8CString(subMessageName, "MouseForceChanged")) { 1121 WKRetainPtr<WKStringRef> forceKey = adoptWK(WKStringCreateWithUTF8CString("Force")); 1122 double force = WKDoubleGetValue(static_cast<WKDoubleRef>(WKDictionaryGetItemForKey(messageBodyDictionary, forceKey.get()))); 1123 1124 WKPageSetShouldSendEventsSynchronously(mainWebView()->page(), true); 1125 m_eventSenderProxy->mouseForceChanged(force); 1126 WKPageSetShouldSendEventsSynchronously(mainWebView()->page(), false); 1127 return 0; 1128 } 1129 #endif // PLATFORM(MAC) 1130 1105 1131 if (WKStringIsEqualToUTF8CString(subMessageName, "MouseScrollBy")) { 1106 1132 WKRetainPtr<WKStringRef> xKey = adoptWK(WKStringCreateWithUTF8CString("X")); -
trunk/Tools/WebKitTestRunner/mac/EventSenderProxy.mm
r179450 r182912 39 39 - (void)_setCurrentEvent:(NSEvent *)event; 40 40 @end 41 42 #if __MAC_OS_X_VERSION_MAX_ALLOWED >= 101003 43 @interface EventSenderPressureEvent : NSEvent { 44 @public 45 NSPoint _eventSender_locationInWindow; 46 NSPoint _eventSender_location; 47 NSInteger _eventSender_stage; 48 float _eventSender_pressure; 49 NSEventPhase _eventSender_phase; 50 NSTimeInterval _eventSender_timestamp; 51 NSInteger _eventSender_eventNumber; 52 } 53 54 - (id)initAtLocation:(NSPoint)location globalLocation:(NSPoint)globalLocation stage:(NSInteger)stage pressure:(float)pressure phase:(NSEventPhase)phase time:(NSTimeInterval)time eventNumber:(NSInteger)eventNumber; 55 - (NSTimeInterval)timestamp; 56 @end 57 58 @implementation EventSenderPressureEvent 59 60 - (id)initAtLocation:(NSPoint)location globalLocation:(NSPoint)globalLocation stage:(NSInteger)stage pressure:(float)pressure phase:(NSEventPhase)phase time:(NSTimeInterval)time eventNumber:(NSInteger)eventNumber 61 { 62 self = [super init]; 63 64 if (!self) 65 return nil; 66 67 _eventSender_location = location; 68 _eventSender_locationInWindow = globalLocation; 69 _eventSender_stage = stage; 70 _eventSender_pressure = pressure; 71 _eventSender_phase = phase; 72 _eventSender_timestamp = time; 73 _eventSender_eventNumber = eventNumber; 74 75 return self; 76 } 77 78 - (NSTimeInterval)timestamp 79 { 80 return _eventSender_timestamp; 81 } 82 83 - (NSEventType)type 84 { 85 return NSEventTypePressure; 86 } 87 88 - (NSPoint)locationInWindow 89 { 90 return self->_eventSender_location; 91 } 92 93 - (NSPoint)location 94 { 95 return self->_eventSender_locationInWindow; 96 } 97 98 - (NSInteger)stage 99 { 100 return _eventSender_stage; 101 } 102 103 - (float)pressure 104 { 105 return _eventSender_pressure; 106 } 107 108 - (NSEventPhase)phase 109 { 110 return _eventSender_phase; 111 } 112 113 - (NSInteger)eventNumber 114 { 115 return _eventSender_eventNumber; 116 } 117 118 @end 119 #endif // __MAC_OS_X_VERSION_MAX_ALLOWED >= 101003 41 120 42 121 namespace WTR { … … 200 279 m_clickPosition = m_position; 201 280 } 281 282 #if __MAC_OS_X_VERSION_MAX_ALLOWED >= 101003 283 void EventSenderProxy::mouseForceDown() 284 { 285 EventSenderPressureEvent *firstEvent = [[EventSenderPressureEvent alloc] initAtLocation:NSMakePoint(m_position.x, m_position.y) 286 globalLocation:([m_testController->mainWebView()->platformWindow() convertRectToScreen:NSMakeRect(m_position.x, m_position.y, 1, 1)].origin) 287 stage:1 288 pressure:0.9 289 phase:NSEventPhaseChanged 290 time:absoluteTimeForEventTime(currentEventTime()) 291 eventNumber:++eventNumber]; 292 EventSenderPressureEvent *secondEvent = [[EventSenderPressureEvent alloc] initAtLocation:NSMakePoint(m_position.x, m_position.y) 293 globalLocation:([m_testController->mainWebView()->platformWindow() convertRectToScreen:NSMakeRect(m_position.x, m_position.y, 1, 1)].origin) 294 stage:2 295 pressure:0.1 296 phase:NSEventPhaseChanged 297 time:absoluteTimeForEventTime(currentEventTime()) 298 eventNumber:++eventNumber]; 299 300 NSView *targetView = [m_testController->mainWebView()->platformView() hitTest:[firstEvent locationInWindow]]; 301 targetView = targetView ? targetView : m_testController->mainWebView()->platformView(); 302 ASSERT(targetView); 303 304 // Since AppKit does not implement forceup/down as mouse events, we need to send two pressure events to detect 305 // the change in stage that marks those moments. 306 [NSApp _setCurrentEvent:firstEvent]; 307 [targetView pressureChangeWithEvent:firstEvent]; 308 [NSApp _setCurrentEvent:secondEvent]; 309 [targetView pressureChangeWithEvent:secondEvent]; 310 311 [NSApp _setCurrentEvent:nil]; 312 // WKView caches the most recent pressure event, so send it a nil event to clear the cache. 313 [targetView pressureChangeWithEvent:nil]; 314 315 [firstEvent release]; 316 [secondEvent release]; 317 } 318 319 void EventSenderProxy::mouseForceUp() 320 { 321 EventSenderPressureEvent *firstEvent = [[EventSenderPressureEvent alloc] initAtLocation:NSMakePoint(m_position.x, m_position.y) 322 globalLocation:([m_testController->mainWebView()->platformWindow() convertRectToScreen:NSMakeRect(m_position.x, m_position.y, 1, 1)].origin) 323 stage:2 324 pressure:0.1 325 phase:NSEventPhaseChanged 326 time:absoluteTimeForEventTime(currentEventTime()) 327 eventNumber:++eventNumber]; 328 EventSenderPressureEvent *secondEvent = [[EventSenderPressureEvent alloc] initAtLocation:NSMakePoint(m_position.x, m_position.y) 329 globalLocation:([m_testController->mainWebView()->platformWindow() convertRectToScreen:NSMakeRect(m_position.x, m_position.y, 1, 1)].origin) 330 stage:1 331 pressure:0.9 332 phase:NSEventPhaseChanged 333 time:absoluteTimeForEventTime(currentEventTime()) 334 eventNumber:++eventNumber]; 335 336 NSView *targetView = [m_testController->mainWebView()->platformView() hitTest:[firstEvent locationInWindow]]; 337 targetView = targetView ? targetView : m_testController->mainWebView()->platformView(); 338 ASSERT(targetView); 339 340 // Since AppKit does not implement forceup/down as mouse events, we need to send two pressure events to detect 341 // the change in stage that marks those moments. 342 [NSApp _setCurrentEvent:firstEvent]; 343 [targetView pressureChangeWithEvent:firstEvent]; 344 [NSApp _setCurrentEvent:secondEvent]; 345 [targetView pressureChangeWithEvent:secondEvent]; 346 347 [NSApp _setCurrentEvent:nil]; 348 // WKView caches the most recent pressure event, so send it a nil event to clear the cache. 349 [targetView pressureChangeWithEvent:nil]; 350 351 [firstEvent release]; 352 [secondEvent release]; 353 } 354 355 void EventSenderProxy::mouseForceChanged(float force) 356 { 357 EventSenderPressureEvent *event = [[EventSenderPressureEvent alloc] initAtLocation:NSMakePoint(m_position.x, m_position.y) 358 globalLocation:([m_testController->mainWebView()->platformWindow() convertRectToScreen:NSMakeRect(m_position.x, m_position.y, 1, 1)].origin) 359 stage:force < 1 ? 1 : 2 360 pressure:force 361 phase:NSEventPhaseChanged 362 time:absoluteTimeForEventTime(currentEventTime()) 363 eventNumber:++eventNumber]; 364 365 NSView *targetView = [m_testController->mainWebView()->platformView() hitTest:[event locationInWindow]]; 366 targetView = targetView ? targetView : m_testController->mainWebView()->platformView(); 367 ASSERT(targetView); 368 [NSApp _setCurrentEvent:event]; 369 [targetView pressureChangeWithEvent:event]; 370 [NSApp _setCurrentEvent:nil]; 371 372 // WKView caches the most recent pressure event, so send it a nil event to clear the cache. 373 [targetView pressureChangeWithEvent:nil]; 374 375 [event release]; 376 } 377 #else 378 void EventSenderProxy::mouseForceDown() 379 { 380 } 381 382 void EventSenderProxy::mouseForceUp() 383 { 384 } 385 386 void EventSenderProxy::mouseForceChanged(float) 387 { 388 } 389 #endif // __MAC_OS_X_VERSION_MAX_ALLOWED >= 101003 202 390 203 391 void EventSenderProxy::mouseMoveTo(double x, double y)
Note: See TracChangeset
for help on using the changeset viewer.