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

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

Issue 1670073004: Send node transition events for touch events (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Applying the comments 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 #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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698