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

Side by Side Diff: third_party/WebKit/Source/core/input/PointerEventManager.cpp

Issue 1976603006: Set view property of pointer events (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased Created 4 years, 7 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 unified diff | Download patch
« no previous file with comments | « third_party/WebKit/Source/core/events/PointerEventFactoryTest.cpp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "core/input/PointerEventManager.h" 5 #include "core/input/PointerEventManager.h"
6 6
7 #include "core/dom/ElementTraversal.h" 7 #include "core/dom/ElementTraversal.h"
8 #include "core/dom/shadow/FlatTreeTraversal.h" 8 #include "core/dom/shadow/FlatTreeTraversal.h"
9 #include "core/events/MouseEvent.h" 9 #include "core/events/MouseEvent.h"
10 #include "core/frame/FrameView.h" 10 #include "core/frame/FrameView.h"
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after
207 enteredTarget = nullptr; 207 enteredTarget = nullptr;
208 else if (capturingTarget == enteredTarget) 208 else if (capturingTarget == enteredTarget)
209 exitedTarget = nullptr; 209 exitedTarget = nullptr;
210 else 210 else
211 return; 211 return;
212 } 212 }
213 213
214 // Dispatch pointerout/mouseout events 214 // Dispatch pointerout/mouseout events
215 if (isInDocument(exitedTarget)) { 215 if (isInDocument(exitedTarget)) {
216 if (!sendMouseEvent) { 216 if (!sendMouseEvent) {
217 dispatchPointerEvent(exitedTarget, m_pointerEventFactory.createPoint erTransitionEvent( 217 dispatchPointerEvent(exitedTarget, m_pointerEventFactory.createPoint erBoundaryEvent(
218 pointerEvent, EventTypeNames::pointerout, enteredTarget)); 218 pointerEvent, EventTypeNames::pointerout, enteredTarget));
219 } else { 219 } else {
220 dispatchMouseEvent(exitedTarget, 220 dispatchMouseEvent(exitedTarget,
221 EventTypeNames::mouseout, 221 EventTypeNames::mouseout,
222 mouseEventWithRegion(exitedTarget->toNode(), mouseEvent), 222 mouseEventWithRegion(exitedTarget->toNode(), mouseEvent),
223 enteredTarget); 223 enteredTarget);
224 } 224 }
225 } 225 }
226 226
227 // Create lists of all exited/entered ancestors, locate the common ancestor 227 // Create lists of all exited/entered ancestors, locate the common ancestor
(...skipping 28 matching lines...) Expand all
256 if (exitedAncestors[j]->hasCapturingEventListeners(EventTypeNames::mouse leave) 256 if (exitedAncestors[j]->hasCapturingEventListeners(EventTypeNames::mouse leave)
257 || (RuntimeEnabledFeatures::pointerEventEnabled() 257 || (RuntimeEnabledFeatures::pointerEventEnabled()
258 && exitedAncestors[j]->hasCapturingEventListeners(EventTypeNames::po interleave))) 258 && exitedAncestors[j]->hasCapturingEventListeners(EventTypeNames::po interleave)))
259 exitedNodeHasCapturingAncestor = true; 259 exitedNodeHasCapturingAncestor = true;
260 } 260 }
261 261
262 // Dispatch pointerleave/mouseleave events, in child-to-parent order. 262 // Dispatch pointerleave/mouseleave events, in child-to-parent order.
263 for (size_t j = 0; j < exitedAncestorsCommonParentIndex; j++) { 263 for (size_t j = 0; j < exitedAncestorsCommonParentIndex; j++) {
264 if (!sendMouseEvent) { 264 if (!sendMouseEvent) {
265 dispatchPointerEvent(exitedAncestors[j].get(), 265 dispatchPointerEvent(exitedAncestors[j].get(),
266 m_pointerEventFactory.createPointerTransitionEvent( 266 m_pointerEventFactory.createPointerBoundaryEvent(
267 pointerEvent, EventTypeNames::pointerleave, enteredTarget), 267 pointerEvent, EventTypeNames::pointerleave, enteredTarget),
268 !exitedNodeHasCapturingAncestor); 268 !exitedNodeHasCapturingAncestor);
269 } else { 269 } else {
270 dispatchMouseEvent(exitedAncestors[j].get(), 270 dispatchMouseEvent(exitedAncestors[j].get(),
271 EventTypeNames::mouseleave, 271 EventTypeNames::mouseleave,
272 mouseEventWithRegion(exitedTarget->toNode(), mouseEvent), 272 mouseEventWithRegion(exitedTarget->toNode(), mouseEvent),
273 enteredTarget, 0, !exitedNodeHasCapturingAncestor); 273 enteredTarget, 0, !exitedNodeHasCapturingAncestor);
274 } 274 }
275 } 275 }
276 276
277 // Dispatch pointerover/mouseover. 277 // Dispatch pointerover/mouseover.
278 if (isInDocument(enteredTarget)) { 278 if (isInDocument(enteredTarget)) {
279 if (!sendMouseEvent) { 279 if (!sendMouseEvent) {
280 dispatchPointerEvent(enteredTarget, m_pointerEventFactory.createPoin terTransitionEvent( 280 dispatchPointerEvent(enteredTarget, m_pointerEventFactory.createPoin terBoundaryEvent(
281 pointerEvent, EventTypeNames::pointerover, exitedTarget)); 281 pointerEvent, EventTypeNames::pointerover, exitedTarget));
282 } else { 282 } else {
283 dispatchMouseEvent(enteredTarget, 283 dispatchMouseEvent(enteredTarget,
284 EventTypeNames::mouseover, mouseEvent, exitedTarget); 284 EventTypeNames::mouseover, mouseEvent, exitedTarget);
285 } 285 }
286 } 286 }
287 287
288 // Defer locating capturing pointeenter/mouseenter listener until /after/ di spatching the leave events because 288 // Defer locating capturing pointeenter/mouseenter listener until /after/ di spatching the leave events because
289 // the leave handlers might set a capturing enter handler. 289 // the leave handlers might set a capturing enter handler.
290 bool enteredNodeHasCapturingAncestor = false; 290 bool enteredNodeHasCapturingAncestor = false;
291 for (size_t i = 0; i < enteredAncestors.size(); i++) { 291 for (size_t i = 0; i < enteredAncestors.size(); i++) {
292 if (enteredAncestors[i]->hasCapturingEventListeners(EventTypeNames::mous eenter) 292 if (enteredAncestors[i]->hasCapturingEventListeners(EventTypeNames::mous eenter)
293 || (RuntimeEnabledFeatures::pointerEventEnabled() 293 || (RuntimeEnabledFeatures::pointerEventEnabled()
294 && enteredAncestors[i]->hasCapturingEventListeners(EventTypeNames::p ointerenter))) 294 && enteredAncestors[i]->hasCapturingEventListeners(EventTypeNames::p ointerenter)))
295 enteredNodeHasCapturingAncestor = true; 295 enteredNodeHasCapturingAncestor = true;
296 } 296 }
297 297
298 // Dispatch pointerenter/mouseenter events, in parent-to-child order. 298 // Dispatch pointerenter/mouseenter events, in parent-to-child order.
299 for (size_t i = enteredAncestorsCommonParentIndex; i > 0; i--) { 299 for (size_t i = enteredAncestorsCommonParentIndex; i > 0; i--) {
300 if (!sendMouseEvent) { 300 if (!sendMouseEvent) {
301 dispatchPointerEvent(enteredAncestors[i-1].get(), 301 dispatchPointerEvent(enteredAncestors[i-1].get(),
302 m_pointerEventFactory.createPointerTransitionEvent( 302 m_pointerEventFactory.createPointerBoundaryEvent(
303 pointerEvent, EventTypeNames::pointerenter, exitedTarget), 303 pointerEvent, EventTypeNames::pointerenter, exitedTarget),
304 !enteredNodeHasCapturingAncestor); 304 !enteredNodeHasCapturingAncestor);
305 } else { 305 } else {
306 dispatchMouseEvent(enteredAncestors[i-1].get(), 306 dispatchMouseEvent(enteredAncestors[i-1].get(),
307 EventTypeNames::mouseenter, mouseEvent, exitedTarget, 307 EventTypeNames::mouseenter, mouseEvent, exitedTarget,
308 0, !enteredNodeHasCapturingAncestor); 308 0, !enteredNodeHasCapturingAncestor);
309 } 309 }
310 } 310 }
311 } 311 }
312 312
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
424 // Do not send pointer events for stationary touches. 424 // Do not send pointer events for stationary touches.
425 if (touchPoint.state() != PlatformTouchPoint::TouchStationary) { 425 if (touchPoint.state() != PlatformTouchPoint::TouchStationary) {
426 float scaleFactor = 1.0f / touchInfo.targetFrame->pageZoomFactor(); 426 float scaleFactor = 1.0f / touchInfo.targetFrame->pageZoomFactor();
427 FloatPoint scrollPosition = touchInfo.targetFrame->view()->scrollPos ition(); 427 FloatPoint scrollPosition = touchInfo.targetFrame->view()->scrollPos ition();
428 FloatPoint framePoint = touchInfo.contentPoint; 428 FloatPoint framePoint = touchInfo.contentPoint;
429 framePoint.moveBy(scrollPosition.scaledBy(-scaleFactor)); 429 framePoint.moveBy(scrollPosition.scaledBy(-scaleFactor));
430 PointerEvent* pointerEvent = m_pointerEventFactory.create( 430 PointerEvent* pointerEvent = m_pointerEventFactory.create(
431 pointerEventNameForTouchPointState(touchPoint.state()), 431 pointerEventNameForTouchPointState(touchPoint.state()),
432 touchPoint, event.getModifiers(), 432 touchPoint, event.getModifiers(),
433 touchInfo.adjustedRadius, 433 touchInfo.adjustedRadius,
434 framePoint); 434 framePoint,
435 touchInfo.touchNode ?
436 touchInfo.touchNode->document().domWindow() : nullptr);
435 437
436 // Consume the touch point if its pointer event is anything but NotH andled 438 // Consume the touch point if its pointer event is anything but NotH andled
437 // (e.g. preventDefault is called in the listener for the pointer ev ent). 439 // (e.g. preventDefault is called in the listener for the pointer ev ent).
438 result = sendTouchPointerEvent(touchInfo.touchNode, pointerEvent); 440 result = sendTouchPointerEvent(touchInfo.touchNode, pointerEvent);
439 touchInfo.consumed = result != WebInputEventResult::NotHandled; 441 touchInfo.consumed = result != WebInputEventResult::NotHandled;
440 } 442 }
441 } 443 }
442 } 444 }
443 445
444 WebInputEventResult PointerEventManager::sendTouchPointerEvent( 446 WebInputEventResult PointerEventManager::sendTouchPointerEvent(
(...skipping 287 matching lines...) Expand 10 before | Expand all | Expand 10 after
732 { 734 {
733 visitor->trace(m_frame); 735 visitor->trace(m_frame);
734 visitor->trace(m_nodeUnderPointer); 736 visitor->trace(m_nodeUnderPointer);
735 visitor->trace(m_pointerCaptureTarget); 737 visitor->trace(m_pointerCaptureTarget);
736 visitor->trace(m_pendingPointerCaptureTarget); 738 visitor->trace(m_pendingPointerCaptureTarget);
737 visitor->trace(m_touchEventManager); 739 visitor->trace(m_touchEventManager);
738 } 740 }
739 741
740 742
741 } // namespace blink 743 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/events/PointerEventFactoryTest.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698