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

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

Issue 2650403006: Remove PlatformMouseEvent and use WebMouseEvent instead (Closed)
Patch Set: Created 3 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 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 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
127 pointerEventInit->setScreenX(touchPoint.screenPosition.x); 127 pointerEventInit->setScreenX(touchPoint.screenPosition.x);
128 pointerEventInit->setScreenY(touchPoint.screenPosition.y); 128 pointerEventInit->setScreenY(touchPoint.screenPosition.y);
129 pointerEventInit->setPressure( 129 pointerEventInit->setPressure(
130 getPointerEventPressure(touchPoint.force, pointerEventInit->buttons())); 130 getPointerEventPressure(touchPoint.force, pointerEventInit->buttons()));
131 pointerEventInit->setTiltX(touchPoint.tiltX); 131 pointerEventInit->setTiltX(touchPoint.tiltX);
132 pointerEventInit->setTiltY(touchPoint.tiltY); 132 pointerEventInit->setTiltY(touchPoint.tiltY);
133 pointerEventInit->setTangentialPressure(touchPoint.tangentialPressure); 133 pointerEventInit->setTangentialPressure(touchPoint.tangentialPressure);
134 pointerEventInit->setTwist(touchPoint.twist); 134 pointerEventInit->setTwist(touchPoint.twist);
135 } 135 }
136 136
137 void updateMousePointerEventInit(const PlatformMouseEvent& mouseEvent, 137 void updateMousePointerEventInit(const WebMouseEvent& mouseEvent,
138 LocalDOMWindow* view, 138 LocalDOMWindow* view,
139 PointerEventInit* pointerEventInit) { 139 PointerEventInit* pointerEventInit) {
140 // This function should not update attributes like pointerId, isPrimary, 140 // This function should not update attributes like pointerId, isPrimary,
141 // and pointerType which is the same among the coalesced events and the 141 // and pointerType which is the same among the coalesced events and the
142 // dispatched event. 142 // dispatched event.
143 143
144 pointerEventInit->setScreenX(mouseEvent.globalPosition().x()); 144 pointerEventInit->setScreenX(mouseEvent.globalX);
145 pointerEventInit->setScreenY(mouseEvent.globalPosition().y()); 145 pointerEventInit->setScreenY(mouseEvent.globalY);
146 146
147 IntPoint locationInFrameZoomed; 147 IntPoint locationInFrameZoomed;
148 if (view && view->frame() && view->frame()->view()) { 148 if (view && view->frame() && view->frame()->view()) {
149 LocalFrame* frame = view->frame(); 149 LocalFrame* frame = view->frame();
150 FrameView* frameView = frame->view(); 150 FrameView* frameView = frame->view();
151 IntPoint locationInContents = 151 IntPoint locationInContents = frameView->rootFrameToContents(
152 frameView->rootFrameToContents(mouseEvent.position()); 152 flooredIntPoint(mouseEvent.positionInRootFrame()));
153 locationInFrameZoomed = frameView->contentsToFrame(locationInContents); 153 locationInFrameZoomed = frameView->contentsToFrame(locationInContents);
154 float scaleFactor = 1 / frame->pageZoomFactor(); 154 float scaleFactor = 1 / frame->pageZoomFactor();
155 locationInFrameZoomed.scale(scaleFactor, scaleFactor); 155 locationInFrameZoomed.scale(scaleFactor, scaleFactor);
156 } 156 }
157 157
158 pointerEventInit->setClientX(locationInFrameZoomed.x()); 158 pointerEventInit->setClientX(locationInFrameZoomed.x());
159 pointerEventInit->setClientY(locationInFrameZoomed.y()); 159 pointerEventInit->setClientY(locationInFrameZoomed.y());
160 160
161 pointerEventInit->setPressure(getPointerEventPressure( 161 pointerEventInit->setPressure(
162 mouseEvent.pointerProperties().force, pointerEventInit->buttons())); 162 getPointerEventPressure(mouseEvent.force, pointerEventInit->buttons()));
163 pointerEventInit->setTiltX(mouseEvent.pointerProperties().tiltX); 163 pointerEventInit->setTiltX(mouseEvent.tiltX);
164 pointerEventInit->setTiltY(mouseEvent.pointerProperties().tiltY); 164 pointerEventInit->setTiltY(mouseEvent.tiltY);
165 pointerEventInit->setTangentialPressure( 165 pointerEventInit->setTangentialPressure(mouseEvent.tangentialPressure);
166 mouseEvent.pointerProperties().tangentialPressure); 166 pointerEventInit->setTwist(mouseEvent.twist);
167 pointerEventInit->setTwist(mouseEvent.pointerProperties().twist);
168 } 167 }
169 168
170 } // namespace 169 } // namespace
171 170
172 const int PointerEventFactory::s_invalidId = 0; 171 const int PointerEventFactory::s_invalidId = 0;
173 172
174 // Mouse id is 1 to behave the same as MS Edge for compatibility reasons. 173 // Mouse id is 1 to behave the same as MS Edge for compatibility reasons.
175 const int PointerEventFactory::s_mouseId = 1; 174 const int PointerEventFactory::s_mouseId = 1;
176 175
177 void PointerEventFactory::setIdTypeButtons( 176 void PointerEventFactory::setIdTypeButtons(
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
209 type != EventTypeNames::pointercancel && 208 type != EventTypeNames::pointercancel &&
210 type != EventTypeNames::gotpointercapture && 209 type != EventTypeNames::gotpointercapture &&
211 type != EventTypeNames::lostpointercapture); 210 type != EventTypeNames::lostpointercapture);
212 211
213 pointerEventInit.setComposed(true); 212 pointerEventInit.setComposed(true);
214 pointerEventInit.setDetail(0); 213 pointerEventInit.setDetail(0);
215 } 214 }
216 215
217 PointerEvent* PointerEventFactory::create( 216 PointerEvent* PointerEventFactory::create(
218 const AtomicString& mouseEventName, 217 const AtomicString& mouseEventName,
219 const PlatformMouseEvent& mouseEvent, 218 const WebMouseEvent& mouseEvent,
220 const Vector<PlatformMouseEvent>& coalescedMouseEvents, 219 const Vector<WebMouseEvent>& coalescedMouseEvents,
221 LocalDOMWindow* view) { 220 LocalDOMWindow* view) {
222 DCHECK(mouseEventName == EventTypeNames::mousemove || 221 DCHECK(mouseEventName == EventTypeNames::mousemove ||
223 mouseEventName == EventTypeNames::mousedown || 222 mouseEventName == EventTypeNames::mousedown ||
224 mouseEventName == EventTypeNames::mouseup); 223 mouseEventName == EventTypeNames::mouseup);
225 224
226 AtomicString pointerEventName = 225 AtomicString pointerEventName =
227 pointerEventNameForMouseEventName(mouseEventName); 226 pointerEventNameForMouseEventName(mouseEventName);
228 227
229 unsigned buttons = 228 unsigned buttons = MouseEvent::platformModifiersToButtons(
230 MouseEvent::platformModifiersToButtons(mouseEvent.getModifiers()); 229 static_cast<PlatformEvent::Modifiers>(mouseEvent.modifiers()));
231 PointerEventInit pointerEventInit; 230 PointerEventInit pointerEventInit;
232 231
233 setIdTypeButtons(pointerEventInit, mouseEvent.pointerProperties(), buttons); 232 setIdTypeButtons(pointerEventInit, mouseEvent, buttons);
234 setEventSpecificFields(pointerEventInit, pointerEventName); 233 setEventSpecificFields(pointerEventInit, pointerEventName);
235 234
236 if (pointerEventName == EventTypeNames::pointerdown || 235 if (pointerEventName == EventTypeNames::pointerdown ||
237 pointerEventName == EventTypeNames::pointerup) { 236 pointerEventName == EventTypeNames::pointerup) {
238 WebPointerProperties::Button button = mouseEvent.pointerProperties().button; 237 WebPointerProperties::Button button = mouseEvent.button;
239 // TODO(mustaq): Fix when the spec starts supporting hovering erasers. 238 // TODO(mustaq): Fix when the spec starts supporting hovering erasers.
240 if (mouseEvent.pointerProperties().pointerType == 239 if (mouseEvent.pointerType == WebPointerProperties::PointerType::Eraser &&
241 WebPointerProperties::PointerType::Eraser &&
242 button == WebPointerProperties::Button::Left) 240 button == WebPointerProperties::Button::Left)
243 button = WebPointerProperties::Button::Eraser; 241 button = WebPointerProperties::Button::Eraser;
244 pointerEventInit.setButton(static_cast<int>(button)); 242 pointerEventInit.setButton(static_cast<int>(button));
245 } else { 243 } else {
246 DCHECK(pointerEventName == EventTypeNames::pointermove); 244 DCHECK(pointerEventName == EventTypeNames::pointermove);
247 pointerEventInit.setButton( 245 pointerEventInit.setButton(
248 static_cast<int>(WebPointerProperties::Button::NoButton)); 246 static_cast<int>(WebPointerProperties::Button::NoButton));
249 } 247 }
250 248
251 UIEventWithKeyState::setFromPlatformModifiers(pointerEventInit, 249 UIEventWithKeyState::setFromWebInputEventModifiers(
252 mouseEvent.getModifiers()); 250 pointerEventInit,
251 static_cast<WebInputEvent::Modifiers>(mouseEvent.modifiers()));
253 252
254 // Make sure chorded buttons fire pointermove instead of pointerup/down. 253 // Make sure chorded buttons fire pointermove instead of pointerup/down.
255 if ((pointerEventName == EventTypeNames::pointerdown && 254 if ((pointerEventName == EventTypeNames::pointerdown &&
256 (buttons & 255 (buttons & ~buttonToButtonsBitfield(mouseEvent.button)) != 0) ||
257 ~buttonToButtonsBitfield(mouseEvent.pointerProperties().button)) !=
258 0) ||
259 (pointerEventName == EventTypeNames::pointerup && buttons != 0)) 256 (pointerEventName == EventTypeNames::pointerup && buttons != 0))
260 pointerEventName = EventTypeNames::pointermove; 257 pointerEventName = EventTypeNames::pointermove;
261 258
262 pointerEventInit.setView(view); 259 pointerEventInit.setView(view);
263 260
264 updateMousePointerEventInit(mouseEvent, view, &pointerEventInit); 261 updateMousePointerEventInit(mouseEvent, view, &pointerEventInit);
265 262
266 // Create coalesced events init structure only for pointermove. 263 // Create coalesced events init structure only for pointermove.
267 if (pointerEventName == EventTypeNames::pointermove) { 264 if (pointerEventName == EventTypeNames::pointermove) {
268 HeapVector<Member<PointerEvent>> coalescedPointerEvents; 265 HeapVector<Member<PointerEvent>> coalescedPointerEvents;
269 for (const auto& coalescedMouseEvent : coalescedMouseEvents) { 266 for (const auto& coalescedMouseEvent : coalescedMouseEvents) {
270 DCHECK_EQ(mouseEvent.pointerProperties().id, 267 DCHECK_EQ(mouseEvent.id, coalescedMouseEvent.id);
271 coalescedMouseEvent.pointerProperties().id);
272 // TODO(crbug.com/684292): We need further investigation of why the 268 // TODO(crbug.com/684292): We need further investigation of why the
273 // following DCHECK fails. 269 // following DCHECK fails.
274 // DCHECK_EQ(mouseEvent.pointerProperties().pointerType, 270 // DCHECK_EQ(mouseEvent.pointerType, coalescedMouseEvent.pointerType);
275 // coalescedMouseEvent.pointerProperties().pointerType);
276 PointerEventInit coalescedEventInit = pointerEventInit; 271 PointerEventInit coalescedEventInit = pointerEventInit;
277 updateMousePointerEventInit(coalescedMouseEvent, view, 272 updateMousePointerEventInit(coalescedMouseEvent, view,
278 &coalescedEventInit); 273 &coalescedEventInit);
279 coalescedPointerEvents.push_back( 274 coalescedPointerEvents.push_back(
280 PointerEvent::create(pointerEventName, coalescedEventInit)); 275 PointerEvent::create(pointerEventName, coalescedEventInit));
281 } 276 }
282 pointerEventInit.setCoalescedEvents(coalescedPointerEvents); 277 pointerEventInit.setCoalescedEvents(coalescedPointerEvents);
283 } 278 }
284 279
285 return PointerEvent::create(pointerEventName, pointerEventInit); 280 return PointerEvent::create(pointerEventName, pointerEventInit);
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after
522 const WebPointerProperties& properties) const { 517 const WebPointerProperties& properties) const {
523 if (properties.pointerType == WebPointerProperties::PointerType::Mouse) 518 if (properties.pointerType == WebPointerProperties::PointerType::Mouse)
524 return PointerEventFactory::s_mouseId; 519 return PointerEventFactory::s_mouseId;
525 IncomingId id(properties.pointerType, properties.id); 520 IncomingId id(properties.pointerType, properties.id);
526 if (m_pointerIncomingIdMapping.contains(id)) 521 if (m_pointerIncomingIdMapping.contains(id))
527 return m_pointerIncomingIdMapping.get(id); 522 return m_pointerIncomingIdMapping.get(id);
528 return PointerEventFactory::s_invalidId; 523 return PointerEventFactory::s_invalidId;
529 } 524 }
530 525
531 } // namespace blink 526 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698