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 "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 { |
| 11 | 11 |
| 12 namespace { | 12 namespace { |
| 13 | 13 |
| 14 inline int toInt(WebPointerProperties::PointerType t) { return static_cast<int>( t); } | 14 inline int toInt(WebPointerProperties::PointerType t) { return static_cast<int>( t); } |
| 15 | 15 |
| 16 const char* pointerTypeNameForWebPointPointerType(WebPointerProperties::PointerT ype type) | 16 const char* pointerTypeNameForWebPointPointerType(WebPointerProperties::PointerT ype type) |
| 17 { | 17 { |
| 18 switch (type) { | 18 switch (type) { |
| 19 case WebPointerProperties::PointerType::Unknown: | 19 case WebPointerProperties::PointerType::Unknown: |
| 20 return ""; | 20 return ""; |
| 21 case WebPointerProperties::PointerType::Touch: | 21 case WebPointerProperties::PointerType::Touch: |
| 22 return "touch"; | 22 return "touch"; |
| 23 case WebPointerProperties::PointerType::Pen: | 23 case WebPointerProperties::PointerType::Pen: |
| 24 case WebPointerProperties::PointerType::Eraser: | 24 case WebPointerProperties::PointerType::Eraser: |
| 25 // TODO(mustaq): Fix when the spec starts supporting hovering erasers. | |
| 25 return "pen"; | 26 return "pen"; |
| 26 case WebPointerProperties::PointerType::Mouse: | 27 case WebPointerProperties::PointerType::Mouse: |
| 27 return "mouse"; | 28 return "mouse"; |
| 28 } | 29 } |
| 29 NOTREACHED(); | 30 NOTREACHED(); |
| 30 return ""; | 31 return ""; |
| 31 } | 32 } |
| 32 | 33 |
| 33 const AtomicString& pointerEventNameForMouseEventName( | 34 const AtomicString& pointerEventNameForMouseEventName( |
| 34 const AtomicString& mouseEventName) | 35 const AtomicString& mouseEventName) |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 71 | 72 |
| 72 } // namespace | 73 } // namespace |
| 73 | 74 |
| 74 const int PointerEventFactory::s_invalidId = 0; | 75 const int PointerEventFactory::s_invalidId = 0; |
| 75 | 76 |
| 76 // Mouse id is 1 to behave the same as MS Edge for compatibility reasons. | 77 // Mouse id is 1 to behave the same as MS Edge for compatibility reasons. |
| 77 const int PointerEventFactory::s_mouseId = 1; | 78 const int PointerEventFactory::s_mouseId = 1; |
| 78 | 79 |
| 79 float getPointerEventPressure(float force, int buttons) | 80 float getPointerEventPressure(float force, int buttons) |
| 80 { | 81 { |
| 81 if (std::isnan(force)) | 82 if (std::isnan(force)) { |
| 82 return buttons ? 0.5 : 0; | 83 // TODO(mustaq): Fix when the spec starts supporting hovering erasers. |
| 84 return (buttons & ~static_cast<unsigned>(MouseEvent::Buttons::Eraser)) ? 0.5 : 0; | |
| 85 } | |
| 83 return force; | 86 return force; |
| 84 } | 87 } |
| 85 | 88 |
| 86 void PointerEventFactory::setIdTypeButtons(PointerEventInit& pointerEventInit, | 89 void PointerEventFactory::setIdTypeButtons(PointerEventInit& pointerEventInit, |
| 87 const WebPointerProperties& pointerProperties, unsigned buttons) | 90 const WebPointerProperties& pointerProperties, unsigned buttons) |
| 88 { | 91 { |
| 89 const WebPointerProperties::PointerType pointerType = pointerProperties.poin terType; | 92 const WebPointerProperties::PointerType pointerType = pointerProperties.poin terType; |
| 90 const IncomingId incomingId(pointerType, pointerProperties.id); | 93 const IncomingId incomingId(pointerType, pointerProperties.id); |
| 91 int pointerId = addIdAndActiveButtons(incomingId, buttons != 0); | 94 int pointerId = addIdAndActiveButtons(incomingId, buttons != 0); |
| 92 | 95 |
| 96 // Tweak the |buttons| to reflect pen eraser mode only if the pen is in | |
| 97 // active buttons state w/o even considering the eraser button. | |
| 98 // TODO(mustaq): Fix when the spec starts supporting hovering erasers. | |
| 99 if (pointerType == WebPointerProperties::PointerType::Eraser && buttons != 0 ) | |
|
Navid Zolghadr
2016/08/31 20:01:16
I wonder if we can just do this when pointerType i
mustaq
2016/08/31 20:29:37
I don't like this for two reasons:
[A] That would
| |
| 100 buttons |= static_cast<unsigned>(MouseEvent::Buttons::Eraser); | |
| 93 pointerEventInit.setButtons(buttons); | 101 pointerEventInit.setButtons(buttons); |
| 102 | |
| 94 pointerEventInit.setPointerId(pointerId); | 103 pointerEventInit.setPointerId(pointerId); |
| 95 pointerEventInit.setPointerType(pointerTypeNameForWebPointPointerType(pointe rType)); | 104 pointerEventInit.setPointerType(pointerTypeNameForWebPointPointerType(pointe rType)); |
| 96 pointerEventInit.setIsPrimary(isPrimary(pointerId)); | 105 pointerEventInit.setIsPrimary(isPrimary(pointerId)); |
| 97 } | 106 } |
| 98 | 107 |
| 99 void PointerEventFactory::setBubblesAndCancelable( | 108 void PointerEventFactory::setBubblesAndCancelable( |
| 100 PointerEventInit& pointerEventInit, const AtomicString& type) | 109 PointerEventInit& pointerEventInit, const AtomicString& type) |
| 101 { | 110 { |
| 102 pointerEventInit.setBubbles(type != EventTypeNames::pointerenter | 111 pointerEventInit.setBubbles(type != EventTypeNames::pointerenter |
| 103 && type != EventTypeNames::pointerleave); | 112 && type != EventTypeNames::pointerleave); |
| (...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 395 if (properties.pointerType | 404 if (properties.pointerType |
| 396 == WebPointerProperties::PointerType::Mouse) | 405 == WebPointerProperties::PointerType::Mouse) |
| 397 return PointerEventFactory::s_mouseId; | 406 return PointerEventFactory::s_mouseId; |
| 398 IncomingId id(properties.pointerType, properties.id); | 407 IncomingId id(properties.pointerType, properties.id); |
| 399 if (m_pointerIncomingIdMapping.contains(id)) | 408 if (m_pointerIncomingIdMapping.contains(id)) |
| 400 return m_pointerIncomingIdMapping.get(id); | 409 return m_pointerIncomingIdMapping.get(id); |
| 401 return PointerEventFactory::s_invalidId; | 410 return PointerEventFactory::s_invalidId; |
| 402 } | 411 } |
| 403 | 412 |
| 404 } // namespace blink | 413 } // namespace blink |
| OLD | NEW |