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

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

Issue 2478313003: Fixed composed & detail fields in PointerEvents. (Closed)
Patch Set: Created 4 years, 1 month 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
« no previous file with comments | « third_party/WebKit/Source/core/events/PointerEventFactory.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 {
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
106 buttons &= ~static_cast<unsigned>(WebPointerProperties::Buttons::Left); 106 buttons &= ~static_cast<unsigned>(WebPointerProperties::Buttons::Left);
107 } 107 }
108 pointerEventInit.setButtons(buttons); 108 pointerEventInit.setButtons(buttons);
109 109
110 pointerEventInit.setPointerId(pointerId); 110 pointerEventInit.setPointerId(pointerId);
111 pointerEventInit.setPointerType( 111 pointerEventInit.setPointerType(
112 pointerTypeNameForWebPointPointerType(pointerType)); 112 pointerTypeNameForWebPointPointerType(pointerType));
113 pointerEventInit.setIsPrimary(isPrimary(pointerId)); 113 pointerEventInit.setIsPrimary(isPrimary(pointerId));
114 } 114 }
115 115
116 void PointerEventFactory::setBubblesAndCancelable( 116 void PointerEventFactory::setEventSpecificFields(
117 PointerEventInit& pointerEventInit, 117 PointerEventInit& pointerEventInit,
118 const AtomicString& type) { 118 const AtomicString& type) {
119 pointerEventInit.setBubbles(type != EventTypeNames::pointerenter && 119 pointerEventInit.setBubbles(type != EventTypeNames::pointerenter &&
120 type != EventTypeNames::pointerleave); 120 type != EventTypeNames::pointerleave);
121 pointerEventInit.setCancelable(type != EventTypeNames::pointerenter && 121 pointerEventInit.setCancelable(type != EventTypeNames::pointerenter &&
122 type != EventTypeNames::pointerleave && 122 type != EventTypeNames::pointerleave &&
123 type != EventTypeNames::pointercancel && 123 type != EventTypeNames::pointercancel &&
124 type != EventTypeNames::gotpointercapture && 124 type != EventTypeNames::gotpointercapture &&
125 type != EventTypeNames::lostpointercapture); 125 type != EventTypeNames::lostpointercapture);
126
127 pointerEventInit.setComposed(true);
128 pointerEventInit.setDetail(0);
126 } 129 }
127 130
128 PointerEvent* PointerEventFactory::create(const AtomicString& mouseEventName, 131 PointerEvent* PointerEventFactory::create(const AtomicString& mouseEventName,
129 const PlatformMouseEvent& mouseEvent, 132 const PlatformMouseEvent& mouseEvent,
130 LocalDOMWindow* view) { 133 LocalDOMWindow* view) {
131 DCHECK(mouseEventName == EventTypeNames::mousemove || 134 DCHECK(mouseEventName == EventTypeNames::mousemove ||
132 mouseEventName == EventTypeNames::mousedown || 135 mouseEventName == EventTypeNames::mousedown ||
133 mouseEventName == EventTypeNames::mouseup); 136 mouseEventName == EventTypeNames::mouseup);
134 137
135 AtomicString pointerEventName = 138 AtomicString pointerEventName =
136 pointerEventNameForMouseEventName(mouseEventName); 139 pointerEventNameForMouseEventName(mouseEventName);
137 unsigned buttons = 140 unsigned buttons =
138 MouseEvent::platformModifiersToButtons(mouseEvent.getModifiers()); 141 MouseEvent::platformModifiersToButtons(mouseEvent.getModifiers());
139 PointerEventInit pointerEventInit; 142 PointerEventInit pointerEventInit;
140 143
141 setIdTypeButtons(pointerEventInit, mouseEvent.pointerProperties(), buttons); 144 setIdTypeButtons(pointerEventInit, mouseEvent.pointerProperties(), buttons);
142 setBubblesAndCancelable(pointerEventInit, pointerEventName); 145 setEventSpecificFields(pointerEventInit, pointerEventName);
143 146
144 pointerEventInit.setScreenX(mouseEvent.globalPosition().x()); 147 pointerEventInit.setScreenX(mouseEvent.globalPosition().x());
145 pointerEventInit.setScreenY(mouseEvent.globalPosition().y()); 148 pointerEventInit.setScreenY(mouseEvent.globalPosition().y());
146 149
147 IntPoint locationInFrameZoomed; 150 IntPoint locationInFrameZoomed;
148 if (view && view->frame() && view->frame()->view()) { 151 if (view && view->frame() && view->frame()->view()) {
149 LocalFrame* frame = view->frame(); 152 LocalFrame* frame = view->frame();
150 FrameView* frameView = frame->view(); 153 FrameView* frameView = frame->view();
151 IntPoint locationInContents = 154 IntPoint locationInContents =
152 frameView->rootFrameToContents(mouseEvent.position()); 155 frameView->rootFrameToContents(mouseEvent.position());
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
202 DOMWindow* view) { 205 DOMWindow* view) {
203 const PlatformTouchPoint::TouchState pointState = touchPoint.state(); 206 const PlatformTouchPoint::TouchState pointState = touchPoint.state();
204 207
205 bool pointerReleasedOrCancelled = 208 bool pointerReleasedOrCancelled =
206 pointState == PlatformTouchPoint::TouchReleased || 209 pointState == PlatformTouchPoint::TouchReleased ||
207 pointState == PlatformTouchPoint::TouchCancelled; 210 pointState == PlatformTouchPoint::TouchCancelled;
208 bool pointerPressedOrReleased = 211 bool pointerPressedOrReleased =
209 pointState == PlatformTouchPoint::TouchPressed || 212 pointState == PlatformTouchPoint::TouchPressed ||
210 pointState == PlatformTouchPoint::TouchReleased; 213 pointState == PlatformTouchPoint::TouchReleased;
211 214
212 bool isEnterOrLeave = false;
213
214 PointerEventInit pointerEventInit; 215 PointerEventInit pointerEventInit;
215 216
216 setIdTypeButtons(pointerEventInit, touchPoint.pointerProperties(), 217 setIdTypeButtons(pointerEventInit, touchPoint.pointerProperties(),
217 pointerReleasedOrCancelled ? 0 : 1); 218 pointerReleasedOrCancelled ? 0 : 1);
218 219
219 pointerEventInit.setWidth(pointRadius.width()); 220 pointerEventInit.setWidth(pointRadius.width());
220 pointerEventInit.setHeight(pointRadius.height()); 221 pointerEventInit.setHeight(pointRadius.height());
221 pointerEventInit.setScreenX(touchPoint.screenPos().x()); 222 pointerEventInit.setScreenX(touchPoint.screenPos().x());
222 pointerEventInit.setScreenY(touchPoint.screenPos().y()); 223 pointerEventInit.setScreenY(touchPoint.screenPos().y());
223 pointerEventInit.setClientX(clientPoint.x()); 224 pointerEventInit.setClientX(clientPoint.x());
224 pointerEventInit.setClientY(clientPoint.y()); 225 pointerEventInit.setClientY(clientPoint.y());
225 pointerEventInit.setButton(static_cast<int>( 226 pointerEventInit.setButton(static_cast<int>(
226 pointerPressedOrReleased ? WebPointerProperties::Button::Left 227 pointerPressedOrReleased ? WebPointerProperties::Button::Left
227 : WebPointerProperties::Button::NoButton)); 228 : WebPointerProperties::Button::NoButton));
228 pointerEventInit.setPressure( 229 pointerEventInit.setPressure(
229 getPointerEventPressure(touchPoint.force(), pointerEventInit.buttons())); 230 getPointerEventPressure(touchPoint.force(), pointerEventInit.buttons()));
230 pointerEventInit.setTiltX(touchPoint.pointerProperties().tiltX); 231 pointerEventInit.setTiltX(touchPoint.pointerProperties().tiltX);
231 pointerEventInit.setTiltY(touchPoint.pointerProperties().tiltY); 232 pointerEventInit.setTiltY(touchPoint.pointerProperties().tiltY);
232 pointerEventInit.setView(view); 233 pointerEventInit.setView(view);
233 234
234 UIEventWithKeyState::setFromPlatformModifiers(pointerEventInit, modifiers); 235 UIEventWithKeyState::setFromPlatformModifiers(pointerEventInit, modifiers);
235 236
236 pointerEventInit.setBubbles(!isEnterOrLeave); 237 setEventSpecificFields(pointerEventInit, type);
237 pointerEventInit.setCancelable(
238 !isEnterOrLeave && pointState != PlatformTouchPoint::TouchCancelled);
239 238
240 return PointerEvent::create(type, pointerEventInit); 239 return PointerEvent::create(type, pointerEventInit);
241 } 240 }
242 241
243 PointerEvent* PointerEventFactory::createPointerCancelEvent( 242 PointerEvent* PointerEventFactory::createPointerCancelEvent(
244 const int pointerId, 243 const int pointerId,
245 const WebPointerProperties::PointerType pointerType) { 244 const WebPointerProperties::PointerType pointerType) {
246 DCHECK(m_pointerIdMapping.contains(pointerId)); 245 DCHECK(m_pointerIdMapping.contains(pointerId));
247 m_pointerIdMapping.set( 246 m_pointerIdMapping.set(
248 pointerId, 247 pointerId,
249 PointerAttributes(m_pointerIdMapping.get(pointerId).incomingId, false)); 248 PointerAttributes(m_pointerIdMapping.get(pointerId).incomingId, false));
250 249
251 PointerEventInit pointerEventInit; 250 PointerEventInit pointerEventInit;
252 251
253 pointerEventInit.setPointerId(pointerId); 252 pointerEventInit.setPointerId(pointerId);
254 pointerEventInit.setPointerType( 253 pointerEventInit.setPointerType(
255 pointerTypeNameForWebPointPointerType(pointerType)); 254 pointerTypeNameForWebPointPointerType(pointerType));
256 pointerEventInit.setIsPrimary(isPrimary(pointerId)); 255 pointerEventInit.setIsPrimary(isPrimary(pointerId));
257 pointerEventInit.setBubbles(true); 256
258 pointerEventInit.setCancelable(false); 257 setEventSpecificFields(pointerEventInit, EventTypeNames::pointercancel);
259 258
260 return PointerEvent::create(EventTypeNames::pointercancel, pointerEventInit); 259 return PointerEvent::create(EventTypeNames::pointercancel, pointerEventInit);
261 } 260 }
262 261
263 PointerEvent* PointerEventFactory::createPointerEventFrom( 262 PointerEvent* PointerEventFactory::createPointerEventFrom(
264 PointerEvent* pointerEvent, 263 PointerEvent* pointerEvent,
265 const AtomicString& type, 264 const AtomicString& type,
266 EventTarget* relatedTarget) { 265 EventTarget* relatedTarget) {
267 PointerEventInit pointerEventInit; 266 PointerEventInit pointerEventInit;
268 267
269 pointerEventInit.setPointerId(pointerEvent->pointerId()); 268 pointerEventInit.setPointerId(pointerEvent->pointerId());
270 pointerEventInit.setPointerType(pointerEvent->pointerType()); 269 pointerEventInit.setPointerType(pointerEvent->pointerType());
271 pointerEventInit.setIsPrimary(pointerEvent->isPrimary()); 270 pointerEventInit.setIsPrimary(pointerEvent->isPrimary());
272 pointerEventInit.setWidth(pointerEvent->width()); 271 pointerEventInit.setWidth(pointerEvent->width());
273 pointerEventInit.setHeight(pointerEvent->height()); 272 pointerEventInit.setHeight(pointerEvent->height());
274 pointerEventInit.setScreenX(pointerEvent->screenX()); 273 pointerEventInit.setScreenX(pointerEvent->screenX());
275 pointerEventInit.setScreenY(pointerEvent->screenY()); 274 pointerEventInit.setScreenY(pointerEvent->screenY());
276 pointerEventInit.setClientX(pointerEvent->clientX()); 275 pointerEventInit.setClientX(pointerEvent->clientX());
277 pointerEventInit.setClientY(pointerEvent->clientY()); 276 pointerEventInit.setClientY(pointerEvent->clientY());
278 pointerEventInit.setButton(pointerEvent->button()); 277 pointerEventInit.setButton(pointerEvent->button());
279 pointerEventInit.setButtons(pointerEvent->buttons()); 278 pointerEventInit.setButtons(pointerEvent->buttons());
280 pointerEventInit.setPressure(pointerEvent->pressure()); 279 pointerEventInit.setPressure(pointerEvent->pressure());
281 pointerEventInit.setTiltX(pointerEvent->tiltX()); 280 pointerEventInit.setTiltX(pointerEvent->tiltX());
282 pointerEventInit.setTiltY(pointerEvent->tiltY()); 281 pointerEventInit.setTiltY(pointerEvent->tiltY());
283 pointerEventInit.setView(pointerEvent->view()); 282 pointerEventInit.setView(pointerEvent->view());
284 283
285 setBubblesAndCancelable(pointerEventInit, type); 284 setEventSpecificFields(pointerEventInit, type);
286 285
287 if (relatedTarget) 286 if (relatedTarget)
288 pointerEventInit.setRelatedTarget(relatedTarget); 287 pointerEventInit.setRelatedTarget(relatedTarget);
289 288
290 return PointerEvent::create(type, pointerEventInit); 289 return PointerEvent::create(type, pointerEventInit);
291 } 290 }
292 291
293 PointerEvent* PointerEventFactory::createPointerCaptureEvent( 292 PointerEvent* PointerEventFactory::createPointerCaptureEvent(
294 PointerEvent* pointerEvent, 293 PointerEvent* pointerEvent,
295 const AtomicString& type) { 294 const AtomicString& type) {
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
424 const WebPointerProperties& properties) const { 423 const WebPointerProperties& properties) const {
425 if (properties.pointerType == WebPointerProperties::PointerType::Mouse) 424 if (properties.pointerType == WebPointerProperties::PointerType::Mouse)
426 return PointerEventFactory::s_mouseId; 425 return PointerEventFactory::s_mouseId;
427 IncomingId id(properties.pointerType, properties.id); 426 IncomingId id(properties.pointerType, properties.id);
428 if (m_pointerIncomingIdMapping.contains(id)) 427 if (m_pointerIncomingIdMapping.contains(id))
429 return m_pointerIncomingIdMapping.get(id); 428 return m_pointerIncomingIdMapping.get(id);
430 return PointerEventFactory::s_invalidId; 429 return PointerEventFactory::s_invalidId;
431 } 430 }
432 431
433 } // namespace blink 432 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/events/PointerEventFactory.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698