| 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 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 44 RETURN_CORRESPONDING_PE_NAME(out); | 44 RETURN_CORRESPONDING_PE_NAME(out); |
| 45 RETURN_CORRESPONDING_PE_NAME(over); | 45 RETURN_CORRESPONDING_PE_NAME(over); |
| 46 RETURN_CORRESPONDING_PE_NAME(up); | 46 RETURN_CORRESPONDING_PE_NAME(up); |
| 47 | 47 |
| 48 #undef RETURN_CORRESPONDING_PE_NAME | 48 #undef RETURN_CORRESPONDING_PE_NAME |
| 49 | 49 |
| 50 NOTREACHED(); | 50 NOTREACHED(); |
| 51 return emptyAtom; | 51 return emptyAtom; |
| 52 } | 52 } |
| 53 | 53 |
| 54 |
| 55 unsigned short buttonToButtonsBitfield(WebPointerProperties::Button button) |
| 56 { |
| 57 switch (button) { |
| 58 case WebPointerProperties::Button::NoButton: |
| 59 return static_cast<unsigned short>(MouseEvent::Buttons::None); |
| 60 case WebPointerProperties::Button::Left: |
| 61 return static_cast<unsigned short>(MouseEvent::Buttons::Left); |
| 62 case WebPointerProperties::Button::Right: |
| 63 return static_cast<unsigned short>(MouseEvent::Buttons::Right); |
| 64 case WebPointerProperties::Button::Middle: |
| 65 return static_cast<unsigned short>(MouseEvent::Buttons::Middle); |
| 66 } |
| 67 NOTREACHED(); |
| 68 return 0; |
| 69 } |
| 70 |
| 54 } // namespace | 71 } // namespace |
| 55 | 72 |
| 56 const int PointerEventFactory::s_invalidId = 0; | 73 const int PointerEventFactory::s_invalidId = 0; |
| 57 | 74 |
| 58 // Mouse id is 1 to behave the same as MS Edge for compatibility reasons. | 75 // Mouse id is 1 to behave the same as MS Edge for compatibility reasons. |
| 59 const int PointerEventFactory::s_mouseId = 1; | 76 const int PointerEventFactory::s_mouseId = 1; |
| 60 | 77 |
| 61 float getPointerEventPressure(float force, int buttons) | 78 float getPointerEventPressure(float force, int buttons) |
| 62 { | 79 { |
| 63 if (std::isnan(force)) | 80 if (std::isnan(force)) |
| (...skipping 20 matching lines...) Expand all Loading... |
| 84 pointerEventInit.setBubbles(type != EventTypeNames::pointerenter | 101 pointerEventInit.setBubbles(type != EventTypeNames::pointerenter |
| 85 && type != EventTypeNames::pointerleave); | 102 && type != EventTypeNames::pointerleave); |
| 86 pointerEventInit.setCancelable(type != EventTypeNames::pointerenter | 103 pointerEventInit.setCancelable(type != EventTypeNames::pointerenter |
| 87 && type != EventTypeNames::pointerleave | 104 && type != EventTypeNames::pointerleave |
| 88 && type != EventTypeNames::pointercancel | 105 && type != EventTypeNames::pointercancel |
| 89 && type != EventTypeNames::gotpointercapture | 106 && type != EventTypeNames::gotpointercapture |
| 90 && type != EventTypeNames::lostpointercapture); | 107 && type != EventTypeNames::lostpointercapture); |
| 91 } | 108 } |
| 92 | 109 |
| 93 PointerEvent* PointerEventFactory::create( | 110 PointerEvent* PointerEventFactory::create( |
| 94 const AtomicString& mouseEventName, const PlatformMouseEvent& mouseEvent, | 111 const AtomicString& mouseEventName, |
| 95 EventTarget* relatedTarget, | 112 const PlatformMouseEvent& mouseEvent, |
| 96 LocalDOMWindow* view) | 113 LocalDOMWindow* view) |
| 97 { | 114 { |
| 98 DCHECK(mouseEventName == EventTypeNames::mousemove | 115 DCHECK(mouseEventName == EventTypeNames::mousemove |
| 99 || mouseEventName == EventTypeNames::mousedown | 116 || mouseEventName == EventTypeNames::mousedown |
| 100 || mouseEventName == EventTypeNames::mouseup); | 117 || mouseEventName == EventTypeNames::mouseup); |
| 101 | 118 |
| 102 AtomicString pointerEventName = pointerEventNameForMouseEventName(mouseEvent
Name); | 119 AtomicString pointerEventName = pointerEventNameForMouseEventName(mouseEvent
Name); |
| 103 unsigned buttons = MouseEvent::platformModifiersToButtons(mouseEvent.getModi
fiers()); | 120 unsigned buttons = MouseEvent::platformModifiersToButtons(mouseEvent.getModi
fiers()); |
| 104 PointerEventInit pointerEventInit; | 121 PointerEventInit pointerEventInit; |
| 105 | 122 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 118 float scaleFactor = 1 / frame->pageZoomFactor(); | 135 float scaleFactor = 1 / frame->pageZoomFactor(); |
| 119 locationInFrameZoomed.scale(scaleFactor, scaleFactor); | 136 locationInFrameZoomed.scale(scaleFactor, scaleFactor); |
| 120 } | 137 } |
| 121 | 138 |
| 122 // Set up initial values for coordinates. | 139 // Set up initial values for coordinates. |
| 123 pointerEventInit.setClientX(locationInFrameZoomed.x()); | 140 pointerEventInit.setClientX(locationInFrameZoomed.x()); |
| 124 pointerEventInit.setClientY(locationInFrameZoomed.y()); | 141 pointerEventInit.setClientY(locationInFrameZoomed.y()); |
| 125 | 142 |
| 126 if (pointerEventName == EventTypeNames::pointerdown | 143 if (pointerEventName == EventTypeNames::pointerdown |
| 127 || pointerEventName == EventTypeNames::pointerup) { | 144 || pointerEventName == EventTypeNames::pointerup) { |
| 128 pointerEventInit.setButton(mouseEvent.button()); | 145 pointerEventInit.setButton(static_cast<int>(mouseEvent.pointerProperties
().button)); |
| 129 } else { // Only when pointerEventName == EventTypeNames::pointermove | 146 } else { |
| 130 pointerEventInit.setButton(NoButton); | 147 DCHECK(pointerEventName == EventTypeNames::pointermove); |
| 148 pointerEventInit.setButton(static_cast<int>(WebPointerProperties::Button
::NoButton)); |
| 131 } | 149 } |
| 132 pointerEventInit.setPressure(getPointerEventPressure( | 150 pointerEventInit.setPressure(getPointerEventPressure( |
| 133 mouseEvent.pointerProperties().force, pointerEventInit.buttons())); | 151 mouseEvent.pointerProperties().force, pointerEventInit.buttons())); |
| 134 pointerEventInit.setTiltX(mouseEvent.pointerProperties().tiltX); | 152 pointerEventInit.setTiltX(mouseEvent.pointerProperties().tiltX); |
| 135 pointerEventInit.setTiltY(mouseEvent.pointerProperties().tiltY); | 153 pointerEventInit.setTiltY(mouseEvent.pointerProperties().tiltY); |
| 136 | 154 |
| 137 UIEventWithKeyState::setFromPlatformModifiers(pointerEventInit, mouseEvent.g
etModifiers()); | 155 UIEventWithKeyState::setFromPlatformModifiers(pointerEventInit, mouseEvent.g
etModifiers()); |
| 138 | 156 |
| 139 // Make sure chorded buttons fire pointermove instead of pointerup/down. | 157 // Make sure chorded buttons fire pointermove instead of pointerup/down. |
| 140 if ((pointerEventName == EventTypeNames::pointerdown | 158 if ((pointerEventName == EventTypeNames::pointerdown |
| 141 && (buttons & ~MouseEvent::buttonToButtons(mouseEvent.button())) != 0) | 159 && (buttons & ~buttonToButtonsBitfield(mouseEvent.pointerProperties().bu
tton)) != 0) |
| 142 || (pointerEventName == EventTypeNames::pointerup && buttons != 0)) | 160 || (pointerEventName == EventTypeNames::pointerup && buttons != 0)) |
| 143 pointerEventName = EventTypeNames::pointermove; | 161 pointerEventName = EventTypeNames::pointermove; |
| 144 | 162 |
| 145 | 163 |
| 146 pointerEventInit.setView(view); | 164 pointerEventInit.setView(view); |
| 147 if (relatedTarget) | |
| 148 pointerEventInit.setRelatedTarget(relatedTarget); | |
| 149 | 165 |
| 150 return PointerEvent::create(pointerEventName, pointerEventInit); | 166 return PointerEvent::create(pointerEventName, pointerEventInit); |
| 151 } | 167 } |
| 152 | 168 |
| 153 PointerEvent* PointerEventFactory::create(const AtomicString& type, | 169 PointerEvent* PointerEventFactory::create(const AtomicString& type, |
| 154 const PlatformTouchPoint& touchPoint, PlatformEvent::Modifiers modifiers, | 170 const PlatformTouchPoint& touchPoint, PlatformEvent::Modifiers modifiers, |
| 155 const FloatSize& pointRadius, | 171 const FloatSize& pointRadius, |
| 156 const FloatPoint& clientPoint, | 172 const FloatPoint& clientPoint, |
| 157 DOMWindow* view) | 173 DOMWindow* view) |
| 158 { | 174 { |
| (...skipping 12 matching lines...) Expand all Loading... |
| 171 | 187 |
| 172 setIdTypeButtons(pointerEventInit, touchPoint.pointerProperties(), | 188 setIdTypeButtons(pointerEventInit, touchPoint.pointerProperties(), |
| 173 pointerReleasedOrCancelled ? 0 : 1); | 189 pointerReleasedOrCancelled ? 0 : 1); |
| 174 | 190 |
| 175 pointerEventInit.setWidth(pointRadius.width()); | 191 pointerEventInit.setWidth(pointRadius.width()); |
| 176 pointerEventInit.setHeight(pointRadius.height()); | 192 pointerEventInit.setHeight(pointRadius.height()); |
| 177 pointerEventInit.setScreenX(touchPoint.screenPos().x()); | 193 pointerEventInit.setScreenX(touchPoint.screenPos().x()); |
| 178 pointerEventInit.setScreenY(touchPoint.screenPos().y()); | 194 pointerEventInit.setScreenY(touchPoint.screenPos().y()); |
| 179 pointerEventInit.setClientX(clientPoint.x()); | 195 pointerEventInit.setClientX(clientPoint.x()); |
| 180 pointerEventInit.setClientY(clientPoint.y()); | 196 pointerEventInit.setClientY(clientPoint.y()); |
| 181 pointerEventInit.setButton(pointerPressedOrReleased ? LeftButton: NoButton); | 197 pointerEventInit.setButton(static_cast<int>(pointerPressedOrReleased ? WebPo
interProperties::Button::Left : WebPointerProperties::Button::NoButton)); |
| 182 pointerEventInit.setPressure(getPointerEventPressure( | 198 pointerEventInit.setPressure(getPointerEventPressure( |
| 183 touchPoint.force(), pointerEventInit.buttons())); | 199 touchPoint.force(), pointerEventInit.buttons())); |
| 184 pointerEventInit.setTiltX(touchPoint.pointerProperties().tiltX); | 200 pointerEventInit.setTiltX(touchPoint.pointerProperties().tiltX); |
| 185 pointerEventInit.setTiltY(touchPoint.pointerProperties().tiltY); | 201 pointerEventInit.setTiltY(touchPoint.pointerProperties().tiltY); |
| 186 pointerEventInit.setView(view); | 202 pointerEventInit.setView(view); |
| 187 | 203 |
| 188 UIEventWithKeyState::setFromPlatformModifiers(pointerEventInit, modifiers); | 204 UIEventWithKeyState::setFromPlatformModifiers(pointerEventInit, modifiers); |
| 189 | 205 |
| 190 pointerEventInit.setBubbles(!isEnterOrLeave); | 206 pointerEventInit.setBubbles(!isEnterOrLeave); |
| 191 pointerEventInit.setCancelable(!isEnterOrLeave && pointState != PlatformTouc
hPoint::TouchCancelled); | 207 pointerEventInit.setCancelable(!isEnterOrLeave && pointState != PlatformTouc
hPoint::TouchCancelled); |
| (...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 378 if (properties.pointerType | 394 if (properties.pointerType |
| 379 == WebPointerProperties::PointerType::Mouse) | 395 == WebPointerProperties::PointerType::Mouse) |
| 380 return PointerEventFactory::s_mouseId; | 396 return PointerEventFactory::s_mouseId; |
| 381 IncomingId id(properties.pointerType, properties.id); | 397 IncomingId id(properties.pointerType, properties.id); |
| 382 if (m_pointerIncomingIdMapping.contains(id)) | 398 if (m_pointerIncomingIdMapping.contains(id)) |
| 383 return m_pointerIncomingIdMapping.get(id); | 399 return m_pointerIncomingIdMapping.get(id); |
| 384 return PointerEventFactory::s_invalidId; | 400 return PointerEventFactory::s_invalidId; |
| 385 } | 401 } |
| 386 | 402 |
| 387 } // namespace blink | 403 } // namespace blink |
| OLD | NEW |