| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/PointerEventManager.h" | 5 #include "core/events/PointerEventManager.h" |
| 6 | 6 |
| 7 namespace blink { | 7 namespace blink { |
| 8 | 8 |
| 9 namespace { | 9 namespace { |
| 10 | 10 |
| (...skipping 15 matching lines...) Expand all Loading... |
| 26 return ""; | 26 return ""; |
| 27 } | 27 } |
| 28 | 28 |
| 29 } // namespace | 29 } // namespace |
| 30 | 30 |
| 31 const PointerEventManager::MappedId PointerEventManager::s_invalidId = 0; | 31 const PointerEventManager::MappedId PointerEventManager::s_invalidId = 0; |
| 32 | 32 |
| 33 // Mouse id is 1 to behave the same as MS Edge for compatibility reasons. | 33 // Mouse id is 1 to behave the same as MS Edge for compatibility reasons. |
| 34 const PointerEventManager::MappedId PointerEventManager::s_mouseId = 1; | 34 const PointerEventManager::MappedId PointerEventManager::s_mouseId = 1; |
| 35 | 35 |
| 36 EventTarget* PointerEventManager::getCapturingNode(PassRefPtrWillBeRawPtr<Pointe
rEvent> pointerEvent) | 36 EventTarget* PointerEventManager::getCapturingNode(RawPtr<PointerEvent> pointerE
vent) |
| 37 { | 37 { |
| 38 // TODO(nzolghadr): Add APIs to set the capturing nodes and return the corre
ct node here | 38 // TODO(nzolghadr): Add APIs to set the capturing nodes and return the corre
ct node here |
| 39 return nullptr; | 39 return nullptr; |
| 40 } | 40 } |
| 41 | 41 |
| 42 float getPointerEventPressure(float force, int buttons) | 42 float getPointerEventPressure(float force, int buttons) |
| 43 { | 43 { |
| 44 if (std::isnan(force)) | 44 if (std::isnan(force)) |
| 45 return buttons ? 0.5 : 0; | 45 return buttons ? 0.5 : 0; |
| 46 return force; | 46 return force; |
| 47 } | 47 } |
| 48 | 48 |
| 49 void PointerEventManager::setIdAndType(PointerEventInit &pointerEventInit, | 49 void PointerEventManager::setIdAndType(PointerEventInit &pointerEventInit, |
| 50 const WebPointerProperties &pointerProperties) | 50 const WebPointerProperties &pointerProperties) |
| 51 { | 51 { |
| 52 const WebPointerProperties::PointerType pointerType = pointerProperties.poin
terType; | 52 const WebPointerProperties::PointerType pointerType = pointerProperties.poin
terType; |
| 53 MappedId pointerId = add(PointerEventManager::IncomingId(toInt(pointerType),
pointerProperties.id)); | 53 MappedId pointerId = add(PointerEventManager::IncomingId(toInt(pointerType),
pointerProperties.id)); |
| 54 pointerEventInit.setPointerId(pointerId); | 54 pointerEventInit.setPointerId(pointerId); |
| 55 pointerEventInit.setPointerType(pointerTypeNameForWebPointPointerType(pointe
rType)); | 55 pointerEventInit.setPointerType(pointerTypeNameForWebPointPointerType(pointe
rType)); |
| 56 pointerEventInit.setIsPrimary(isPrimary(pointerId)); | 56 pointerEventInit.setIsPrimary(isPrimary(pointerId)); |
| 57 } | 57 } |
| 58 | 58 |
| 59 PassRefPtrWillBeRawPtr<PointerEvent> PointerEventManager::create(const AtomicStr
ing& type, | 59 RawPtr<PointerEvent> PointerEventManager::create(const AtomicString& type, |
| 60 const PlatformMouseEvent& mouseEvent, | 60 const PlatformMouseEvent& mouseEvent, |
| 61 PassRefPtrWillBeRawPtr<Node> relatedTarget, | 61 RawPtr<Node> relatedTarget, |
| 62 PassRefPtrWillBeRawPtr<AbstractView> view) | 62 RawPtr<AbstractView> view) |
| 63 { | 63 { |
| 64 PointerEventInit pointerEventInit; | 64 PointerEventInit pointerEventInit; |
| 65 | 65 |
| 66 setIdAndType(pointerEventInit, mouseEvent.pointerProperties()); | 66 setIdAndType(pointerEventInit, mouseEvent.pointerProperties()); |
| 67 | 67 |
| 68 pointerEventInit.setScreenX(mouseEvent.globalPosition().x()); | 68 pointerEventInit.setScreenX(mouseEvent.globalPosition().x()); |
| 69 pointerEventInit.setScreenY(mouseEvent.globalPosition().y()); | 69 pointerEventInit.setScreenY(mouseEvent.globalPosition().y()); |
| 70 pointerEventInit.setClientX(mouseEvent.position().x()); | 70 pointerEventInit.setClientX(mouseEvent.position().x()); |
| 71 pointerEventInit.setClientY(mouseEvent.position().y()); | 71 pointerEventInit.setClientY(mouseEvent.position().y()); |
| 72 | 72 |
| 73 pointerEventInit.setButton(mouseEvent.button()); | 73 pointerEventInit.setButton(mouseEvent.button()); |
| 74 pointerEventInit.setButtons(MouseEvent::platformModifiersToButtons(mouseEven
t.modifiers())); | 74 pointerEventInit.setButtons(MouseEvent::platformModifiersToButtons(mouseEven
t.modifiers())); |
| 75 pointerEventInit.setPressure(getPointerEventPressure( | 75 pointerEventInit.setPressure(getPointerEventPressure( |
| 76 mouseEvent.pointerProperties().force, pointerEventInit.buttons())); | 76 mouseEvent.pointerProperties().force, pointerEventInit.buttons())); |
| 77 | 77 |
| 78 UIEventWithKeyState::setFromPlatformModifiers(pointerEventInit, mouseEvent.m
odifiers()); | 78 UIEventWithKeyState::setFromPlatformModifiers(pointerEventInit, mouseEvent.m
odifiers()); |
| 79 | 79 |
| 80 pointerEventInit.setBubbles(type != EventTypeNames::pointerenter | 80 pointerEventInit.setBubbles(type != EventTypeNames::pointerenter |
| 81 && type != EventTypeNames::pointerleave); | 81 && type != EventTypeNames::pointerleave); |
| 82 pointerEventInit.setCancelable(type != EventTypeNames::pointerenter | 82 pointerEventInit.setCancelable(type != EventTypeNames::pointerenter |
| 83 && type != EventTypeNames::pointerleave && type != EventTypeNames::point
ercancel); | 83 && type != EventTypeNames::pointerleave && type != EventTypeNames::point
ercancel); |
| 84 | 84 |
| 85 pointerEventInit.setView(view); | 85 pointerEventInit.setView(view); |
| 86 if (relatedTarget) | 86 if (relatedTarget) |
| 87 pointerEventInit.setRelatedTarget(relatedTarget); | 87 pointerEventInit.setRelatedTarget(relatedTarget); |
| 88 | 88 |
| 89 return PointerEvent::create(type, pointerEventInit); | 89 return PointerEvent::create(type, pointerEventInit); |
| 90 } | 90 } |
| 91 | 91 |
| 92 PassRefPtrWillBeRawPtr<PointerEvent> PointerEventManager::create(const AtomicStr
ing& type, | 92 RawPtr<PointerEvent> PointerEventManager::create(const AtomicString& type, |
| 93 const PlatformTouchPoint& touchPoint, PlatformEvent::Modifiers modifiers, | 93 const PlatformTouchPoint& touchPoint, PlatformEvent::Modifiers modifiers, |
| 94 const double width, const double height, | 94 const double width, const double height, |
| 95 const double clientX, const double clientY) | 95 const double clientX, const double clientY) |
| 96 { | 96 { |
| 97 const PlatformTouchPoint::State pointState = touchPoint.state(); | 97 const PlatformTouchPoint::State pointState = touchPoint.state(); |
| 98 | 98 |
| 99 bool pointerReleasedOrCancelled = pointState == PlatformTouchPoint::TouchRel
eased | 99 bool pointerReleasedOrCancelled = pointState == PlatformTouchPoint::TouchRel
eased |
| 100 || pointState == PlatformTouchPoint::TouchCancelled; | 100 || pointState == PlatformTouchPoint::TouchCancelled; |
| 101 | 101 |
| 102 bool isEnterOrLeave = false; | 102 bool isEnterOrLeave = false; |
| (...skipping 17 matching lines...) Expand all Loading... |
| 120 | 120 |
| 121 UIEventWithKeyState::setFromPlatformModifiers(pointerEventInit, modifiers); | 121 UIEventWithKeyState::setFromPlatformModifiers(pointerEventInit, modifiers); |
| 122 | 122 |
| 123 pointerEventInit.setBubbles(!isEnterOrLeave); | 123 pointerEventInit.setBubbles(!isEnterOrLeave); |
| 124 pointerEventInit.setCancelable(!isEnterOrLeave && pointState != PlatformTouc
hPoint::TouchCancelled); | 124 pointerEventInit.setCancelable(!isEnterOrLeave && pointState != PlatformTouc
hPoint::TouchCancelled); |
| 125 | 125 |
| 126 return PointerEvent::create(type, pointerEventInit); | 126 return PointerEvent::create(type, pointerEventInit); |
| 127 } | 127 } |
| 128 | 128 |
| 129 | 129 |
| 130 PassRefPtrWillBeRawPtr<PointerEvent> PointerEventManager::createPointerCancel(co
nst PlatformTouchPoint& touchPoint) | 130 RawPtr<PointerEvent> PointerEventManager::createPointerCancel(const PlatformTouc
hPoint& touchPoint) |
| 131 { | 131 { |
| 132 PointerEventInit pointerEventInit; | 132 PointerEventInit pointerEventInit; |
| 133 | 133 |
| 134 setIdAndType(pointerEventInit, touchPoint.pointerProperties()); | 134 setIdAndType(pointerEventInit, touchPoint.pointerProperties()); |
| 135 | 135 |
| 136 pointerEventInit.setBubbles(true); | 136 pointerEventInit.setBubbles(true); |
| 137 pointerEventInit.setCancelable(false); | 137 pointerEventInit.setCancelable(false); |
| 138 | 138 |
| 139 return PointerEvent::create(EventTypeNames::pointercancel, pointerEventInit)
; | 139 return PointerEvent::create(EventTypeNames::pointercancel, pointerEventInit)
; |
| 140 } | 140 } |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 178 // We do not handle the overflow of m_currentId as it should be very rare | 178 // We do not handle the overflow of m_currentId as it should be very rare |
| 179 MappedId mappedId = m_currentId++; | 179 MappedId mappedId = m_currentId++; |
| 180 if (!m_idCount[type]) | 180 if (!m_idCount[type]) |
| 181 m_primaryId[type] = mappedId; | 181 m_primaryId[type] = mappedId; |
| 182 m_idCount[type]++; | 182 m_idCount[type]++; |
| 183 m_idMapping.add(p, mappedId); | 183 m_idMapping.add(p, mappedId); |
| 184 m_idReverseMapping.add(mappedId, p); | 184 m_idReverseMapping.add(mappedId, p); |
| 185 return static_cast<PointerEventManager::MappedId>(mappedId); | 185 return static_cast<PointerEventManager::MappedId>(mappedId); |
| 186 } | 186 } |
| 187 | 187 |
| 188 void PointerEventManager::remove(const PassRefPtrWillBeRawPtr<PointerEvent> poin
terEvent) | 188 void PointerEventManager::remove(const RawPtr<PointerEvent> pointerEvent) |
| 189 { | 189 { |
| 190 MappedId mappedId = pointerEvent->pointerId(); | 190 MappedId mappedId = pointerEvent->pointerId(); |
| 191 // Do not remove mouse pointer id as it should always be there | 191 // Do not remove mouse pointer id as it should always be there |
| 192 if (mappedId == s_mouseId || !m_idReverseMapping.contains(mappedId)) | 192 if (mappedId == s_mouseId || !m_idReverseMapping.contains(mappedId)) |
| 193 return; | 193 return; |
| 194 | 194 |
| 195 IncomingId p = m_idReverseMapping.get(mappedId); | 195 IncomingId p = m_idReverseMapping.get(mappedId); |
| 196 int type = p.first; | 196 int type = p.first; |
| 197 m_idReverseMapping.remove(mappedId); | 197 m_idReverseMapping.remove(mappedId); |
| 198 m_idMapping.remove(p); | 198 m_idMapping.remove(p); |
| 199 if (m_primaryId[type] == mappedId) | 199 if (m_primaryId[type] == mappedId) |
| 200 m_primaryId[type] = PointerEventManager::s_invalidId; | 200 m_primaryId[type] = PointerEventManager::s_invalidId; |
| 201 m_idCount[type]--; | 201 m_idCount[type]--; |
| 202 } | 202 } |
| 203 | 203 |
| 204 bool PointerEventManager::isPrimary(PointerEventManager::MappedId mappedId) cons
t | 204 bool PointerEventManager::isPrimary(PointerEventManager::MappedId mappedId) cons
t |
| 205 { | 205 { |
| 206 if (!m_idReverseMapping.contains(mappedId)) | 206 if (!m_idReverseMapping.contains(mappedId)) |
| 207 return false; | 207 return false; |
| 208 | 208 |
| 209 IncomingId p = m_idReverseMapping.get(mappedId); | 209 IncomingId p = m_idReverseMapping.get(mappedId); |
| 210 int type = p.first; | 210 int type = p.first; |
| 211 return m_primaryId[type] == mappedId; | 211 return m_primaryId[type] == mappedId; |
| 212 } | 212 } |
| 213 | 213 |
| 214 | 214 |
| 215 } // namespace blink | 215 } // namespace blink |
| OLD | NEW |