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

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

Issue 1670073004: Send node transition events for touch events (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add the tests Created 4 years, 10 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 #ifndef PointerEventManager_h 5 #ifndef PointerEventFactory_h
6 #define PointerEventManager_h 6 #define PointerEventFactory_h
7 7
8 #include "core/CoreExport.h" 8 #include "core/CoreExport.h"
9 #include "core/events/PointerEvent.h" 9 #include "core/events/PointerEvent.h"
10 #include "public/platform/WebPointerProperties.h" 10 #include "public/platform/WebPointerProperties.h"
11 #include "wtf/Allocator.h" 11 #include "wtf/Allocator.h"
12 #include "wtf/HashMap.h" 12 #include "wtf/HashMap.h"
13 13
14 namespace blink { 14 namespace blink {
15 15
16 /** 16 /**
17 Helper class for tracking the pointer ids for each type of PointerEvents. 17 Helper class for tracking the pointer ids for each type of PointerEvents.
18 Using id re-mapping at this layer, this class makes sure that regardless of th e 18 Using id re-mapping at this layer, this class makes sure that regardless of th e
19 domain of the id (i.e. in touch or pen) the corresponding pointer event will h ave 19 domain of the id (i.e. in touch or pen) the corresponding pointer event will h ave
20 a unique id amongst all pointer events as per pointer events' specification. 20 a unique id amongst all pointer events as per pointer events' specification.
21 This class intended to behave the same as existing browsers as much as possibl e 21 This class intended to behave the same as existing browsers as much as possibl e
22 for compatibility reasons. Particularly it behaves very similar to MS Edge to have 22 for compatibility reasons. Particularly it behaves very similar to MS Edge to have
23 pointer event ids generated by mouse always equal 1 and those that are generat ed 23 pointer event ids generated by mouse always equal 1 and those that are generat ed
24 by touch and pen will have increasing ids from 2. 24 by touch and pen will have increasing ids from 2.
25 */ 25 */
26 class CORE_EXPORT PointerEventManager { 26 class CORE_EXPORT PointerEventFactory {
27 DISALLOW_NEW(); 27 DISALLOW_NEW();
28 public: 28 public:
29 29
30 PointerEventFactory();
31 ~PointerEventFactory();
32
30 PassRefPtrWillBeRawPtr<PointerEvent> create(const AtomicString& type, 33 PassRefPtrWillBeRawPtr<PointerEvent> create(const AtomicString& type,
31 const PlatformMouseEvent&, PassRefPtrWillBeRawPtr<Node> relatedTarget, 34 const PlatformMouseEvent&, PassRefPtrWillBeRawPtr<Node> relatedTarget,
32 PassRefPtrWillBeRawPtr<AbstractView>); 35 PassRefPtrWillBeRawPtr<AbstractView>);
33 36
34 PassRefPtrWillBeRawPtr<PointerEvent> create(const AtomicString& type, 37 PassRefPtrWillBeRawPtr<PointerEvent> create(const AtomicString& type,
35 const PlatformTouchPoint&, PlatformEvent::Modifiers, 38 const PlatformTouchPoint&, PlatformEvent::Modifiers,
36 const double width, const double height, 39 const double width, const double height,
37 const double clientX, const double clientY); 40 const double clientX, const double clientY);
38 41
39 PassRefPtrWillBeRawPtr<PointerEvent> createPointerCancel(const PlatformTouch Point&); 42 PassRefPtrWillBeRawPtr<PointerEvent> createPointerCancel(
43 const PlatformTouchPoint&);
40 44
41 PointerEventManager(); 45 PassRefPtrWillBeRawPtr<PointerEvent> create(
42 ~PointerEventManager(); 46 PassRefPtrWillBeRawPtr<PointerEvent>,
47 const AtomicString& type,
48 PassRefPtrWillBeRawPtr<EventTarget>);
43 49
44 // Clear all the existing ids. 50 // Clear all the existing ids.
45 void clear(); 51 void clear();
52
46 /* 53 /*
47 * When a pointerEvent with a particular id is removed that id is considered 54 * When a pointerEvent with a particular id is removed that id is considered
48 * free even though there might have been other PointerEvents that were 55 * free even though there might have been other PointerEvents that were
49 * generated with the same id before. 56 * generated with the same id before.
50 */ 57 */
51 void remove(const PassRefPtrWillBeRawPtr<PointerEvent>); 58 void remove(const PassRefPtrWillBeRawPtr<PointerEvent>);
52 59
53 // Returns the node capturing this pointer id, and null if no node is captur ing it. 60 private:
54 EventTarget* getCapturingNode(PassRefPtrWillBeRawPtr<PointerEvent>); 61 typedef std::pair<int, int> IncomingId;
62 typedef WTF::UnsignedWithZeroKeyHashTraits<int> UnsignedHash;
55 63
56 private: 64 int add(const IncomingId);
57 typedef long MappedId; 65 bool isPrimary(const int) const;
58 typedef std::pair<int, int> IncomingId;
59
60 MappedId add(const IncomingId);
61 bool isPrimary(const MappedId) const;
62 void setIdAndType(PointerEventInit &, const WebPointerProperties &); 66 void setIdAndType(PointerEventInit &, const WebPointerProperties &);
63 67
64 static const MappedId s_invalidId; 68 static const int s_invalidId;
65 static const MappedId s_mouseId; 69 static const int s_mouseId;
66 70
67 PointerEventManager::MappedId m_currentId; 71 int m_currentId;
68 HashMap<IncomingId, MappedId, WTF::PairHash<int, int>, WTF::PairHashTraits<W TF::UnsignedWithZeroKeyHashTraits<int>, WTF::UnsignedWithZeroKeyHashTraits<int>> > m_idMapping; 72 HashMap<IncomingId, int, WTF::PairHash<int, int>, WTF::PairHashTraits<Pointe rEventFactory::UnsignedHash, PointerEventFactory::UnsignedHash>> m_idMapping;
mustaq 2016/02/11 16:15:16 Do you think "PointerEventFactory::" is redundant
Navid Zolghadr 2016/02/11 16:34:51 It definitely works without. I intentionally added
mustaq 2016/02/11 16:51:12 Yes please (I might have thought otherwise for non
Navid Zolghadr 2016/02/11 17:47:49 Done.
69 HashMap<MappedId, IncomingId, WTF::IntHash<MappedId>, WTF::UnsignedWithZeroK eyHashTraits<MappedId>> m_idReverseMapping; 73 HashMap<int, IncomingId, WTF::IntHash<int>, PointerEventFactory::UnsignedHas h> m_idReverseMapping;
70 MappedId m_primaryId[static_cast<int>(WebPointerProperties::PointerType::Las tEntry) + 1]; 74 int m_primaryId[static_cast<int>(WebPointerProperties::PointerType::LastEntr y) + 1];
71 MappedId m_idCount[static_cast<int>(WebPointerProperties::PointerType::LastE ntry) + 1]; 75 int m_idCount[static_cast<int>(WebPointerProperties::PointerType::LastEntry) + 1];
72 }; 76 };
73 77
74 } // namespace blink 78 } // namespace blink
75 79
76 #endif // PointerEventManager_h 80 #endif // PointerEventFactory_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698