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

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

Issue 1892653003: Extract touch handling logic from EventHandler (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased Created 4 years, 7 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 "platform/geometry/FloatSize.h"
8
7 namespace blink { 9 namespace blink {
8 10
9 namespace { 11 namespace {
10 12
11 inline int toInt(WebPointerProperties::PointerType t) { return static_cast<int>( t); } 13 inline int toInt(WebPointerProperties::PointerType t) { return static_cast<int>( t); }
12 14
13 const char* pointerTypeNameForWebPointPointerType(WebPointerProperties::PointerT ype type) 15 const char* pointerTypeNameForWebPointPointerType(WebPointerProperties::PointerT ype type)
14 { 16 {
15 switch (type) { 17 switch (type) {
16 case WebPointerProperties::PointerType::Unknown: 18 case WebPointerProperties::PointerType::Unknown:
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
123 125
124 pointerEventInit.setView(view); 126 pointerEventInit.setView(view);
125 if (relatedTarget) 127 if (relatedTarget)
126 pointerEventInit.setRelatedTarget(relatedTarget); 128 pointerEventInit.setRelatedTarget(relatedTarget);
127 129
128 return PointerEvent::create(pointerEventName, pointerEventInit); 130 return PointerEvent::create(pointerEventName, pointerEventInit);
129 } 131 }
130 132
131 PointerEvent* PointerEventFactory::create(const AtomicString& type, 133 PointerEvent* PointerEventFactory::create(const AtomicString& type,
132 const PlatformTouchPoint& touchPoint, PlatformEvent::Modifiers modifiers, 134 const PlatformTouchPoint& touchPoint, PlatformEvent::Modifiers modifiers,
133 const double width, const double height, 135 const FloatSize& pointRadius,
134 const double clientX, const double clientY) 136 const FloatPoint& pagePoint)
135 { 137 {
136 const PlatformTouchPoint::TouchState pointState = touchPoint.state(); 138 const PlatformTouchPoint::TouchState pointState = touchPoint.state();
137 139
138 bool pointerReleasedOrCancelled = 140 bool pointerReleasedOrCancelled =
139 pointState == PlatformTouchPoint::TouchReleased 141 pointState == PlatformTouchPoint::TouchReleased
140 || pointState == PlatformTouchPoint::TouchCancelled; 142 || pointState == PlatformTouchPoint::TouchCancelled;
141 bool pointerPressedOrReleased = 143 bool pointerPressedOrReleased =
142 pointState == PlatformTouchPoint::TouchPressed 144 pointState == PlatformTouchPoint::TouchPressed
143 || pointState == PlatformTouchPoint::TouchReleased; 145 || pointState == PlatformTouchPoint::TouchReleased;
144 146
145 bool isEnterOrLeave = false; 147 bool isEnterOrLeave = false;
146 148
147 PointerEventInit pointerEventInit; 149 PointerEventInit pointerEventInit;
148 150
149 setIdTypeButtons(pointerEventInit, touchPoint.pointerProperties(), 151 setIdTypeButtons(pointerEventInit, touchPoint.pointerProperties(),
150 pointerReleasedOrCancelled ? 0 : 1); 152 pointerReleasedOrCancelled ? 0 : 1);
151 153
152 pointerEventInit.setWidth(width); 154 pointerEventInit.setWidth(pointRadius.width());
153 pointerEventInit.setHeight(height); 155 pointerEventInit.setHeight(pointRadius.height());
154 pointerEventInit.setTiltX(touchPoint.pointerProperties().tiltX); 156 pointerEventInit.setTiltX(touchPoint.pointerProperties().tiltX);
155 pointerEventInit.setTiltY(touchPoint.pointerProperties().tiltY); 157 pointerEventInit.setTiltY(touchPoint.pointerProperties().tiltY);
156 pointerEventInit.setScreenX(touchPoint.screenPos().x()); 158 pointerEventInit.setScreenX(touchPoint.screenPos().x());
157 pointerEventInit.setScreenY(touchPoint.screenPos().y()); 159 pointerEventInit.setScreenY(touchPoint.screenPos().y());
158 pointerEventInit.setClientX(clientX); 160 pointerEventInit.setClientX(pagePoint.x());
159 pointerEventInit.setClientY(clientY); 161 pointerEventInit.setClientY(pagePoint.y());
160 pointerEventInit.setButton(pointerPressedOrReleased ? LeftButton: NoButton); 162 pointerEventInit.setButton(pointerPressedOrReleased ? LeftButton: NoButton);
161 pointerEventInit.setPressure(getPointerEventPressure( 163 pointerEventInit.setPressure(getPointerEventPressure(
162 touchPoint.force(), pointerEventInit.buttons())); 164 touchPoint.force(), pointerEventInit.buttons()));
163 165
164 UIEventWithKeyState::setFromPlatformModifiers(pointerEventInit, modifiers); 166 UIEventWithKeyState::setFromPlatformModifiers(pointerEventInit, modifiers);
165 167
166 pointerEventInit.setBubbles(!isEnterOrLeave); 168 pointerEventInit.setBubbles(!isEnterOrLeave);
167 pointerEventInit.setCancelable(!isEnterOrLeave && pointState != PlatformTouc hPoint::TouchCancelled); 169 pointerEventInit.setCancelable(!isEnterOrLeave && pointState != PlatformTouc hPoint::TouchCancelled);
168 170
169 return PointerEvent::create(type, pointerEventInit); 171 return PointerEvent::create(type, pointerEventInit);
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
302 IncomingId p = m_pointerIdMapping.get(mappedId).incomingId; 304 IncomingId p = m_pointerIdMapping.get(mappedId).incomingId;
303 int type = p.pointerType(); 305 int type = p.pointerType();
304 m_pointerIdMapping.remove(mappedId); 306 m_pointerIdMapping.remove(mappedId);
305 m_pointerIncomingIdMapping.remove(p); 307 m_pointerIncomingIdMapping.remove(p);
306 if (m_primaryId[type] == mappedId) 308 if (m_primaryId[type] == mappedId)
307 m_primaryId[type] = PointerEventFactory::s_invalidId; 309 m_primaryId[type] = PointerEventFactory::s_invalidId;
308 m_idCount[type]--; 310 m_idCount[type]--;
309 return true; 311 return true;
310 } 312 }
311 313
312 Vector<int> PointerEventFactory::getPointerIdsOfType(WebPointerProperties::Point erType pointerType) 314 Vector<int> PointerEventFactory::getPointerIdsOfType(
315 WebPointerProperties::PointerType pointerType) const
313 { 316 {
314 Vector<int> mappedIds; 317 Vector<int> mappedIds;
315 318
316 for (auto iter = m_pointerIdMapping.begin(); iter != m_pointerIdMapping.end( ); ++iter) { 319 for (auto iter = m_pointerIdMapping.begin(); iter != m_pointerIdMapping.end( ); ++iter) {
317 int mappedId = iter->key; 320 int mappedId = iter->key;
318 if (iter->value.incomingId.pointerType() == static_cast<int>(pointerType )) 321 if (iter->value.incomingId.pointerType() == static_cast<int>(pointerType ))
319 mappedIds.append(mappedId); 322 mappedIds.append(mappedId);
320 } 323 }
321 324
322 // Sorting for a predictable ordering. 325 // Sorting for a predictable ordering.
323 std::sort(mappedIds.begin(), mappedIds.end()); 326 std::sort(mappedIds.begin(), mappedIds.end());
324 return mappedIds; 327 return mappedIds;
325 } 328 }
326 329
327 bool PointerEventFactory::isPrimary(int mappedId) const 330 bool PointerEventFactory::isPrimary(int mappedId) const
328 { 331 {
329 if (!m_pointerIdMapping.contains(mappedId)) 332 if (!m_pointerIdMapping.contains(mappedId))
330 return false; 333 return false;
331 334
332 IncomingId p = m_pointerIdMapping.get(mappedId).incomingId; 335 IncomingId p = m_pointerIdMapping.get(mappedId).incomingId;
333 return m_primaryId[p.pointerType()] == mappedId; 336 return m_primaryId[p.pointerType()] == mappedId;
334 } 337 }
335 338
336 WebPointerProperties::PointerType PointerEventFactory::getPointerType( 339 WebPointerProperties::PointerType PointerEventFactory::getPointerType(
337 const int pointerId) 340 const int pointerId) const
338 { 341 {
339 if (m_pointerIdMapping.contains(pointerId)) { 342 if (m_pointerIdMapping.contains(pointerId)) {
340 return static_cast<WebPointerProperties::PointerType>( 343 return static_cast<WebPointerProperties::PointerType>(
341 m_pointerIdMapping.get(pointerId).incomingId.pointerType()); 344 m_pointerIdMapping.get(pointerId).incomingId.pointerType());
342 } 345 }
343 return WebPointerProperties::PointerType::Unknown; 346 return WebPointerProperties::PointerType::Unknown;
344 } 347 }
345 348
346 bool PointerEventFactory::isActive(const int pointerId) 349 bool PointerEventFactory::isActive(const int pointerId) const
347 { 350 {
348 return m_pointerIdMapping.contains(pointerId); 351 return m_pointerIdMapping.contains(pointerId);
349 } 352 }
350 353
351 bool PointerEventFactory::isActiveButtonsState(const int pointerId) 354 bool PointerEventFactory::isActiveButtonsState(const int pointerId) const
352 { 355 {
353 return m_pointerIdMapping.contains(pointerId) 356 return m_pointerIdMapping.contains(pointerId)
354 && m_pointerIdMapping.get(pointerId).isActiveButtons; 357 && m_pointerIdMapping.get(pointerId).isActiveButtons;
355 } 358 }
356 359
360 int PointerEventFactory::getPointerEventId(
361 const WebPointerProperties& properties) const
tdresser 2016/04/29 15:55:04 Is |properties| guaranteed to be unique?
Navid Zolghadr 2016/04/29 16:31:19 There are two properties in the WebPointerProperti
mustaq 2016/04/29 17:03:05 Navid is right: it is reasonable to assume that lo
362 {
363 if (properties.pointerType
364 == WebPointerProperties::PointerType::Mouse)
365 return PointerEventFactory::s_mouseId;
366 IncomingId id(properties.pointerType, properties.id);
367 if (m_pointerIncomingIdMapping.contains(id))
368 return m_pointerIncomingIdMapping.get(id);
369 return PointerEventFactory::s_invalidId;
370 }
371
357 } // namespace blink 372 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698