Chromium Code Reviews| Index: third_party/WebKit/Source/core/events/PointerEventFactory.cpp |
| diff --git a/third_party/WebKit/Source/core/events/PointerEventFactory.cpp b/third_party/WebKit/Source/core/events/PointerEventFactory.cpp |
| index 04490da249950fe039c2c8180037c7427548963f..faa778c9abe897d326739d16cb35af655da09548 100644 |
| --- a/third_party/WebKit/Source/core/events/PointerEventFactory.cpp |
| +++ b/third_party/WebKit/Source/core/events/PointerEventFactory.cpp |
| @@ -62,8 +62,8 @@ float getPointerEventPressure(float force, int buttons) |
| return force; |
| } |
| -void PointerEventFactory::setIdTypeButtons(PointerEventInit &pointerEventInit, |
| - const WebPointerProperties &pointerProperties, unsigned buttons) |
| +void PointerEventFactory::setIdTypeButtons(PointerEventInit& pointerEventInit, |
| + const WebPointerProperties& pointerProperties, unsigned buttons) |
| { |
| const WebPointerProperties::PointerType pointerType = pointerProperties.pointerType; |
| const IncomingId incomingId(pointerType, pointerProperties.id); |
| @@ -75,6 +75,15 @@ void PointerEventFactory::setIdTypeButtons(PointerEventInit &pointerEventInit, |
| pointerEventInit.setIsPrimary(isPrimary(pointerId)); |
| } |
| +void PointerEventFactory::setBubblesAndCancelable(PointerEventInit& pointerEventInit, |
| + const AtomicString& type) |
| +{ |
| + pointerEventInit.setBubbles(type != EventTypeNames::pointerenter |
| + && type != EventTypeNames::pointerleave); |
| + pointerEventInit.setCancelable(type != EventTypeNames::pointerenter |
| + && type != EventTypeNames::pointerleave && type != EventTypeNames::pointercancel); |
| +} |
| + |
| PassRefPtrWillBeRawPtr<PointerEvent> PointerEventFactory::create( |
| const AtomicString& mouseEventName, const PlatformMouseEvent& mouseEvent, |
| PassRefPtrWillBeRawPtr<EventTarget> relatedTarget, |
| @@ -85,6 +94,7 @@ PassRefPtrWillBeRawPtr<PointerEvent> PointerEventFactory::create( |
| PointerEventInit pointerEventInit; |
| setIdTypeButtons(pointerEventInit, mouseEvent.pointerProperties(), buttons); |
| + setBubblesAndCancelable(pointerEventInit, pointerEventName); |
| pointerEventInit.setScreenX(mouseEvent.globalPosition().x()); |
| pointerEventInit.setScreenY(mouseEvent.globalPosition().y()); |
| @@ -110,13 +120,6 @@ PassRefPtrWillBeRawPtr<PointerEvent> PointerEventFactory::create( |
| || (pointerEventName == EventTypeNames::pointerup && buttons != 0)) |
| pointerEventName = EventTypeNames::pointermove; |
| - pointerEventInit.setBubbles( |
| - pointerEventName != EventTypeNames::pointerenter |
| - && pointerEventName != EventTypeNames::pointerleave); |
| - pointerEventInit.setCancelable( |
| - pointerEventName != EventTypeNames::pointerenter |
| - && pointerEventName != EventTypeNames::pointerleave |
| - && pointerEventName != EventTypeNames::pointercancel); |
| pointerEventInit.setView(view); |
| if (relatedTarget) |
| @@ -166,13 +169,14 @@ PassRefPtrWillBeRawPtr<PointerEvent> PointerEventFactory::create(const AtomicStr |
| return PointerEvent::create(type, pointerEventInit); |
| } |
| - |
| -PassRefPtrWillBeRawPtr<PointerEvent> PointerEventFactory::createPointerCancelEvent(const PlatformTouchPoint& touchPoint) |
| +PassRefPtrWillBeRawPtr<PointerEvent> PointerEventFactory::createPointerCancelEvent( |
| + const int pointerId, const WebPointerProperties::PointerType pointerType) |
| { |
| PointerEventInit pointerEventInit; |
| - setIdTypeButtons(pointerEventInit, touchPoint.pointerProperties(), 0); |
| - |
| + pointerEventInit.setPointerId(pointerId); |
| + pointerEventInit.setPointerType(pointerTypeNameForWebPointPointerType(pointerType)); |
| + pointerEventInit.setIsPrimary(isPrimary(pointerId)); |
| pointerEventInit.setBubbles(true); |
| pointerEventInit.setCancelable(false); |
| @@ -223,11 +227,8 @@ PassRefPtrWillBeRawPtr<PointerEvent> PointerEventFactory::createPointerTransitio |
| pointerEventInit.setButtons(pointerEvent->buttons()); |
| pointerEventInit.setPressure(pointerEvent->pressure()); |
| - pointerEventInit.setBubbles(type != EventTypeNames::pointerenter |
| - && type != EventTypeNames::pointerleave); |
| - pointerEventInit.setCancelable(type != EventTypeNames::pointerenter |
| - && type != EventTypeNames::pointerleave |
| - && type != EventTypeNames::pointercancel); |
| + setBubblesAndCancelable(pointerEventInit, type); |
| + |
| if (relatedTarget) |
| pointerEventInit.setRelatedTarget(relatedTarget); |
| @@ -289,10 +290,8 @@ int PointerEventFactory::addIdAndActiveButtons(const IncomingId p, |
| return mappedId; |
| } |
| -bool PointerEventFactory::remove( |
| - const PassRefPtrWillBeRawPtr<PointerEvent> pointerEvent) |
| +bool PointerEventFactory::remove(const int mappedId) |
| { |
| - int mappedId = pointerEvent->pointerId(); |
| // Do not remove mouse pointer id as it should always be there |
| if (mappedId == s_mouseId || !m_pointerIdMapping.contains(mappedId)) |
| return false; |
| @@ -307,6 +306,21 @@ bool PointerEventFactory::remove( |
| return true; |
| } |
| +WillBeHeapVector<int> PointerEventFactory::getPointerIdsOfType(WebPointerProperties::PointerType pointerType) |
| +{ |
| + WillBeHeapVector<int> mappedIds; |
| + |
| + for (auto iter = m_pointerIdMapping.begin(); iter != m_pointerIdMapping.end(); ++iter) { |
| + int mappedId = iter->key; |
| + if (iter->value.incomingId.pointerType() == static_cast<int>(pointerType)) |
| + mappedIds.append(mappedId); |
| + } |
| + |
| + // Sorting for a predictable ordering. |
| + std::sort(mappedIds.begin(), mappedIds.end()); |
|
tdresser
2016/04/01 14:50:24
Why does this needs a stable ordering?
mustaq
2016/04/01 18:31:05
Removed.
I will bring it back if you don't like t
tdresser
2016/04/01 19:03:20
Hmmm, I'm actually not sure what's correct here. W
tdresser
2016/04/11 13:18:47
I see you added this back - do others browsers sor
|
| + return mappedIds; |
| +} |
| + |
| bool PointerEventFactory::isPrimary(int mappedId) const |
| { |
| if (!m_pointerIdMapping.contains(mappedId)) |