| 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 namespace blink { | 7 namespace blink { |
| 8 | 8 |
| 9 namespace { | 9 namespace { |
| 10 | 10 |
| (...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 159 touchPoint.force(), pointerEventInit.buttons())); | 159 touchPoint.force(), pointerEventInit.buttons())); |
| 160 | 160 |
| 161 UIEventWithKeyState::setFromPlatformModifiers(pointerEventInit, modifiers); | 161 UIEventWithKeyState::setFromPlatformModifiers(pointerEventInit, modifiers); |
| 162 | 162 |
| 163 pointerEventInit.setBubbles(!isEnterOrLeave); | 163 pointerEventInit.setBubbles(!isEnterOrLeave); |
| 164 pointerEventInit.setCancelable(!isEnterOrLeave && pointState != PlatformTouc
hPoint::TouchCancelled); | 164 pointerEventInit.setCancelable(!isEnterOrLeave && pointState != PlatformTouc
hPoint::TouchCancelled); |
| 165 | 165 |
| 166 return PointerEvent::create(type, pointerEventInit); | 166 return PointerEvent::create(type, pointerEventInit); |
| 167 } | 167 } |
| 168 | 168 |
| 169 | 169 PassRefPtrWillBeRawPtr<PointerEvent> PointerEventFactory::createPointerCancel(co
nst int pointerId, const WebPointerProperties::PointerType pointerType) |
| 170 PassRefPtrWillBeRawPtr<PointerEvent> PointerEventFactory::createPointerCancel(co
nst PlatformTouchPoint& touchPoint) | |
| 171 { | 170 { |
| 172 PointerEventInit pointerEventInit; | 171 PointerEventInit pointerEventInit; |
| 173 | 172 |
| 174 setIdTypeButtons(pointerEventInit, touchPoint.pointerProperties(), 0); | 173 pointerEventInit.setPointerId(pointerId); |
| 175 | 174 pointerEventInit.setPointerType(pointerTypeNameForWebPointPointerType(pointe
rType)); |
| 175 pointerEventInit.setIsPrimary(isPrimary(pointerId)); |
| 176 pointerEventInit.setBubbles(true); | 176 pointerEventInit.setBubbles(true); |
| 177 pointerEventInit.setCancelable(false); | 177 pointerEventInit.setCancelable(false); |
| 178 | 178 |
| 179 return PointerEvent::create(EventTypeNames::pointercancel, pointerEventInit)
; | 179 return PointerEvent::create(EventTypeNames::pointercancel, pointerEventInit)
; |
| 180 } | 180 } |
| 181 | 181 |
| 182 PassRefPtrWillBeRawPtr<PointerEvent> PointerEventFactory::create( | 182 PassRefPtrWillBeRawPtr<PointerEvent> PointerEventFactory::create( |
| 183 PassRefPtrWillBeRawPtr<PointerEvent> pointerEvent, | 183 PassRefPtrWillBeRawPtr<PointerEvent> pointerEvent, |
| 184 const AtomicString& type, | 184 const AtomicString& type, |
| 185 PassRefPtrWillBeRawPtr<EventTarget> relatedTarget) | 185 PassRefPtrWillBeRawPtr<EventTarget> relatedTarget) |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 260 // We do not handle the overflow of m_currentId as it should be very rare | 260 // We do not handle the overflow of m_currentId as it should be very rare |
| 261 int mappedId = m_currentId++; | 261 int mappedId = m_currentId++; |
| 262 if (!m_idCount[type]) | 262 if (!m_idCount[type]) |
| 263 m_primaryId[type] = mappedId; | 263 m_primaryId[type] = mappedId; |
| 264 m_idCount[type]++; | 264 m_idCount[type]++; |
| 265 m_pointerIncomingIdMapping.add(p, mappedId); | 265 m_pointerIncomingIdMapping.add(p, mappedId); |
| 266 m_pointerIdMapping.add(mappedId, PointerAttributes(p, isActiveButtons)); | 266 m_pointerIdMapping.add(mappedId, PointerAttributes(p, isActiveButtons)); |
| 267 return mappedId; | 267 return mappedId; |
| 268 } | 268 } |
| 269 | 269 |
| 270 bool PointerEventFactory::remove( | 270 bool PointerEventFactory::remove(const int mappedId) |
| 271 const PassRefPtrWillBeRawPtr<PointerEvent> pointerEvent) | |
| 272 { | 271 { |
| 273 int mappedId = pointerEvent->pointerId(); | |
| 274 // Do not remove mouse pointer id as it should always be there | 272 // Do not remove mouse pointer id as it should always be there |
| 275 if (mappedId == s_mouseId || !m_pointerIdMapping.contains(mappedId)) | 273 if (mappedId == s_mouseId || !m_pointerIdMapping.contains(mappedId)) |
| 276 return false; | 274 return false; |
| 277 | 275 |
| 278 IncomingId p = m_pointerIdMapping.get(mappedId).incomingId; | 276 IncomingId p = m_pointerIdMapping.get(mappedId).incomingId; |
| 279 int type = p.pointerType(); | 277 int type = p.pointerType(); |
| 280 m_pointerIdMapping.remove(mappedId); | 278 m_pointerIdMapping.remove(mappedId); |
| 281 m_pointerIncomingIdMapping.remove(p); | 279 m_pointerIncomingIdMapping.remove(p); |
| 282 if (m_primaryId[type] == mappedId) | 280 if (m_primaryId[type] == mappedId) |
| 283 m_primaryId[type] = PointerEventFactory::s_invalidId; | 281 m_primaryId[type] = PointerEventFactory::s_invalidId; |
| 284 m_idCount[type]--; | 282 m_idCount[type]--; |
| 285 return true; | 283 return true; |
| 286 } | 284 } |
| 287 | 285 |
| 286 WillBeHeapVector<int> PointerEventFactory::getPointerIdsOfType(WebPointerPropert
ies::PointerType pointerType) |
| 287 { |
| 288 WillBeHeapVector<int> mappedIds; |
| 289 |
| 290 for (auto iter = m_pointerIdMapping.begin(); iter != m_pointerIdMapping.end(
); ++iter) { |
| 291 int mappedId = iter->key; |
| 292 if (iter->value.incomingId.pointerType() == static_cast<int>(pointerType
)) |
| 293 mappedIds.append(mappedId); |
| 294 } |
| 295 |
| 296 return mappedIds; |
| 297 } |
| 298 |
| 288 bool PointerEventFactory::isPrimary(int mappedId) const | 299 bool PointerEventFactory::isPrimary(int mappedId) const |
| 289 { | 300 { |
| 290 if (!m_pointerIdMapping.contains(mappedId)) | 301 if (!m_pointerIdMapping.contains(mappedId)) |
| 291 return false; | 302 return false; |
| 292 | 303 |
| 293 IncomingId p = m_pointerIdMapping.get(mappedId).incomingId; | 304 IncomingId p = m_pointerIdMapping.get(mappedId).incomingId; |
| 294 return m_primaryId[p.pointerType()] == mappedId; | 305 return m_primaryId[p.pointerType()] == mappedId; |
| 295 } | 306 } |
| 296 | 307 |
| 297 bool PointerEventFactory::isActive(const int pointerId) | 308 bool PointerEventFactory::isActive(const int pointerId) |
| 298 { | 309 { |
| 299 return m_pointerIdMapping.contains(pointerId); | 310 return m_pointerIdMapping.contains(pointerId); |
| 300 } | 311 } |
| 301 | 312 |
| 302 bool PointerEventFactory::isActiveButtonsState(const int pointerId) | 313 bool PointerEventFactory::isActiveButtonsState(const int pointerId) |
| 303 { | 314 { |
| 304 return m_pointerIdMapping.contains(pointerId) | 315 return m_pointerIdMapping.contains(pointerId) |
| 305 && m_pointerIdMapping.get(pointerId).isActiveButtons; | 316 && m_pointerIdMapping.get(pointerId).isActiveButtons; |
| 306 } | 317 } |
| 307 | 318 |
| 308 } // namespace blink | 319 } // namespace blink |
| OLD | NEW |