| OLD | NEW |
| 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/events/PointerEventFactory.h" | 5 #include "core/events/PointerEventFactory.h" |
| 6 | 6 |
| 7 #include "core/frame/FrameView.h" | 7 #include "core/frame/FrameView.h" |
| 8 #include "platform/geometry/FloatSize.h" | 8 #include "platform/geometry/FloatSize.h" |
| 9 | 9 |
| 10 namespace blink { | 10 namespace blink { |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 85 && type != EventTypeNames::pointerleave); | 85 && type != EventTypeNames::pointerleave); |
| 86 pointerEventInit.setCancelable(type != EventTypeNames::pointerenter | 86 pointerEventInit.setCancelable(type != EventTypeNames::pointerenter |
| 87 && type != EventTypeNames::pointerleave && type != EventTypeNames::point
ercancel); | 87 && type != EventTypeNames::pointerleave && type != EventTypeNames::point
ercancel); |
| 88 } | 88 } |
| 89 | 89 |
| 90 PointerEvent* PointerEventFactory::create( | 90 PointerEvent* PointerEventFactory::create( |
| 91 const AtomicString& mouseEventName, const PlatformMouseEvent& mouseEvent, | 91 const AtomicString& mouseEventName, const PlatformMouseEvent& mouseEvent, |
| 92 EventTarget* relatedTarget, | 92 EventTarget* relatedTarget, |
| 93 LocalDOMWindow* view) | 93 LocalDOMWindow* view) |
| 94 { | 94 { |
| 95 DCHECK(mouseEventName == EventTypeNames::mousemove |
| 96 || mouseEventName == EventTypeNames::mousedown |
| 97 || mouseEventName == EventTypeNames::mouseup); |
| 98 |
| 95 AtomicString pointerEventName = pointerEventNameForMouseEventName(mouseEvent
Name); | 99 AtomicString pointerEventName = pointerEventNameForMouseEventName(mouseEvent
Name); |
| 96 unsigned buttons = MouseEvent::platformModifiersToButtons(mouseEvent.getModi
fiers()); | 100 unsigned buttons = MouseEvent::platformModifiersToButtons(mouseEvent.getModi
fiers()); |
| 97 PointerEventInit pointerEventInit; | 101 PointerEventInit pointerEventInit; |
| 98 | 102 |
| 99 setIdTypeButtons(pointerEventInit, mouseEvent.pointerProperties(), buttons); | 103 setIdTypeButtons(pointerEventInit, mouseEvent.pointerProperties(), buttons); |
| 100 setBubblesAndCancelable(pointerEventInit, pointerEventName); | 104 setBubblesAndCancelable(pointerEventInit, pointerEventName); |
| 101 | 105 |
| 102 pointerEventInit.setScreenX(mouseEvent.globalPosition().x()); | 106 pointerEventInit.setScreenX(mouseEvent.globalPosition().x()); |
| 103 pointerEventInit.setScreenY(mouseEvent.globalPosition().y()); | 107 pointerEventInit.setScreenY(mouseEvent.globalPosition().y()); |
| 104 | 108 |
| 105 IntPoint locationInFrameZoomed; | 109 IntPoint locationInFrameZoomed; |
| 106 if (view && view->frame() && view->frame()->view()) { | 110 if (view && view->frame() && view->frame()->view()) { |
| 107 LocalFrame* frame = view->frame(); | 111 LocalFrame* frame = view->frame(); |
| 108 FrameView* frameView = frame->view(); | 112 FrameView* frameView = frame->view(); |
| 109 IntPoint locationInContents = frameView->rootFrameToContents(mouseEvent.
position()); | 113 IntPoint locationInContents = frameView->rootFrameToContents(mouseEvent.
position()); |
| 110 locationInFrameZoomed = frameView->contentsToFrame(locationInContents); | 114 locationInFrameZoomed = frameView->contentsToFrame(locationInContents); |
| 111 float scaleFactor = 1 / frame->pageZoomFactor(); | 115 float scaleFactor = 1 / frame->pageZoomFactor(); |
| 112 locationInFrameZoomed.scale(scaleFactor, scaleFactor); | 116 locationInFrameZoomed.scale(scaleFactor, scaleFactor); |
| 113 } | 117 } |
| 114 | 118 |
| 115 // Set up initial values for coordinates. | 119 // Set up initial values for coordinates. |
| 116 pointerEventInit.setClientX(locationInFrameZoomed.x()); | 120 pointerEventInit.setClientX(locationInFrameZoomed.x()); |
| 117 pointerEventInit.setClientY(locationInFrameZoomed.y()); | 121 pointerEventInit.setClientY(locationInFrameZoomed.y()); |
| 118 | 122 |
| 119 if (pointerEventName == EventTypeNames::pointerdown | 123 if (pointerEventName == EventTypeNames::pointerdown |
| 120 || pointerEventName == EventTypeNames::pointerup) { | 124 || pointerEventName == EventTypeNames::pointerup) { |
| 121 pointerEventInit.setButton(mouseEvent.button()); | 125 pointerEventInit.setButton(mouseEvent.button()); |
| 122 } else { | 126 } else { // Only when pointerEventName == EventTypeNames::pointermove |
| 123 // TODO(crbug.com/587955): We are setting NoButton for transition | |
| 124 // pointerevents should be resolved as part of this bug | |
| 125 pointerEventInit.setButton(NoButton); | 127 pointerEventInit.setButton(NoButton); |
| 126 } | 128 } |
| 127 pointerEventInit.setPressure(getPointerEventPressure( | 129 pointerEventInit.setPressure(getPointerEventPressure( |
| 128 mouseEvent.pointerProperties().force, pointerEventInit.buttons())); | 130 mouseEvent.pointerProperties().force, pointerEventInit.buttons())); |
| 129 | 131 |
| 132 // Set width/height to 1 because it matches Edge (and supported by the spec)
. |
| 133 pointerEventInit.setWidth(1); |
| 134 pointerEventInit.setHeight(1); |
| 135 |
| 130 UIEventWithKeyState::setFromPlatformModifiers(pointerEventInit, mouseEvent.g
etModifiers()); | 136 UIEventWithKeyState::setFromPlatformModifiers(pointerEventInit, mouseEvent.g
etModifiers()); |
| 131 | 137 |
| 132 // Make sure chorded buttons fire pointermove instead of pointerup/down. | 138 // Make sure chorded buttons fire pointermove instead of pointerup/down. |
| 133 if ((pointerEventName == EventTypeNames::pointerdown | 139 if ((pointerEventName == EventTypeNames::pointerdown |
| 134 && (buttons & ~MouseEvent::buttonToButtons(mouseEvent.button())) != 0) | 140 && (buttons & ~MouseEvent::buttonToButtons(mouseEvent.button())) != 0) |
| 135 || (pointerEventName == EventTypeNames::pointerup && buttons != 0)) | 141 || (pointerEventName == EventTypeNames::pointerup && buttons != 0)) |
| 136 pointerEventName = EventTypeNames::pointermove; | 142 pointerEventName = EventTypeNames::pointermove; |
| 137 | 143 |
| 138 | 144 |
| 139 pointerEventInit.setView(view); | 145 pointerEventInit.setView(view); |
| (...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 376 if (properties.pointerType | 382 if (properties.pointerType |
| 377 == WebPointerProperties::PointerType::Mouse) | 383 == WebPointerProperties::PointerType::Mouse) |
| 378 return PointerEventFactory::s_mouseId; | 384 return PointerEventFactory::s_mouseId; |
| 379 IncomingId id(properties.pointerType, properties.id); | 385 IncomingId id(properties.pointerType, properties.id); |
| 380 if (m_pointerIncomingIdMapping.contains(id)) | 386 if (m_pointerIncomingIdMapping.contains(id)) |
| 381 return m_pointerIncomingIdMapping.get(id); | 387 return m_pointerIncomingIdMapping.get(id); |
| 382 return PointerEventFactory::s_invalidId; | 388 return PointerEventFactory::s_invalidId; |
| 383 } | 389 } |
| 384 | 390 |
| 385 } // namespace blink | 391 } // namespace blink |
| OLD | NEW |