OLD | NEW |
---|---|
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 #include "core/events/PointerEventManager.h" | 5 #include "core/events/PointerEventFactory.h" |
Ian Vollick
2016/02/12 15:01:17
Although the net result seems clearer, this patch
mustaq
2016/02/12 15:17:40
Yes, mainly to isolate:
(a) PointerEvent states
Navid Zolghadr
2016/02/12 16:30:47
Done
| |
6 | 6 |
7 namespace blink { | 7 namespace blink { |
8 | 8 |
9 namespace { | 9 namespace { |
10 | 10 |
11 inline int toInt(WebPointerProperties::PointerType t) { return static_cast<int>( t); } | 11 inline int toInt(WebPointerProperties::PointerType t) { return static_cast<int>( t); } |
12 | 12 |
13 const char* pointerTypeNameForWebPointPointerType(WebPointerProperties::PointerT ype type) | 13 const char* pointerTypeNameForWebPointPointerType(WebPointerProperties::PointerT ype type) |
14 { | 14 { |
15 switch (type) { | 15 switch (type) { |
16 case WebPointerProperties::PointerType::Unknown: | 16 case WebPointerProperties::PointerType::Unknown: |
17 return ""; | 17 return ""; |
18 case WebPointerProperties::PointerType::Touch: | 18 case WebPointerProperties::PointerType::Touch: |
19 return "touch"; | 19 return "touch"; |
20 case WebPointerProperties::PointerType::Pen: | 20 case WebPointerProperties::PointerType::Pen: |
21 return "pen"; | 21 return "pen"; |
22 case WebPointerProperties::PointerType::Mouse: | 22 case WebPointerProperties::PointerType::Mouse: |
23 return "mouse"; | 23 return "mouse"; |
24 } | 24 } |
25 ASSERT_NOT_REACHED(); | 25 ASSERT_NOT_REACHED(); |
26 return ""; | 26 return ""; |
27 } | 27 } |
28 | 28 |
29 } // namespace | 29 } // namespace |
30 | 30 |
31 const PointerEventManager::MappedId PointerEventManager::s_invalidId = 0; | 31 const int PointerEventFactory::s_invalidId = 0; |
32 | 32 |
33 // Mouse id is 1 to behave the same as MS Edge for compatibility reasons. | 33 // Mouse id is 1 to behave the same as MS Edge for compatibility reasons. |
34 const PointerEventManager::MappedId PointerEventManager::s_mouseId = 1; | 34 const int PointerEventFactory::s_mouseId = 1; |
35 | |
36 EventTarget* PointerEventManager::getCapturingNode(PassRefPtrWillBeRawPtr<Pointe rEvent> pointerEvent) | |
37 { | |
38 // TODO(nzolghadr): Add APIs to set the capturing nodes and return the corre ct node here | |
39 return nullptr; | |
40 } | |
41 | 35 |
42 float getPointerEventPressure(float force, int buttons) | 36 float getPointerEventPressure(float force, int buttons) |
43 { | 37 { |
44 if (std::isnan(force)) | 38 if (std::isnan(force)) |
45 return buttons ? 0.5 : 0; | 39 return buttons ? 0.5 : 0; |
46 return force; | 40 return force; |
47 } | 41 } |
48 | 42 |
49 void PointerEventManager::setIdAndType(PointerEventInit &pointerEventInit, | 43 void PointerEventFactory::setIdAndType(PointerEventInit &pointerEventInit, |
50 const WebPointerProperties &pointerProperties) | 44 const WebPointerProperties &pointerProperties) |
51 { | 45 { |
52 const WebPointerProperties::PointerType pointerType = pointerProperties.poin terType; | 46 const WebPointerProperties::PointerType pointerType = pointerProperties.poin terType; |
53 MappedId pointerId = add(PointerEventManager::IncomingId(toInt(pointerType), pointerProperties.id)); | 47 int pointerId = add(PointerEventFactory::IncomingId(toInt(pointerType), poin terProperties.id)); |
54 pointerEventInit.setPointerId(pointerId); | 48 pointerEventInit.setPointerId(pointerId); |
55 pointerEventInit.setPointerType(pointerTypeNameForWebPointPointerType(pointe rType)); | 49 pointerEventInit.setPointerType(pointerTypeNameForWebPointPointerType(pointe rType)); |
56 pointerEventInit.setIsPrimary(isPrimary(pointerId)); | 50 pointerEventInit.setIsPrimary(isPrimary(pointerId)); |
57 } | 51 } |
58 | 52 |
59 PassRefPtrWillBeRawPtr<PointerEvent> PointerEventManager::create(const AtomicStr ing& type, | 53 PassRefPtrWillBeRawPtr<PointerEvent> PointerEventFactory::create(const AtomicStr ing& type, |
60 const PlatformMouseEvent& mouseEvent, | 54 const PlatformMouseEvent& mouseEvent, |
61 PassRefPtrWillBeRawPtr<Node> relatedTarget, | 55 PassRefPtrWillBeRawPtr<Node> relatedTarget, |
62 PassRefPtrWillBeRawPtr<AbstractView> view) | 56 PassRefPtrWillBeRawPtr<AbstractView> view) |
63 { | 57 { |
64 PointerEventInit pointerEventInit; | 58 PointerEventInit pointerEventInit; |
65 | 59 |
66 setIdAndType(pointerEventInit, mouseEvent.pointerProperties()); | 60 setIdAndType(pointerEventInit, mouseEvent.pointerProperties()); |
67 | 61 |
68 pointerEventInit.setScreenX(mouseEvent.globalPosition().x()); | 62 pointerEventInit.setScreenX(mouseEvent.globalPosition().x()); |
69 pointerEventInit.setScreenY(mouseEvent.globalPosition().y()); | 63 pointerEventInit.setScreenY(mouseEvent.globalPosition().y()); |
(...skipping 12 matching lines...) Expand all Loading... | |
82 pointerEventInit.setCancelable(type != EventTypeNames::pointerenter | 76 pointerEventInit.setCancelable(type != EventTypeNames::pointerenter |
83 && type != EventTypeNames::pointerleave && type != EventTypeNames::point ercancel); | 77 && type != EventTypeNames::pointerleave && type != EventTypeNames::point ercancel); |
84 | 78 |
85 pointerEventInit.setView(view); | 79 pointerEventInit.setView(view); |
86 if (relatedTarget) | 80 if (relatedTarget) |
87 pointerEventInit.setRelatedTarget(relatedTarget); | 81 pointerEventInit.setRelatedTarget(relatedTarget); |
88 | 82 |
89 return PointerEvent::create(type, pointerEventInit); | 83 return PointerEvent::create(type, pointerEventInit); |
90 } | 84 } |
91 | 85 |
92 PassRefPtrWillBeRawPtr<PointerEvent> PointerEventManager::create(const AtomicStr ing& type, | 86 PassRefPtrWillBeRawPtr<PointerEvent> PointerEventFactory::create(const AtomicStr ing& type, |
93 const PlatformTouchPoint& touchPoint, PlatformEvent::Modifiers modifiers, | 87 const PlatformTouchPoint& touchPoint, PlatformEvent::Modifiers modifiers, |
94 const double width, const double height, | 88 const double width, const double height, |
95 const double clientX, const double clientY) | 89 const double clientX, const double clientY) |
96 { | 90 { |
97 const PlatformTouchPoint::State pointState = touchPoint.state(); | 91 const PlatformTouchPoint::State pointState = touchPoint.state(); |
98 | 92 |
99 bool pointerReleasedOrCancelled = pointState == PlatformTouchPoint::TouchRel eased | 93 bool pointerReleasedOrCancelled = pointState == PlatformTouchPoint::TouchRel eased |
100 || pointState == PlatformTouchPoint::TouchCancelled; | 94 || pointState == PlatformTouchPoint::TouchCancelled; |
101 | 95 |
102 bool isEnterOrLeave = false; | 96 bool isEnterOrLeave = false; |
(...skipping 17 matching lines...) Expand all Loading... | |
120 | 114 |
121 UIEventWithKeyState::setFromPlatformModifiers(pointerEventInit, modifiers); | 115 UIEventWithKeyState::setFromPlatformModifiers(pointerEventInit, modifiers); |
122 | 116 |
123 pointerEventInit.setBubbles(!isEnterOrLeave); | 117 pointerEventInit.setBubbles(!isEnterOrLeave); |
124 pointerEventInit.setCancelable(!isEnterOrLeave && pointState != PlatformTouc hPoint::TouchCancelled); | 118 pointerEventInit.setCancelable(!isEnterOrLeave && pointState != PlatformTouc hPoint::TouchCancelled); |
125 | 119 |
126 return PointerEvent::create(type, pointerEventInit); | 120 return PointerEvent::create(type, pointerEventInit); |
127 } | 121 } |
128 | 122 |
129 | 123 |
130 PassRefPtrWillBeRawPtr<PointerEvent> PointerEventManager::createPointerCancel(co nst PlatformTouchPoint& touchPoint) | 124 PassRefPtrWillBeRawPtr<PointerEvent> PointerEventFactory::createPointerCancel(co nst PlatformTouchPoint& touchPoint) |
131 { | 125 { |
132 PointerEventInit pointerEventInit; | 126 PointerEventInit pointerEventInit; |
133 | 127 |
134 setIdAndType(pointerEventInit, touchPoint.pointerProperties()); | 128 setIdAndType(pointerEventInit, touchPoint.pointerProperties()); |
135 | 129 |
136 pointerEventInit.setBubbles(true); | 130 pointerEventInit.setBubbles(true); |
137 pointerEventInit.setCancelable(false); | 131 pointerEventInit.setCancelable(false); |
138 | 132 |
139 return PointerEvent::create(EventTypeNames::pointercancel, pointerEventInit) ; | 133 return PointerEvent::create(EventTypeNames::pointercancel, pointerEventInit) ; |
140 } | 134 } |
141 | 135 |
142 PointerEventManager::PointerEventManager() | 136 PassRefPtrWillBeRawPtr<PointerEvent> PointerEventFactory::create( |
137 PassRefPtrWillBeRawPtr<PointerEvent> pointerevent, | |
Ian Vollick
2016/02/12 15:01:17
nit: camel case.
Navid Zolghadr
2016/02/12 16:30:47
Done
| |
138 const AtomicString& type, | |
139 PassRefPtrWillBeRawPtr<EventTarget> relatedTarget) | |
140 { | |
141 PointerEventInit pointerEventInit; | |
142 | |
143 pointerEventInit.setPointerId(pointerevent->pointerId()); | |
144 pointerEventInit.setPointerType(pointerevent->pointerType()); | |
145 pointerEventInit.setIsPrimary(pointerevent->isPrimary()); | |
146 pointerEventInit.setWidth(pointerevent->width()); | |
147 pointerEventInit.setHeight(pointerevent->height()); | |
148 pointerEventInit.setTiltX(pointerevent->tiltX()); | |
149 pointerEventInit.setTiltY(pointerevent->tiltY()); | |
150 pointerEventInit.setScreenX(pointerevent->screenX()); | |
151 pointerEventInit.setScreenY(pointerevent->screenY()); | |
152 pointerEventInit.setClientX(pointerevent->clientX()); | |
153 pointerEventInit.setClientY(pointerevent->clientY()); | |
154 pointerEventInit.setButton(pointerevent->button()); | |
155 pointerEventInit.setButtons(pointerevent->buttons()); | |
156 pointerEventInit.setPressure(pointerevent->pressure()); | |
157 | |
158 pointerEventInit.setBubbles(type != EventTypeNames::pointerenter | |
159 && type != EventTypeNames::pointerleave); | |
160 pointerEventInit.setCancelable(type != EventTypeNames::pointerenter | |
161 && type != EventTypeNames::pointerleave | |
162 && type != EventTypeNames::pointercancel); | |
163 if (relatedTarget) | |
164 pointerEventInit.setRelatedTarget(relatedTarget); | |
165 | |
166 return PointerEvent::create(type, pointerEventInit); | |
167 } | |
168 | |
169 PointerEventFactory::PointerEventFactory() | |
143 { | 170 { |
144 clear(); | 171 clear(); |
145 } | 172 } |
146 | 173 |
147 PointerEventManager::~PointerEventManager() | 174 PointerEventFactory::~PointerEventFactory() |
148 { | 175 { |
149 clear(); | 176 clear(); |
150 } | 177 } |
151 | 178 |
152 void PointerEventManager::clear() | 179 void PointerEventFactory::clear() |
153 { | 180 { |
154 for (int type = 0; type <= toInt(WebPointerProperties::PointerType::LastEntr y); type++) { | 181 for (int type = 0; type <= toInt(WebPointerProperties::PointerType::LastEntr y); type++) { |
155 m_primaryId[type] = PointerEventManager::s_invalidId; | 182 m_primaryId[type] = PointerEventFactory::s_invalidId; |
156 m_idCount[type] = 0; | 183 m_idCount[type] = 0; |
157 } | 184 } |
158 m_idMapping.clear(); | 185 m_idMapping.clear(); |
159 m_idReverseMapping.clear(); | 186 m_idReverseMapping.clear(); |
160 | 187 |
161 // Always add mouse pointer in initialization and never remove it. | 188 // Always add mouse pointer in initialization and never remove it. |
162 // No need to add it to m_idMapping as it is not going to be used with the e xisting APIs | 189 // No need to add it to m_idMapping as it is not going to be used with the e xisting APIs |
163 m_primaryId[toInt(WebPointerProperties::PointerType::Mouse)] = s_mouseId; | 190 m_primaryId[toInt(WebPointerProperties::PointerType::Mouse)] = s_mouseId; |
164 m_idReverseMapping.add(s_mouseId, IncomingId(toInt(WebPointerProperties::Poi nterType::Mouse), 0)); | 191 m_idReverseMapping.add(s_mouseId, IncomingId(toInt(WebPointerProperties::Poi nterType::Mouse), 0)); |
165 | 192 |
166 m_currentId = PointerEventManager::s_mouseId+1; | 193 m_currentId = PointerEventFactory::s_mouseId+1; |
167 } | 194 } |
168 | 195 |
169 PointerEventManager::MappedId PointerEventManager::add(const IncomingId p) | 196 int PointerEventFactory::add(const IncomingId p) |
170 { | 197 { |
171 // Do not add extra mouse pointer as it was added in initialization | 198 // Do not add extra mouse pointer as it was added in initialization |
172 if (p.first == toInt(WebPointerProperties::PointerType::Mouse)) | 199 if (p.first == toInt(WebPointerProperties::PointerType::Mouse)) |
173 return s_mouseId; | 200 return s_mouseId; |
174 | 201 |
175 int type = p.first; | 202 int type = p.first; |
176 if (m_idMapping.contains(p)) | 203 if (m_idMapping.contains(p)) |
177 return m_idMapping.get(p); | 204 return m_idMapping.get(p); |
178 // We do not handle the overflow of m_currentId as it should be very rare | 205 // We do not handle the overflow of m_currentId as it should be very rare |
179 MappedId mappedId = m_currentId++; | 206 int mappedId = m_currentId++; |
180 if (!m_idCount[type]) | 207 if (!m_idCount[type]) |
181 m_primaryId[type] = mappedId; | 208 m_primaryId[type] = mappedId; |
182 m_idCount[type]++; | 209 m_idCount[type]++; |
183 m_idMapping.add(p, mappedId); | 210 m_idMapping.add(p, mappedId); |
184 m_idReverseMapping.add(mappedId, p); | 211 m_idReverseMapping.add(mappedId, p); |
185 return static_cast<PointerEventManager::MappedId>(mappedId); | 212 return static_cast<int>(mappedId); |
186 } | 213 } |
187 | 214 |
188 void PointerEventManager::remove(const PassRefPtrWillBeRawPtr<PointerEvent> poin terEvent) | 215 void PointerEventFactory::remove( |
216 const PassRefPtrWillBeRawPtr<PointerEvent> pointerEvent) | |
189 { | 217 { |
190 MappedId mappedId = pointerEvent->pointerId(); | 218 int mappedId = pointerEvent->pointerId(); |
191 // Do not remove mouse pointer id as it should always be there | 219 // Do not remove mouse pointer id as it should always be there |
192 if (mappedId == s_mouseId || !m_idReverseMapping.contains(mappedId)) | 220 if (mappedId == s_mouseId || !m_idReverseMapping.contains(mappedId)) |
193 return; | 221 return; |
194 | 222 |
195 IncomingId p = m_idReverseMapping.get(mappedId); | 223 IncomingId p = m_idReverseMapping.get(mappedId); |
196 int type = p.first; | 224 int type = p.first; |
197 m_idReverseMapping.remove(mappedId); | 225 m_idReverseMapping.remove(mappedId); |
198 m_idMapping.remove(p); | 226 m_idMapping.remove(p); |
199 if (m_primaryId[type] == mappedId) | 227 if (m_primaryId[type] == mappedId) |
200 m_primaryId[type] = PointerEventManager::s_invalidId; | 228 m_primaryId[type] = PointerEventFactory::s_invalidId; |
201 m_idCount[type]--; | 229 m_idCount[type]--; |
202 } | 230 } |
203 | 231 |
204 bool PointerEventManager::isPrimary(PointerEventManager::MappedId mappedId) cons t | 232 bool PointerEventFactory::isPrimary(int mappedId) const |
205 { | 233 { |
206 if (!m_idReverseMapping.contains(mappedId)) | 234 if (!m_idReverseMapping.contains(mappedId)) |
207 return false; | 235 return false; |
208 | 236 |
209 IncomingId p = m_idReverseMapping.get(mappedId); | 237 IncomingId p = m_idReverseMapping.get(mappedId); |
210 int type = p.first; | 238 int type = p.first; |
211 return m_primaryId[type] == mappedId; | 239 return m_primaryId[type] == mappedId; |
212 } | 240 } |
213 | 241 |
214 | 242 |
215 } // namespace blink | 243 } // namespace blink |
OLD | NEW |