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 return "pen"; | 24 return "pen"; |
| 25 case WebPointerProperties::PointerType::Mouse: | 25 case WebPointerProperties::PointerType::Mouse: |
| 26 return "mouse"; | 26 return "mouse"; |
| 27 } | 27 } |
| 28 ASSERT_NOT_REACHED(); | 28 NOTREACHED(); |
| 29 return ""; | 29 return ""; |
| 30 } | 30 } |
| 31 | 31 |
| 32 const AtomicString& pointerEventNameForMouseEventName( | 32 const AtomicString& pointerEventNameForMouseEventName( |
| 33 const AtomicString& mouseEventName) | 33 const AtomicString& mouseEventName) |
| 34 { | 34 { |
| 35 #define RETURN_CORRESPONDING_PE_NAME(eventSuffix) \ | 35 #define RETURN_CORRESPONDING_PE_NAME(eventSuffix) \ |
| 36 if (mouseEventName == EventTypeNames::mouse##eventSuffix) {\ | 36 if (mouseEventName == EventTypeNames::mouse##eventSuffix) {\ |
| 37 return EventTypeNames::pointer##eventSuffix;\ | 37 return EventTypeNames::pointer##eventSuffix;\ |
| 38 } | 38 } |
| 39 | 39 |
| 40 RETURN_CORRESPONDING_PE_NAME(down); | 40 RETURN_CORRESPONDING_PE_NAME(down); |
| 41 RETURN_CORRESPONDING_PE_NAME(enter); | 41 RETURN_CORRESPONDING_PE_NAME(enter); |
| 42 RETURN_CORRESPONDING_PE_NAME(leave); | 42 RETURN_CORRESPONDING_PE_NAME(leave); |
| 43 RETURN_CORRESPONDING_PE_NAME(move); | 43 RETURN_CORRESPONDING_PE_NAME(move); |
| 44 RETURN_CORRESPONDING_PE_NAME(out); | 44 RETURN_CORRESPONDING_PE_NAME(out); |
| 45 RETURN_CORRESPONDING_PE_NAME(over); | 45 RETURN_CORRESPONDING_PE_NAME(over); |
| 46 RETURN_CORRESPONDING_PE_NAME(up); | 46 RETURN_CORRESPONDING_PE_NAME(up); |
| 47 | 47 |
| 48 #undef RETURN_CORRESPONDING_PE_NAME | 48 #undef RETURN_CORRESPONDING_PE_NAME |
| 49 | 49 |
| 50 ASSERT_NOT_REACHED(); | 50 NOTREACHED(); |
| 51 return emptyAtom; | 51 return emptyAtom; |
| 52 } | 52 } |
| 53 | 53 |
| 54 } // namespace | 54 } // namespace |
| 55 | 55 |
| 56 const int PointerEventFactory::s_invalidId = 0; | 56 const int PointerEventFactory::s_invalidId = 0; |
| 57 | 57 |
| 58 // Mouse id is 1 to behave the same as MS Edge for compatibility reasons. | 58 // Mouse id is 1 to behave the same as MS Edge for compatibility reasons. |
| 59 const int PointerEventFactory::s_mouseId = 1; | 59 const int PointerEventFactory::s_mouseId = 1; |
| 60 | 60 |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 71 const WebPointerProperties::PointerType pointerType = pointerProperties.poin terType; | 71 const WebPointerProperties::PointerType pointerType = pointerProperties.poin terType; |
| 72 const IncomingId incomingId(pointerType, pointerProperties.id); | 72 const IncomingId incomingId(pointerType, pointerProperties.id); |
| 73 int pointerId = addIdAndActiveButtons(incomingId, buttons != 0); | 73 int pointerId = addIdAndActiveButtons(incomingId, buttons != 0); |
| 74 | 74 |
| 75 pointerEventInit.setButtons(buttons); | 75 pointerEventInit.setButtons(buttons); |
| 76 pointerEventInit.setPointerId(pointerId); | 76 pointerEventInit.setPointerId(pointerId); |
| 77 pointerEventInit.setPointerType(pointerTypeNameForWebPointPointerType(pointe rType)); | 77 pointerEventInit.setPointerType(pointerTypeNameForWebPointPointerType(pointe rType)); |
| 78 pointerEventInit.setIsPrimary(isPrimary(pointerId)); | 78 pointerEventInit.setIsPrimary(isPrimary(pointerId)); |
| 79 } | 79 } |
| 80 | 80 |
| 81 void PointerEventFactory::setBubblesAndCancelable(PointerEventInit& pointerEvent Init, | 81 void PointerEventFactory::setBubblesAndCancelable( |
| 82 const AtomicString& type) | 82 PointerEventInit& pointerEventInit, const AtomicString& type) |
| 83 { | 83 { |
| 84 pointerEventInit.setBubbles(type != EventTypeNames::pointerenter | 84 pointerEventInit.setBubbles(type != EventTypeNames::pointerenter |
| 85 && type != EventTypeNames::pointerleave); | 85 && type != EventTypeNames::pointerleave); |
| 86 pointerEventInit.setCancelable(type != EventTypeNames::pointerenter | 86 pointerEventInit.setCancelable(type != EventTypeNames::pointerenter |
| 87 && type != EventTypeNames::pointerleave && type != EventTypeNames::point ercancel); | 87 && type != EventTypeNames::pointerleave |
| 88 && type != EventTypeNames::pointercancel | |
| 89 && type != EventTypeNames::gotpointercapture | |
| 90 && type != EventTypeNames::lostpointercapture); | |
| 88 } | 91 } |
| 89 | 92 |
| 90 PointerEvent* PointerEventFactory::create( | 93 PointerEvent* PointerEventFactory::create( |
| 91 const AtomicString& mouseEventName, const PlatformMouseEvent& mouseEvent, | 94 const AtomicString& mouseEventName, const PlatformMouseEvent& mouseEvent, |
| 92 EventTarget* relatedTarget, | 95 EventTarget* relatedTarget, |
| 93 LocalDOMWindow* view) | 96 LocalDOMWindow* view) |
| 94 { | 97 { |
| 95 DCHECK(mouseEventName == EventTypeNames::mousemove | 98 DCHECK(mouseEventName == EventTypeNames::mousemove |
| 96 || mouseEventName == EventTypeNames::mousedown | 99 || mouseEventName == EventTypeNames::mousedown |
| 97 || mouseEventName == EventTypeNames::mouseup); | 100 || mouseEventName == EventTypeNames::mouseup); |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 186 | 189 |
| 187 pointerEventInit.setBubbles(!isEnterOrLeave); | 190 pointerEventInit.setBubbles(!isEnterOrLeave); |
| 188 pointerEventInit.setCancelable(!isEnterOrLeave && pointState != PlatformTouc hPoint::TouchCancelled); | 191 pointerEventInit.setCancelable(!isEnterOrLeave && pointState != PlatformTouc hPoint::TouchCancelled); |
| 189 | 192 |
| 190 return PointerEvent::create(type, pointerEventInit); | 193 return PointerEvent::create(type, pointerEventInit); |
| 191 } | 194 } |
| 192 | 195 |
| 193 PointerEvent* PointerEventFactory::createPointerCancelEvent( | 196 PointerEvent* PointerEventFactory::createPointerCancelEvent( |
| 194 const int pointerId, const WebPointerProperties::PointerType pointerType) | 197 const int pointerId, const WebPointerProperties::PointerType pointerType) |
| 195 { | 198 { |
| 196 ASSERT(m_pointerIdMapping.contains(pointerId)); | 199 DCHECK(m_pointerIdMapping.contains(pointerId)); |
| 197 m_pointerIdMapping.set(pointerId, PointerAttributes(m_pointerIdMapping.get(p ointerId).incomingId, false)); | 200 m_pointerIdMapping.set(pointerId, PointerAttributes(m_pointerIdMapping.get(p ointerId).incomingId, false)); |
| 198 | 201 |
| 199 PointerEventInit pointerEventInit; | 202 PointerEventInit pointerEventInit; |
| 200 | 203 |
| 201 pointerEventInit.setPointerId(pointerId); | 204 pointerEventInit.setPointerId(pointerId); |
| 202 pointerEventInit.setPointerType(pointerTypeNameForWebPointPointerType(pointe rType)); | 205 pointerEventInit.setPointerType(pointerTypeNameForWebPointPointerType(pointe rType)); |
| 203 pointerEventInit.setIsPrimary(isPrimary(pointerId)); | 206 pointerEventInit.setIsPrimary(isPrimary(pointerId)); |
| 204 pointerEventInit.setBubbles(true); | 207 pointerEventInit.setBubbles(true); |
| 205 pointerEventInit.setCancelable(false); | 208 pointerEventInit.setCancelable(false); |
| 206 | 209 |
| 207 return PointerEvent::create(EventTypeNames::pointercancel, pointerEventInit) ; | 210 return PointerEvent::create(EventTypeNames::pointercancel, pointerEventInit) ; |
| 208 } | 211 } |
| 209 | 212 |
| 210 PointerEvent* PointerEventFactory::createPointerCaptureEvent( | 213 PointerEvent* PointerEventFactory::createSecondaryPointerEvent( |
|
mustaq
2016/08/05 15:51:22
This is now a generic PE creator method, so "secon
Navid Zolghadr
2016/08/05 17:08:03
Done.
| |
| 211 PointerEvent* pointerEvent, | |
| 212 const AtomicString& type) | |
| 213 { | |
| 214 ASSERT(type == EventTypeNames::gotpointercapture | |
| 215 || type == EventTypeNames::lostpointercapture); | |
| 216 | |
| 217 PointerEventInit pointerEventInit; | |
| 218 pointerEventInit.setPointerId(pointerEvent->pointerId()); | |
| 219 pointerEventInit.setPointerType(pointerEvent->pointerType()); | |
| 220 pointerEventInit.setIsPrimary(pointerEvent->isPrimary()); | |
| 221 pointerEventInit.setBubbles(true); | |
| 222 pointerEventInit.setCancelable(false); | |
| 223 | |
| 224 return PointerEvent::create(type, pointerEventInit); | |
| 225 } | |
| 226 | |
| 227 PointerEvent* PointerEventFactory::createPointerBoundaryEvent( | |
| 228 PointerEvent* pointerEvent, | 214 PointerEvent* pointerEvent, |
| 229 const AtomicString& type, | 215 const AtomicString& type, |
| 230 EventTarget* relatedTarget) | 216 EventTarget* relatedTarget) |
| 231 { | 217 { |
| 232 ASSERT(type == EventTypeNames::pointerout | |
| 233 || type == EventTypeNames::pointerleave | |
| 234 || type == EventTypeNames::pointerover | |
| 235 || type == EventTypeNames::pointerenter); | |
| 236 | |
| 237 PointerEventInit pointerEventInit; | 218 PointerEventInit pointerEventInit; |
| 238 | 219 |
| 239 pointerEventInit.setPointerId(pointerEvent->pointerId()); | 220 pointerEventInit.setPointerId(pointerEvent->pointerId()); |
| 240 pointerEventInit.setPointerType(pointerEvent->pointerType()); | 221 pointerEventInit.setPointerType(pointerEvent->pointerType()); |
| 241 pointerEventInit.setIsPrimary(pointerEvent->isPrimary()); | 222 pointerEventInit.setIsPrimary(pointerEvent->isPrimary()); |
| 242 pointerEventInit.setWidth(pointerEvent->width()); | 223 pointerEventInit.setWidth(pointerEvent->width()); |
| 243 pointerEventInit.setHeight(pointerEvent->height()); | 224 pointerEventInit.setHeight(pointerEvent->height()); |
| 244 pointerEventInit.setScreenX(pointerEvent->screenX()); | 225 pointerEventInit.setScreenX(pointerEvent->screenX()); |
| 245 pointerEventInit.setScreenY(pointerEvent->screenY()); | 226 pointerEventInit.setScreenY(pointerEvent->screenY()); |
| 246 pointerEventInit.setClientX(pointerEvent->clientX()); | 227 pointerEventInit.setClientX(pointerEvent->clientX()); |
| 247 pointerEventInit.setClientY(pointerEvent->clientY()); | 228 pointerEventInit.setClientY(pointerEvent->clientY()); |
| 248 pointerEventInit.setButton(pointerEvent->button()); | 229 pointerEventInit.setButton(pointerEvent->button()); |
| 249 pointerEventInit.setButtons(pointerEvent->buttons()); | 230 pointerEventInit.setButtons(pointerEvent->buttons()); |
| 250 pointerEventInit.setPressure(pointerEvent->pressure()); | 231 pointerEventInit.setPressure(pointerEvent->pressure()); |
| 251 pointerEventInit.setTiltX(pointerEvent->tiltX()); | 232 pointerEventInit.setTiltX(pointerEvent->tiltX()); |
| 252 pointerEventInit.setTiltY(pointerEvent->tiltY()); | 233 pointerEventInit.setTiltY(pointerEvent->tiltY()); |
| 253 pointerEventInit.setView(pointerEvent->view()); | 234 pointerEventInit.setView(pointerEvent->view()); |
| 254 | 235 |
| 255 setBubblesAndCancelable(pointerEventInit, type); | 236 setBubblesAndCancelable(pointerEventInit, type); |
| 256 | 237 |
| 257 if (relatedTarget) | 238 if (relatedTarget) |
| 258 pointerEventInit.setRelatedTarget(relatedTarget); | 239 pointerEventInit.setRelatedTarget(relatedTarget); |
| 259 | 240 |
| 260 return PointerEvent::create(type, pointerEventInit); | 241 return PointerEvent::create(type, pointerEventInit); |
| 261 } | 242 } |
| 262 | 243 |
| 244 PointerEvent* PointerEventFactory::createPointerCaptureEvent( | |
|
mustaq
2016/08/05 15:51:22
Let's drop createPointerCaptureEvent & createPoint
Navid Zolghadr
2016/08/05 17:08:03
I would say let's keep the APIs different as one n
mustaq
2016/08/05 17:29:17
Acknowledged.
| |
| 245 PointerEvent* pointerEvent, | |
| 246 const AtomicString& type) | |
| 247 { | |
| 248 DCHECK(type == EventTypeNames::gotpointercapture | |
| 249 || type == EventTypeNames::lostpointercapture); | |
| 250 | |
| 251 return createSecondaryPointerEvent( | |
| 252 pointerEvent, type, pointerEvent->relatedTarget()); | |
| 253 } | |
| 254 | |
| 255 PointerEvent* PointerEventFactory::createPointerBoundaryEvent( | |
| 256 PointerEvent* pointerEvent, | |
| 257 const AtomicString& type, | |
| 258 EventTarget* relatedTarget) | |
| 259 { | |
| 260 DCHECK(type == EventTypeNames::pointerout | |
| 261 || type == EventTypeNames::pointerleave | |
| 262 || type == EventTypeNames::pointerover | |
| 263 || type == EventTypeNames::pointerenter); | |
| 264 | |
| 265 return createSecondaryPointerEvent(pointerEvent, type, relatedTarget); | |
| 266 } | |
| 267 | |
| 263 PointerEventFactory::PointerEventFactory() | 268 PointerEventFactory::PointerEventFactory() |
| 264 { | 269 { |
| 265 clear(); | 270 clear(); |
| 266 } | 271 } |
| 267 | 272 |
| 268 PointerEventFactory::~PointerEventFactory() | 273 PointerEventFactory::~PointerEventFactory() |
| 269 { | 274 { |
| 270 clear(); | 275 clear(); |
| 271 } | 276 } |
| 272 | 277 |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 373 if (properties.pointerType | 378 if (properties.pointerType |
| 374 == WebPointerProperties::PointerType::Mouse) | 379 == WebPointerProperties::PointerType::Mouse) |
| 375 return PointerEventFactory::s_mouseId; | 380 return PointerEventFactory::s_mouseId; |
| 376 IncomingId id(properties.pointerType, properties.id); | 381 IncomingId id(properties.pointerType, properties.id); |
| 377 if (m_pointerIncomingIdMapping.contains(id)) | 382 if (m_pointerIncomingIdMapping.contains(id)) |
| 378 return m_pointerIncomingIdMapping.get(id); | 383 return m_pointerIncomingIdMapping.get(id); |
| 379 return PointerEventFactory::s_invalidId; | 384 return PointerEventFactory::s_invalidId; |
| 380 } | 385 } |
| 381 | 386 |
| 382 } // namespace blink | 387 } // namespace blink |
| OLD | NEW |