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

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: 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
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 194 matching lines...) Expand 10 before | Expand all | Expand 10 after
205 enteredTarget = nullptr; 205 enteredTarget = nullptr;
206 else if (capturingTarget == enteredTarget) 206 else if (capturingTarget == enteredTarget)
207 exitedTarget = nullptr; 207 exitedTarget = nullptr;
208 else 208 else
209 return; 209 return;
210 } 210 }
211 211
212 // Dispatch pointerout/mouseout events 212 // Dispatch pointerout/mouseout events
213 if (isInDocument(exitedTarget)) { 213 if (isInDocument(exitedTarget)) {
214 if (!sendMouseEvent) { 214 if (!sendMouseEvent) {
215 dispatchPointerEvent(exitedTarget, m_pointerEventFactory.createPoint erTransitionEvent( 215 dispatchPointerEvent(exitedTarget, m_pointerEventFactory.createPoint erBoundaryEvent(
216 pointerEvent, EventTypeNames::pointerout, enteredTarget)); 216 pointerEvent, EventTypeNames::pointerout, enteredTarget));
217 } else { 217 } else {
218 dispatchMouseEvent(exitedTarget, 218 dispatchMouseEvent(exitedTarget,
219 EventTypeNames::mouseout, 219 EventTypeNames::mouseout,
220 mouseEventWithRegion(exitedTarget->toNode(), mouseEvent), 220 mouseEventWithRegion(exitedTarget->toNode(), mouseEvent),
221 enteredTarget); 221 enteredTarget);
222 } 222 }
223 } 223 }
224 224
225 // Create lists of all exited/entered ancestors, locate the common ancestor 225 // Create lists of all exited/entered ancestors, locate the common ancestor
(...skipping 28 matching lines...) Expand all
254 if (exitedAncestors[j]->hasCapturingEventListeners(EventTypeNames::mouse leave) 254 if (exitedAncestors[j]->hasCapturingEventListeners(EventTypeNames::mouse leave)
255 || (RuntimeEnabledFeatures::pointerEventEnabled() 255 || (RuntimeEnabledFeatures::pointerEventEnabled()
256 && exitedAncestors[j]->hasCapturingEventListeners(EventTypeNames::po interleave))) 256 && exitedAncestors[j]->hasCapturingEventListeners(EventTypeNames::po interleave)))
257 exitedNodeHasCapturingAncestor = true; 257 exitedNodeHasCapturingAncestor = true;
258 } 258 }
259 259
260 // Dispatch pointerleave/mouseleave events, in child-to-parent order. 260 // Dispatch pointerleave/mouseleave events, in child-to-parent order.
261 for (size_t j = 0; j < exitedAncestorsCommonParentIndex; j++) { 261 for (size_t j = 0; j < exitedAncestorsCommonParentIndex; j++) {
262 if (!sendMouseEvent) { 262 if (!sendMouseEvent) {
263 dispatchPointerEvent(exitedAncestors[j].get(), 263 dispatchPointerEvent(exitedAncestors[j].get(),
264 m_pointerEventFactory.createPointerTransitionEvent( 264 m_pointerEventFactory.createPointerBoundaryEvent(
265 pointerEvent, EventTypeNames::pointerleave, enteredTarget), 265 pointerEvent, EventTypeNames::pointerleave, enteredTarget),
266 !exitedNodeHasCapturingAncestor); 266 !exitedNodeHasCapturingAncestor);
267 } else { 267 } else {
268 dispatchMouseEvent(exitedAncestors[j].get(), 268 dispatchMouseEvent(exitedAncestors[j].get(),
269 EventTypeNames::mouseleave, 269 EventTypeNames::mouseleave,
270 mouseEventWithRegion(exitedTarget->toNode(), mouseEvent), 270 mouseEventWithRegion(exitedTarget->toNode(), mouseEvent),
271 enteredTarget, 0, !exitedNodeHasCapturingAncestor); 271 enteredTarget, 0, !exitedNodeHasCapturingAncestor);
272 } 272 }
273 } 273 }
274 274
275 // Dispatch pointerover/mouseover. 275 // Dispatch pointerover/mouseover.
276 if (isInDocument(enteredTarget)) { 276 if (isInDocument(enteredTarget)) {
277 if (!sendMouseEvent) { 277 if (!sendMouseEvent) {
278 dispatchPointerEvent(enteredTarget, m_pointerEventFactory.createPoin terTransitionEvent( 278 dispatchPointerEvent(enteredTarget, m_pointerEventFactory.createPoin terBoundaryEvent(
279 pointerEvent, EventTypeNames::pointerover, exitedTarget)); 279 pointerEvent, EventTypeNames::pointerover, exitedTarget));
280 } else { 280 } else {
281 dispatchMouseEvent(enteredTarget, 281 dispatchMouseEvent(enteredTarget,
282 EventTypeNames::mouseover, mouseEvent, exitedTarget); 282 EventTypeNames::mouseover, mouseEvent, exitedTarget);
283 } 283 }
284 } 284 }
285 285
286 // Defer locating capturing pointeenter/mouseenter listener until /after/ di spatching the leave events because 286 // Defer locating capturing pointeenter/mouseenter listener until /after/ di spatching the leave events because
287 // the leave handlers might set a capturing enter handler. 287 // the leave handlers might set a capturing enter handler.
288 bool enteredNodeHasCapturingAncestor = false; 288 bool enteredNodeHasCapturingAncestor = false;
289 for (size_t i = 0; i < enteredAncestors.size(); i++) { 289 for (size_t i = 0; i < enteredAncestors.size(); i++) {
290 if (enteredAncestors[i]->hasCapturingEventListeners(EventTypeNames::mous eenter) 290 if (enteredAncestors[i]->hasCapturingEventListeners(EventTypeNames::mous eenter)
291 || (RuntimeEnabledFeatures::pointerEventEnabled() 291 || (RuntimeEnabledFeatures::pointerEventEnabled()
292 && enteredAncestors[i]->hasCapturingEventListeners(EventTypeNames::p ointerenter))) 292 && enteredAncestors[i]->hasCapturingEventListeners(EventTypeNames::p ointerenter)))
293 enteredNodeHasCapturingAncestor = true; 293 enteredNodeHasCapturingAncestor = true;
294 } 294 }
295 295
296 // Dispatch pointerenter/mouseenter events, in parent-to-child order. 296 // Dispatch pointerenter/mouseenter events, in parent-to-child order.
297 for (size_t i = enteredAncestorsCommonParentIndex; i > 0; i--) { 297 for (size_t i = enteredAncestorsCommonParentIndex; i > 0; i--) {
298 if (!sendMouseEvent) { 298 if (!sendMouseEvent) {
299 dispatchPointerEvent(enteredAncestors[i-1].get(), 299 dispatchPointerEvent(enteredAncestors[i-1].get(),
300 m_pointerEventFactory.createPointerTransitionEvent( 300 m_pointerEventFactory.createPointerBoundaryEvent(
301 pointerEvent, EventTypeNames::pointerenter, exitedTarget), 301 pointerEvent, EventTypeNames::pointerenter, exitedTarget),
302 !enteredNodeHasCapturingAncestor); 302 !enteredNodeHasCapturingAncestor);
303 } else { 303 } else {
304 dispatchMouseEvent(enteredAncestors[i-1].get(), 304 dispatchMouseEvent(enteredAncestors[i-1].get(),
305 EventTypeNames::mouseenter, mouseEvent, exitedTarget, 305 EventTypeNames::mouseenter, mouseEvent, exitedTarget,
306 0, !enteredNodeHasCapturingAncestor); 306 0, !enteredNodeHasCapturingAncestor);
307 } 307 }
308 } 308 }
309 } 309 }
310 310
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
422 // Do not send pointer events for stationary touches. 422 // Do not send pointer events for stationary touches.
423 if (touchPoint.state() != PlatformTouchPoint::TouchStationary) { 423 if (touchPoint.state() != PlatformTouchPoint::TouchStationary) {
424 float scaleFactor = 1.0f / touchInfo.targetFrame->pageZoomFactor(); 424 float scaleFactor = 1.0f / touchInfo.targetFrame->pageZoomFactor();
425 FloatPoint scrollPosition = touchInfo.targetFrame->view()->scrollPos ition(); 425 FloatPoint scrollPosition = touchInfo.targetFrame->view()->scrollPos ition();
426 FloatPoint framePoint = touchInfo.contentPoint; 426 FloatPoint framePoint = touchInfo.contentPoint;
427 framePoint.moveBy(scrollPosition.scaledBy(-scaleFactor)); 427 framePoint.moveBy(scrollPosition.scaledBy(-scaleFactor));
428 PointerEvent* pointerEvent = m_pointerEventFactory.create( 428 PointerEvent* pointerEvent = m_pointerEventFactory.create(
429 pointerEventNameForTouchPointState(touchPoint.state()), 429 pointerEventNameForTouchPointState(touchPoint.state()),
430 touchPoint, event.getModifiers(), 430 touchPoint, event.getModifiers(),
431 touchInfo.adjustedRadius, 431 touchInfo.adjustedRadius,
432 framePoint); 432 framePoint,
433 touchInfo.touchNode ?
434 touchInfo.touchNode->document().domWindow() : nullptr);
433 435
434 // Consume the touch point if its pointer event is anything but NotH andled 436 // Consume the touch point if its pointer event is anything but NotH andled
435 // (e.g. preventDefault is called in the listener for the pointer ev ent). 437 // (e.g. preventDefault is called in the listener for the pointer ev ent).
436 result = sendTouchPointerEvent(touchInfo.touchNode, pointerEvent); 438 result = sendTouchPointerEvent(touchInfo.touchNode, pointerEvent);
437 touchInfo.consumed = result != WebInputEventResult::NotHandled; 439 touchInfo.consumed = result != WebInputEventResult::NotHandled;
438 } 440 }
439 } 441 }
440 } 442 }
441 443
442 WebInputEventResult PointerEventManager::sendTouchPointerEvent( 444 WebInputEventResult PointerEventManager::sendTouchPointerEvent(
(...skipping 287 matching lines...) Expand 10 before | Expand all | Expand 10 after
730 { 732 {
731 visitor->trace(m_frame); 733 visitor->trace(m_frame);
732 visitor->trace(m_nodeUnderPointer); 734 visitor->trace(m_nodeUnderPointer);
733 visitor->trace(m_pointerCaptureTarget); 735 visitor->trace(m_pointerCaptureTarget);
734 visitor->trace(m_pendingPointerCaptureTarget); 736 visitor->trace(m_pendingPointerCaptureTarget);
735 visitor->trace(m_touchEventManager); 737 visitor->trace(m_touchEventManager);
736 } 738 }
737 739
738 740
739 } // namespace blink 741 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698