Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1060)

Side by Side Diff: third_party/WebKit/Source/core/events/PointerEventFactory.cpp

Issue 2199263005: Fix properties of got/lostpointercapture (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Update the test output Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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::createPointerEventFrom(
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(
245 PointerEvent* pointerEvent,
246 const AtomicString& type)
247 {
248 DCHECK(type == EventTypeNames::gotpointercapture
249 || type == EventTypeNames::lostpointercapture);
250
251 return createPointerEventFrom(
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 createPointerEventFrom(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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698