Chromium Code Reviews| 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 "platform/geometry/FloatSize.h" | |
| 8 | |
| 7 namespace blink { | 9 namespace blink { |
| 8 | 10 |
| 9 namespace { | 11 namespace { |
| 10 | 12 |
| 11 inline int toInt(WebPointerProperties::PointerType t) { return static_cast<int>( t); } | 13 inline int toInt(WebPointerProperties::PointerType t) { return static_cast<int>( t); } |
| 12 | 14 |
| 13 const char* pointerTypeNameForWebPointPointerType(WebPointerProperties::PointerT ype type) | 15 const char* pointerTypeNameForWebPointPointerType(WebPointerProperties::PointerT ype type) |
| 14 { | 16 { |
| 15 switch (type) { | 17 switch (type) { |
| 16 case WebPointerProperties::PointerType::Unknown: | 18 case WebPointerProperties::PointerType::Unknown: |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 123 | 125 |
| 124 pointerEventInit.setView(view); | 126 pointerEventInit.setView(view); |
| 125 if (relatedTarget) | 127 if (relatedTarget) |
| 126 pointerEventInit.setRelatedTarget(relatedTarget); | 128 pointerEventInit.setRelatedTarget(relatedTarget); |
| 127 | 129 |
| 128 return PointerEvent::create(pointerEventName, pointerEventInit); | 130 return PointerEvent::create(pointerEventName, pointerEventInit); |
| 129 } | 131 } |
| 130 | 132 |
| 131 PointerEvent* PointerEventFactory::create(const AtomicString& type, | 133 PointerEvent* PointerEventFactory::create(const AtomicString& type, |
| 132 const PlatformTouchPoint& touchPoint, PlatformEvent::Modifiers modifiers, | 134 const PlatformTouchPoint& touchPoint, PlatformEvent::Modifiers modifiers, |
| 133 const double width, const double height, | 135 const FloatSize& pointRadius, |
| 134 const double clientX, const double clientY) | 136 const FloatPoint& pagePoint) |
| 135 { | 137 { |
| 136 const PlatformTouchPoint::TouchState pointState = touchPoint.state(); | 138 const PlatformTouchPoint::TouchState pointState = touchPoint.state(); |
| 137 | 139 |
| 138 bool pointerReleasedOrCancelled = | 140 bool pointerReleasedOrCancelled = |
| 139 pointState == PlatformTouchPoint::TouchReleased | 141 pointState == PlatformTouchPoint::TouchReleased |
| 140 || pointState == PlatformTouchPoint::TouchCancelled; | 142 || pointState == PlatformTouchPoint::TouchCancelled; |
| 141 bool pointerPressedOrReleased = | 143 bool pointerPressedOrReleased = |
| 142 pointState == PlatformTouchPoint::TouchPressed | 144 pointState == PlatformTouchPoint::TouchPressed |
| 143 || pointState == PlatformTouchPoint::TouchReleased; | 145 || pointState == PlatformTouchPoint::TouchReleased; |
| 144 | 146 |
| 145 bool isEnterOrLeave = false; | 147 bool isEnterOrLeave = false; |
| 146 | 148 |
| 147 PointerEventInit pointerEventInit; | 149 PointerEventInit pointerEventInit; |
| 148 | 150 |
| 149 setIdTypeButtons(pointerEventInit, touchPoint.pointerProperties(), | 151 setIdTypeButtons(pointerEventInit, touchPoint.pointerProperties(), |
| 150 pointerReleasedOrCancelled ? 0 : 1); | 152 pointerReleasedOrCancelled ? 0 : 1); |
| 151 | 153 |
| 152 pointerEventInit.setWidth(width); | 154 pointerEventInit.setWidth(pointRadius.width()); |
| 153 pointerEventInit.setHeight(height); | 155 pointerEventInit.setHeight(pointRadius.height()); |
| 154 pointerEventInit.setTiltX(touchPoint.pointerProperties().tiltX); | 156 pointerEventInit.setTiltX(touchPoint.pointerProperties().tiltX); |
| 155 pointerEventInit.setTiltY(touchPoint.pointerProperties().tiltY); | 157 pointerEventInit.setTiltY(touchPoint.pointerProperties().tiltY); |
| 156 pointerEventInit.setScreenX(touchPoint.screenPos().x()); | 158 pointerEventInit.setScreenX(touchPoint.screenPos().x()); |
| 157 pointerEventInit.setScreenY(touchPoint.screenPos().y()); | 159 pointerEventInit.setScreenY(touchPoint.screenPos().y()); |
| 158 pointerEventInit.setClientX(clientX); | 160 pointerEventInit.setClientX(pagePoint.x()); |
| 159 pointerEventInit.setClientY(clientY); | 161 pointerEventInit.setClientY(pagePoint.y()); |
| 160 pointerEventInit.setButton(pointerPressedOrReleased ? LeftButton: NoButton); | 162 pointerEventInit.setButton(pointerPressedOrReleased ? LeftButton: NoButton); |
| 161 pointerEventInit.setPressure(getPointerEventPressure( | 163 pointerEventInit.setPressure(getPointerEventPressure( |
| 162 touchPoint.force(), pointerEventInit.buttons())); | 164 touchPoint.force(), pointerEventInit.buttons())); |
| 163 | 165 |
| 164 UIEventWithKeyState::setFromPlatformModifiers(pointerEventInit, modifiers); | 166 UIEventWithKeyState::setFromPlatformModifiers(pointerEventInit, modifiers); |
| 165 | 167 |
| 166 pointerEventInit.setBubbles(!isEnterOrLeave); | 168 pointerEventInit.setBubbles(!isEnterOrLeave); |
| 167 pointerEventInit.setCancelable(!isEnterOrLeave && pointState != PlatformTouc hPoint::TouchCancelled); | 169 pointerEventInit.setCancelable(!isEnterOrLeave && pointState != PlatformTouc hPoint::TouchCancelled); |
| 168 | 170 |
| 169 return PointerEvent::create(type, pointerEventInit); | 171 return PointerEvent::create(type, pointerEventInit); |
| (...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 302 IncomingId p = m_pointerIdMapping.get(mappedId).incomingId; | 304 IncomingId p = m_pointerIdMapping.get(mappedId).incomingId; |
| 303 int type = p.pointerType(); | 305 int type = p.pointerType(); |
| 304 m_pointerIdMapping.remove(mappedId); | 306 m_pointerIdMapping.remove(mappedId); |
| 305 m_pointerIncomingIdMapping.remove(p); | 307 m_pointerIncomingIdMapping.remove(p); |
| 306 if (m_primaryId[type] == mappedId) | 308 if (m_primaryId[type] == mappedId) |
| 307 m_primaryId[type] = PointerEventFactory::s_invalidId; | 309 m_primaryId[type] = PointerEventFactory::s_invalidId; |
| 308 m_idCount[type]--; | 310 m_idCount[type]--; |
| 309 return true; | 311 return true; |
| 310 } | 312 } |
| 311 | 313 |
| 312 Vector<int> PointerEventFactory::getPointerIdsOfType(WebPointerProperties::Point erType pointerType) | 314 Vector<int> PointerEventFactory::getPointerIdsOfType( |
| 315 WebPointerProperties::PointerType pointerType) const | |
| 313 { | 316 { |
| 314 Vector<int> mappedIds; | 317 Vector<int> mappedIds; |
| 315 | 318 |
| 316 for (auto iter = m_pointerIdMapping.begin(); iter != m_pointerIdMapping.end( ); ++iter) { | 319 for (auto iter = m_pointerIdMapping.begin(); iter != m_pointerIdMapping.end( ); ++iter) { |
| 317 int mappedId = iter->key; | 320 int mappedId = iter->key; |
| 318 if (iter->value.incomingId.pointerType() == static_cast<int>(pointerType )) | 321 if (iter->value.incomingId.pointerType() == static_cast<int>(pointerType )) |
| 319 mappedIds.append(mappedId); | 322 mappedIds.append(mappedId); |
| 320 } | 323 } |
| 321 | 324 |
| 322 // Sorting for a predictable ordering. | 325 // Sorting for a predictable ordering. |
| 323 std::sort(mappedIds.begin(), mappedIds.end()); | 326 std::sort(mappedIds.begin(), mappedIds.end()); |
| 324 return mappedIds; | 327 return mappedIds; |
| 325 } | 328 } |
| 326 | 329 |
| 327 bool PointerEventFactory::isPrimary(int mappedId) const | 330 bool PointerEventFactory::isPrimary(int mappedId) const |
| 328 { | 331 { |
| 329 if (!m_pointerIdMapping.contains(mappedId)) | 332 if (!m_pointerIdMapping.contains(mappedId)) |
| 330 return false; | 333 return false; |
| 331 | 334 |
| 332 IncomingId p = m_pointerIdMapping.get(mappedId).incomingId; | 335 IncomingId p = m_pointerIdMapping.get(mappedId).incomingId; |
| 333 return m_primaryId[p.pointerType()] == mappedId; | 336 return m_primaryId[p.pointerType()] == mappedId; |
| 334 } | 337 } |
| 335 | 338 |
| 336 WebPointerProperties::PointerType PointerEventFactory::getPointerType( | 339 WebPointerProperties::PointerType PointerEventFactory::getPointerType( |
| 337 const int pointerId) | 340 const int pointerId) const |
| 338 { | 341 { |
| 339 if (m_pointerIdMapping.contains(pointerId)) { | 342 if (m_pointerIdMapping.contains(pointerId)) { |
| 340 return static_cast<WebPointerProperties::PointerType>( | 343 return static_cast<WebPointerProperties::PointerType>( |
| 341 m_pointerIdMapping.get(pointerId).incomingId.pointerType()); | 344 m_pointerIdMapping.get(pointerId).incomingId.pointerType()); |
| 342 } | 345 } |
| 343 return WebPointerProperties::PointerType::Unknown; | 346 return WebPointerProperties::PointerType::Unknown; |
| 344 } | 347 } |
| 345 | 348 |
| 346 bool PointerEventFactory::isActive(const int pointerId) | 349 bool PointerEventFactory::isActive(const int pointerId) const |
| 347 { | 350 { |
| 348 return m_pointerIdMapping.contains(pointerId); | 351 return m_pointerIdMapping.contains(pointerId); |
| 349 } | 352 } |
| 350 | 353 |
| 351 bool PointerEventFactory::isActiveButtonsState(const int pointerId) | 354 bool PointerEventFactory::isActiveButtonsState(const int pointerId) const |
| 352 { | 355 { |
| 353 return m_pointerIdMapping.contains(pointerId) | 356 return m_pointerIdMapping.contains(pointerId) |
| 354 && m_pointerIdMapping.get(pointerId).isActiveButtons; | 357 && m_pointerIdMapping.get(pointerId).isActiveButtons; |
| 355 } | 358 } |
| 356 | 359 |
| 360 int PointerEventFactory::getPointerEventId( | |
| 361 const WebPointerProperties& properties) const | |
|
tdresser
2016/04/29 15:55:04
Is |properties| guaranteed to be unique?
Navid Zolghadr
2016/04/29 16:31:19
There are two properties in the WebPointerProperti
mustaq
2016/04/29 17:03:05
Navid is right: it is reasonable to assume that lo
| |
| 362 { | |
| 363 if (properties.pointerType | |
| 364 == WebPointerProperties::PointerType::Mouse) | |
| 365 return PointerEventFactory::s_mouseId; | |
| 366 IncomingId id(properties.pointerType, properties.id); | |
| 367 if (m_pointerIncomingIdMapping.contains(id)) | |
| 368 return m_pointerIncomingIdMapping.get(id); | |
| 369 return PointerEventFactory::s_invalidId; | |
| 370 } | |
| 371 | |
| 357 } // namespace blink | 372 } // namespace blink |
| OLD | NEW |