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

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

Issue 2193473002: Revert "Send got/lostpointercapture immediately if possible" (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: 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 {
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
201 pointerEventInit.setPointerId(pointerId); 201 pointerEventInit.setPointerId(pointerId);
202 pointerEventInit.setPointerType(pointerTypeNameForWebPointPointerType(pointe rType)); 202 pointerEventInit.setPointerType(pointerTypeNameForWebPointPointerType(pointe rType));
203 pointerEventInit.setIsPrimary(isPrimary(pointerId)); 203 pointerEventInit.setIsPrimary(isPrimary(pointerId));
204 pointerEventInit.setBubbles(true); 204 pointerEventInit.setBubbles(true);
205 pointerEventInit.setCancelable(false); 205 pointerEventInit.setCancelable(false);
206 206
207 return PointerEvent::create(EventTypeNames::pointercancel, pointerEventInit) ; 207 return PointerEvent::create(EventTypeNames::pointercancel, pointerEventInit) ;
208 } 208 }
209 209
210 PointerEvent* PointerEventFactory::createPointerCaptureEvent( 210 PointerEvent* PointerEventFactory::createPointerCaptureEvent(
211 const int pointerId, 211 PointerEvent* pointerEvent,
212 const AtomicString& type) 212 const AtomicString& type)
213 { 213 {
214 ASSERT(type == EventTypeNames::gotpointercapture 214 ASSERT(type == EventTypeNames::gotpointercapture
215 || type == EventTypeNames::lostpointercapture); 215 || type == EventTypeNames::lostpointercapture);
216 216
217 // See https://github.com/w3c/pointerevents/issues/113 as why we don't set
218 // any other attributes for got/lostpointercapture.
219 PointerEventInit pointerEventInit; 217 PointerEventInit pointerEventInit;
220 pointerEventInit.setPointerId(pointerId); 218 pointerEventInit.setPointerId(pointerEvent->pointerId());
219 pointerEventInit.setPointerType(pointerEvent->pointerType());
220 pointerEventInit.setIsPrimary(pointerEvent->isPrimary());
221 pointerEventInit.setBubbles(true); 221 pointerEventInit.setBubbles(true);
222 pointerEventInit.setCancelable(false); 222 pointerEventInit.setCancelable(false);
223 223
224 return PointerEvent::create(type, pointerEventInit); 224 return PointerEvent::create(type, pointerEventInit);
225 } 225 }
226 226
227 PointerEvent* PointerEventFactory::createPointerBoundaryEvent( 227 PointerEvent* PointerEventFactory::createPointerBoundaryEvent(
228 PointerEvent* pointerEvent, 228 PointerEvent* pointerEvent,
229 const AtomicString& type, 229 const AtomicString& type,
230 EventTarget* relatedTarget) 230 EventTarget* relatedTarget)
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
287 m_pointerIdMapping.add(s_mouseId, PointerAttributes( 287 m_pointerIdMapping.add(s_mouseId, PointerAttributes(
288 IncomingId(WebPointerProperties::PointerType::Mouse, 0), 0)); 288 IncomingId(WebPointerProperties::PointerType::Mouse, 0), 0));
289 289
290 m_currentId = PointerEventFactory::s_mouseId+1; 290 m_currentId = PointerEventFactory::s_mouseId+1;
291 } 291 }
292 292
293 int PointerEventFactory::addIdAndActiveButtons(const IncomingId p, 293 int PointerEventFactory::addIdAndActiveButtons(const IncomingId p,
294 bool isActiveButtons) 294 bool isActiveButtons)
295 { 295 {
296 // Do not add extra mouse pointer as it was added in initialization 296 // Do not add extra mouse pointer as it was added in initialization
297 if (p.pointerType() == WebPointerProperties::PointerType::Mouse) { 297 if (p.pointerType() == toInt(WebPointerProperties::PointerType::Mouse)) {
298 m_pointerIdMapping.set(s_mouseId, PointerAttributes(p, isActiveButtons)) ; 298 m_pointerIdMapping.set(s_mouseId, PointerAttributes(p, isActiveButtons)) ;
299 return s_mouseId; 299 return s_mouseId;
300 } 300 }
301 301
302 int type = p.pointerTypeInt(); 302 int type = p.pointerType();
303 if (m_pointerIncomingIdMapping.contains(p)) { 303 if (m_pointerIncomingIdMapping.contains(p)) {
304 int mappedId = m_pointerIncomingIdMapping.get(p); 304 int mappedId = m_pointerIncomingIdMapping.get(p);
305 m_pointerIdMapping.set(mappedId, PointerAttributes(p, isActiveButtons)); 305 m_pointerIdMapping.set(mappedId, PointerAttributes(p, isActiveButtons));
306 return mappedId; 306 return mappedId;
307 } 307 }
308 // We do not handle the overflow of m_currentId as it should be very rare 308 // We do not handle the overflow of m_currentId as it should be very rare
309 int mappedId = m_currentId++; 309 int mappedId = m_currentId++;
310 if (!m_idCount[type]) 310 if (!m_idCount[type])
311 m_primaryId[type] = mappedId; 311 m_primaryId[type] = mappedId;
312 m_idCount[type]++; 312 m_idCount[type]++;
313 m_pointerIncomingIdMapping.add(p, mappedId); 313 m_pointerIncomingIdMapping.add(p, mappedId);
314 m_pointerIdMapping.add(mappedId, PointerAttributes(p, isActiveButtons)); 314 m_pointerIdMapping.add(mappedId, PointerAttributes(p, isActiveButtons));
315 return mappedId; 315 return mappedId;
316 } 316 }
317 317
318 bool PointerEventFactory::remove(const int mappedId) 318 bool PointerEventFactory::remove(const int mappedId)
319 { 319 {
320 // Do not remove mouse pointer id as it should always be there 320 // Do not remove mouse pointer id as it should always be there
321 if (mappedId == s_mouseId || !m_pointerIdMapping.contains(mappedId)) 321 if (mappedId == s_mouseId || !m_pointerIdMapping.contains(mappedId))
322 return false; 322 return false;
323 323
324 IncomingId p = m_pointerIdMapping.get(mappedId).incomingId; 324 IncomingId p = m_pointerIdMapping.get(mappedId).incomingId;
325 int type = p.pointerTypeInt(); 325 int type = p.pointerType();
326 m_pointerIdMapping.remove(mappedId); 326 m_pointerIdMapping.remove(mappedId);
327 m_pointerIncomingIdMapping.remove(p); 327 m_pointerIncomingIdMapping.remove(p);
328 if (m_primaryId[type] == mappedId) 328 if (m_primaryId[type] == mappedId)
329 m_primaryId[type] = PointerEventFactory::s_invalidId; 329 m_primaryId[type] = PointerEventFactory::s_invalidId;
330 m_idCount[type]--; 330 m_idCount[type]--;
331 return true; 331 return true;
332 } 332 }
333 333
334 Vector<int> PointerEventFactory::getPointerIdsOfType( 334 Vector<int> PointerEventFactory::getPointerIdsOfType(
335 WebPointerProperties::PointerType pointerType) const 335 WebPointerProperties::PointerType pointerType) const
336 { 336 {
337 Vector<int> mappedIds; 337 Vector<int> mappedIds;
338 338
339 for (auto iter = m_pointerIdMapping.begin(); iter != m_pointerIdMapping.end( ); ++iter) { 339 for (auto iter = m_pointerIdMapping.begin(); iter != m_pointerIdMapping.end( ); ++iter) {
340 int mappedId = iter->key; 340 int mappedId = iter->key;
341 if (iter->value.incomingId.pointerType() == pointerType) 341 if (iter->value.incomingId.pointerType() == static_cast<int>(pointerType ))
342 mappedIds.append(mappedId); 342 mappedIds.append(mappedId);
343 } 343 }
344 344
345 // Sorting for a predictable ordering. 345 // Sorting for a predictable ordering.
346 std::sort(mappedIds.begin(), mappedIds.end()); 346 std::sort(mappedIds.begin(), mappedIds.end());
347 return mappedIds; 347 return mappedIds;
348 } 348 }
349 349
350 bool PointerEventFactory::isPrimary(int mappedId) const 350 bool PointerEventFactory::isPrimary(int mappedId) const
351 { 351 {
352 if (!m_pointerIdMapping.contains(mappedId)) 352 if (!m_pointerIdMapping.contains(mappedId))
353 return false; 353 return false;
354 354
355 IncomingId p = m_pointerIdMapping.get(mappedId).incomingId; 355 IncomingId p = m_pointerIdMapping.get(mappedId).incomingId;
356 return m_primaryId[p.pointerTypeInt()] == mappedId; 356 return m_primaryId[p.pointerType()] == mappedId;
357 } 357 }
358 358
359 bool PointerEventFactory::isActive(const int pointerId) const 359 bool PointerEventFactory::isActive(const int pointerId) const
360 { 360 {
361 return m_pointerIdMapping.contains(pointerId); 361 return m_pointerIdMapping.contains(pointerId);
362 } 362 }
363 363
364 bool PointerEventFactory::isActiveButtonsState(const int pointerId) const 364 bool PointerEventFactory::isActiveButtonsState(const int pointerId) const
365 { 365 {
366 return m_pointerIdMapping.contains(pointerId) 366 return m_pointerIdMapping.contains(pointerId)
367 && m_pointerIdMapping.get(pointerId).isActiveButtons; 367 && m_pointerIdMapping.get(pointerId).isActiveButtons;
368 } 368 }
369 369
370 int PointerEventFactory::getPointerEventId( 370 int PointerEventFactory::getPointerEventId(
371 const WebPointerProperties& properties) const 371 const WebPointerProperties& properties) const
372 { 372 {
373 if (properties.pointerType 373 if (properties.pointerType
374 == WebPointerProperties::PointerType::Mouse) 374 == WebPointerProperties::PointerType::Mouse)
375 return PointerEventFactory::s_mouseId; 375 return PointerEventFactory::s_mouseId;
376 IncomingId id(properties.pointerType, properties.id); 376 IncomingId id(properties.pointerType, properties.id);
377 if (m_pointerIncomingIdMapping.contains(id)) 377 if (m_pointerIncomingIdMapping.contains(id))
378 return m_pointerIncomingIdMapping.get(id); 378 return m_pointerIncomingIdMapping.get(id);
379 return PointerEventFactory::s_invalidId; 379 return PointerEventFactory::s_invalidId;
380 } 380 }
381 381
382 } // namespace blink 382 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/events/PointerEventFactory.h ('k') | third_party/WebKit/Source/core/input/EventHandler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698