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

Side by Side Diff: third_party/WebKit/Source/web/WebInputEventConversion.cpp

Issue 2729543002: Rename platform/Widget to platform/FrameViewBase in web. (Closed)
Patch Set: Created 3 years, 9 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 /* 1 /*
2 * Copyright (C) 2009 Google Inc. All rights reserved. 2 * Copyright (C) 2009 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 25 matching lines...) Expand all
36 #include "core/events/KeyboardEvent.h" 36 #include "core/events/KeyboardEvent.h"
37 #include "core/events/MouseEvent.h" 37 #include "core/events/MouseEvent.h"
38 #include "core/events/TouchEvent.h" 38 #include "core/events/TouchEvent.h"
39 #include "core/events/WheelEvent.h" 39 #include "core/events/WheelEvent.h"
40 #include "core/frame/FrameHost.h" 40 #include "core/frame/FrameHost.h"
41 #include "core/frame/FrameView.h" 41 #include "core/frame/FrameView.h"
42 #include "core/frame/VisualViewport.h" 42 #include "core/frame/VisualViewport.h"
43 #include "core/layout/api/LayoutItem.h" 43 #include "core/layout/api/LayoutItem.h"
44 #include "core/page/ChromeClient.h" 44 #include "core/page/ChromeClient.h"
45 #include "core/page/Page.h" 45 #include "core/page/Page.h"
46 #include "platform/FrameViewBase.h"
46 #include "platform/KeyboardCodes.h" 47 #include "platform/KeyboardCodes.h"
47 #include "platform/Widget.h"
48 #include "public/platform/Platform.h" 48 #include "public/platform/Platform.h"
49 49
50 namespace blink { 50 namespace blink {
51 51
52 namespace { 52 namespace {
53 float frameScale(const Widget* widget) { 53 float frameScale(const FrameViewBase* frameViewBase) {
54 float scale = 1; 54 float scale = 1;
55 if (widget) { 55 if (frameViewBase) {
56 FrameView* rootView = toFrameView(widget->root()); 56 FrameView* rootView = toFrameView(frameViewBase->root());
57 if (rootView) 57 if (rootView)
58 scale = rootView->inputEventsScaleFactor(); 58 scale = rootView->inputEventsScaleFactor();
59 } 59 }
60 return scale; 60 return scale;
61 } 61 }
62 62
63 FloatPoint frameTranslation(const Widget* widget) { 63 FloatPoint frameTranslation(const FrameViewBase* frameViewBase) {
64 float scale = 1; 64 float scale = 1;
65 FloatSize offset; 65 FloatSize offset;
66 IntPoint visualViewport; 66 IntPoint visualViewport;
67 FloatSize overscrollOffset; 67 FloatSize overscrollOffset;
68 if (widget) { 68 if (frameViewBase) {
69 FrameView* rootView = toFrameView(widget->root()); 69 FrameView* rootView = toFrameView(frameViewBase->root());
70 if (rootView) { 70 if (rootView) {
71 scale = rootView->inputEventsScaleFactor(); 71 scale = rootView->inputEventsScaleFactor();
72 offset = FloatSize(rootView->inputEventsOffsetForEmulation()); 72 offset = FloatSize(rootView->inputEventsOffsetForEmulation());
73 visualViewport = flooredIntPoint(rootView->page() 73 visualViewport = flooredIntPoint(rootView->page()
74 ->frameHost() 74 ->frameHost()
75 .visualViewport() 75 .visualViewport()
76 .visibleRect() 76 .visibleRect()
77 .location()); 77 .location());
78 overscrollOffset = rootView->page()->chromeClient().elasticOverscroll(); 78 overscrollOffset = rootView->page()->chromeClient().elasticOverscroll();
79 } 79 }
(...skipping 10 matching lines...) Expand all
90 return layoutItem.absoluteToLocal(FloatPoint(location), UseTransforms); 90 return layoutItem.absoluteToLocal(FloatPoint(location), UseTransforms);
91 } 91 }
92 92
93 IntPoint convertAbsoluteLocationForLayoutObjectInt( 93 IntPoint convertAbsoluteLocationForLayoutObjectInt(
94 const DoublePoint& location, 94 const DoublePoint& location,
95 const LayoutItem layoutItem) { 95 const LayoutItem layoutItem) {
96 return roundedIntPoint( 96 return roundedIntPoint(
97 convertAbsoluteLocationForLayoutObjectFloat(location, layoutItem)); 97 convertAbsoluteLocationForLayoutObjectFloat(location, layoutItem));
98 } 98 }
99 99
100 // FIXME: Change |widget| to const Widget& after RemoteFrames get 100 // FIXME: Change |FrameViewBase| to const FrameViewBase& after RemoteFrames get
101 // RemoteFrameViews. 101 // RemoteFrameViews.
102 void updateWebMouseEventFromCoreMouseEvent(const MouseEvent& event, 102 void updateWebMouseEventFromCoreMouseEvent(const MouseEvent& event,
103 const Widget* widget, 103 const FrameViewBase* frameViewBase,
104 const LayoutItem layoutItem, 104 const LayoutItem layoutItem,
105 WebMouseEvent& webEvent) { 105 WebMouseEvent& webEvent) {
106 webEvent.setTimeStampSeconds(event.platformTimeStamp().InSeconds()); 106 webEvent.setTimeStampSeconds(event.platformTimeStamp().InSeconds());
107 webEvent.setModifiers(event.modifiers()); 107 webEvent.setModifiers(event.modifiers());
108 108
109 FrameView* view = widget ? toFrameView(widget->parent()) : 0; 109 FrameView* view = frameViewBase ? toFrameView(frameViewBase->parent()) : 0;
110 // TODO(bokan): If view == nullptr, pointInRootFrame will really be 110 // TODO(bokan): If view == nullptr, pointInRootFrame will really be
111 // pointInRootContent. 111 // pointInRootContent.
112 IntPoint pointInRootFrame(event.absoluteLocation().x(), 112 IntPoint pointInRootFrame(event.absoluteLocation().x(),
113 event.absoluteLocation().y()); 113 event.absoluteLocation().y());
114 if (view) 114 if (view)
115 pointInRootFrame = view->contentsToRootFrame(pointInRootFrame); 115 pointInRootFrame = view->contentsToRootFrame(pointInRootFrame);
116 webEvent.globalX = event.screenX(); 116 webEvent.globalX = event.screenX();
117 webEvent.globalY = event.screenY(); 117 webEvent.globalY = event.screenY();
118 webEvent.windowX = pointInRootFrame.x(); 118 webEvent.windowX = pointInRootFrame.x();
119 webEvent.windowY = pointInRootFrame.y(); 119 webEvent.windowY = pointInRootFrame.y();
120 IntPoint localPoint = convertAbsoluteLocationForLayoutObjectInt( 120 IntPoint localPoint = convertAbsoluteLocationForLayoutObjectInt(
121 event.absoluteLocation(), layoutItem); 121 event.absoluteLocation(), layoutItem);
122 webEvent.x = localPoint.x(); 122 webEvent.x = localPoint.x();
123 webEvent.y = localPoint.y(); 123 webEvent.y = localPoint.y();
124 } 124 }
125 125
126 unsigned toWebInputEventModifierFrom(WebMouseEvent::Button button) { 126 unsigned toWebInputEventModifierFrom(WebMouseEvent::Button button) {
127 if (button == WebMouseEvent::Button::NoButton) 127 if (button == WebMouseEvent::Button::NoButton)
128 return 0; 128 return 0;
129 129
130 unsigned webMouseButtonToPlatformModifier[] = { 130 unsigned webMouseButtonToPlatformModifier[] = {
131 WebInputEvent::LeftButtonDown, WebInputEvent::MiddleButtonDown, 131 WebInputEvent::LeftButtonDown, WebInputEvent::MiddleButtonDown,
132 WebInputEvent::RightButtonDown}; 132 WebInputEvent::RightButtonDown};
133 133
134 return webMouseButtonToPlatformModifier[static_cast<int>(button)]; 134 return webMouseButtonToPlatformModifier[static_cast<int>(button)];
135 } 135 }
136 136
137 } // namespace 137 } // namespace
138 138
139 WebMouseEvent TransformWebMouseEvent(Widget* widget, 139 WebMouseEvent TransformWebMouseEvent(FrameViewBase* frameViewBase,
140 const WebMouseEvent& event) { 140 const WebMouseEvent& event) {
141 WebMouseEvent result = event; 141 WebMouseEvent result = event;
142 142
143 // TODO(dtapuska): Remove this translation. In the past blink has 143 // TODO(dtapuska): Remove this translation. In the past blink has
144 // converted leaves into moves and not known about leaves. It should 144 // converted leaves into moves and not known about leaves. It should
145 // be educated about them. crbug.com/686196 145 // be educated about them. crbug.com/686196
146 if (event.type() == WebInputEvent::MouseEnter || 146 if (event.type() == WebInputEvent::MouseEnter ||
147 event.type() == WebInputEvent::MouseLeave) { 147 event.type() == WebInputEvent::MouseLeave) {
148 result.setType(WebInputEvent::MouseMove); 148 result.setType(WebInputEvent::MouseMove);
149 } 149 }
150 150
151 // TODO(dtapuska): Perhaps the event should be constructed correctly? 151 // TODO(dtapuska): Perhaps the event should be constructed correctly?
152 // crbug.com/686200 152 // crbug.com/686200
153 if (event.type() == WebInputEvent::MouseUp) { 153 if (event.type() == WebInputEvent::MouseUp) {
154 result.setModifiers(event.modifiers() & 154 result.setModifiers(event.modifiers() &
155 ~toWebInputEventModifierFrom(event.button)); 155 ~toWebInputEventModifierFrom(event.button));
156 } 156 }
157 result.setFrameScale(frameScale(widget)); 157 result.setFrameScale(frameScale(frameViewBase));
158 result.setFrameTranslate(frameTranslation(widget)); 158 result.setFrameTranslate(frameTranslation(frameViewBase));
159 return result; 159 return result;
160 } 160 }
161 161
162 WebMouseWheelEvent TransformWebMouseWheelEvent( 162 WebMouseWheelEvent TransformWebMouseWheelEvent(
163 Widget* widget, 163 FrameViewBase* frameViewBase,
164 const WebMouseWheelEvent& event) { 164 const WebMouseWheelEvent& event) {
165 WebMouseWheelEvent result = event; 165 WebMouseWheelEvent result = event;
166 result.setFrameScale(frameScale(widget)); 166 result.setFrameScale(frameScale(frameViewBase));
167 result.setFrameTranslate(frameTranslation(widget)); 167 result.setFrameTranslate(frameTranslation(frameViewBase));
168 return result; 168 return result;
169 } 169 }
170 170
171 WebGestureEvent TransformWebGestureEvent(Widget* widget, 171 WebGestureEvent TransformWebGestureEvent(FrameViewBase* frameViewBase,
172 const WebGestureEvent& event) { 172 const WebGestureEvent& event) {
173 WebGestureEvent result = event; 173 WebGestureEvent result = event;
174 result.setFrameScale(frameScale(widget)); 174 result.setFrameScale(frameScale(frameViewBase));
175 result.setFrameTranslate(frameTranslation(widget)); 175 result.setFrameTranslate(frameTranslation(frameViewBase));
176 return result; 176 return result;
177 } 177 }
178 178
179 WebTouchEvent TransformWebTouchEvent(float frameScale, 179 WebTouchEvent TransformWebTouchEvent(float frameScale,
180 FloatPoint frameTranslate, 180 FloatPoint frameTranslate,
181 const WebTouchEvent& event) { 181 const WebTouchEvent& event) {
182 // frameScale is default initialized in debug builds to be 0. 182 // frameScale is default initialized in debug builds to be 0.
183 DCHECK_EQ(0, event.frameScale()); 183 DCHECK_EQ(0, event.frameScale());
184 DCHECK_EQ(0, event.frameTranslate().x); 184 DCHECK_EQ(0, event.frameTranslate().x);
185 DCHECK_EQ(0, event.frameTranslate().y); 185 DCHECK_EQ(0, event.frameTranslate().y);
186 WebTouchEvent result = event; 186 WebTouchEvent result = event;
187 result.setFrameScale(frameScale); 187 result.setFrameScale(frameScale);
188 result.setFrameTranslate(frameTranslate); 188 result.setFrameTranslate(frameTranslate);
189 return result; 189 return result;
190 } 190 }
191 191
192 WebTouchEvent TransformWebTouchEvent(Widget* widget, 192 WebTouchEvent TransformWebTouchEvent(FrameViewBase* frameViewBase,
193 const WebTouchEvent& event) { 193 const WebTouchEvent& event) {
194 return TransformWebTouchEvent(frameScale(widget), frameTranslation(widget), 194 return TransformWebTouchEvent(frameScale(frameViewBase),
195 event); 195 frameTranslation(frameViewBase), event);
196 } 196 }
197 197
198 WebMouseEventBuilder::WebMouseEventBuilder(const Widget* widget, 198 WebMouseEventBuilder::WebMouseEventBuilder(const FrameViewBase* frameViewBase,
199 const LayoutItem layoutItem, 199 const LayoutItem layoutItem,
200 const MouseEvent& event) { 200 const MouseEvent& event) {
201 if (event.nativeEvent()) { 201 if (event.nativeEvent()) {
202 *static_cast<WebMouseEvent*>(this) = 202 *static_cast<WebMouseEvent*>(this) =
203 event.nativeEvent()->flattenTransform(); 203 event.nativeEvent()->flattenTransform();
204 WebFloatPoint absoluteRootFrameLocation = positionInRootFrame(); 204 WebFloatPoint absoluteRootFrameLocation = positionInRootFrame();
205 IntPoint localPoint = roundedIntPoint( 205 IntPoint localPoint = roundedIntPoint(
206 layoutItem.absoluteToLocal(absoluteRootFrameLocation, UseTransforms)); 206 layoutItem.absoluteToLocal(absoluteRootFrameLocation, UseTransforms));
207 x = localPoint.x(); 207 x = localPoint.x();
208 y = localPoint.y(); 208 y = localPoint.y();
(...skipping 14 matching lines...) Expand all
223 m_type = WebInputEvent::MouseDown; 223 m_type = WebInputEvent::MouseDown;
224 else if (event.type() == EventTypeNames::mouseup) 224 else if (event.type() == EventTypeNames::mouseup)
225 m_type = WebInputEvent::MouseUp; 225 m_type = WebInputEvent::MouseUp;
226 else if (event.type() == EventTypeNames::contextmenu) 226 else if (event.type() == EventTypeNames::contextmenu)
227 m_type = WebInputEvent::ContextMenu; 227 m_type = WebInputEvent::ContextMenu;
228 else 228 else
229 return; // Skip all other mouse events. 229 return; // Skip all other mouse events.
230 230
231 m_timeStampSeconds = event.platformTimeStamp().InSeconds(); 231 m_timeStampSeconds = event.platformTimeStamp().InSeconds();
232 m_modifiers = event.modifiers(); 232 m_modifiers = event.modifiers();
233 updateWebMouseEventFromCoreMouseEvent(event, widget, layoutItem, *this); 233 updateWebMouseEventFromCoreMouseEvent(event, frameViewBase, layoutItem,
234 *this);
234 235
235 switch (event.button()) { 236 switch (event.button()) {
236 case short(WebPointerProperties::Button::Left): 237 case short(WebPointerProperties::Button::Left):
237 button = WebMouseEvent::Button::Left; 238 button = WebMouseEvent::Button::Left;
238 break; 239 break;
239 case short(WebPointerProperties::Button::Middle): 240 case short(WebPointerProperties::Button::Middle):
240 button = WebMouseEvent::Button::Middle; 241 button = WebMouseEvent::Button::Middle;
241 break; 242 break;
242 case short(WebPointerProperties::Button::Right): 243 case short(WebPointerProperties::Button::Right):
243 button = WebMouseEvent::Button::Right; 244 button = WebMouseEvent::Button::Right;
(...skipping 16 matching lines...) Expand all
260 } 261 }
261 movementX = event.movementX(); 262 movementX = event.movementX();
262 movementY = event.movementY(); 263 movementY = event.movementY();
263 clickCount = event.detail(); 264 clickCount = event.detail();
264 265
265 pointerType = WebPointerProperties::PointerType::Mouse; 266 pointerType = WebPointerProperties::PointerType::Mouse;
266 } 267 }
267 268
268 // Generate a synthetic WebMouseEvent given a TouchEvent (eg. for emulating a 269 // Generate a synthetic WebMouseEvent given a TouchEvent (eg. for emulating a
269 // mouse with touch input for plugins that don't support touch input). 270 // mouse with touch input for plugins that don't support touch input).
270 WebMouseEventBuilder::WebMouseEventBuilder(const Widget* widget, 271 WebMouseEventBuilder::WebMouseEventBuilder(const FrameViewBase* frameViewBase,
271 const LayoutItem layoutItem, 272 const LayoutItem layoutItem,
272 const TouchEvent& event) { 273 const TouchEvent& event) {
273 if (!event.touches()) 274 if (!event.touches())
274 return; 275 return;
275 if (event.touches()->length() != 1) { 276 if (event.touches()->length() != 1) {
276 if (event.touches()->length() || event.type() != EventTypeNames::touchend || 277 if (event.touches()->length() || event.type() != EventTypeNames::touchend ||
277 !event.changedTouches() || event.changedTouches()->length() != 1) 278 !event.changedTouches() || event.changedTouches()->length() != 1)
278 return; 279 return;
279 } 280 }
280 281
(...skipping 12 matching lines...) Expand all
293 else 294 else
294 return; 295 return;
295 296
296 m_timeStampSeconds = event.platformTimeStamp().InSeconds(); 297 m_timeStampSeconds = event.platformTimeStamp().InSeconds();
297 m_modifiers = event.modifiers(); 298 m_modifiers = event.modifiers();
298 m_frameScale = 1; 299 m_frameScale = 1;
299 m_frameTranslate = WebFloatPoint(); 300 m_frameTranslate = WebFloatPoint();
300 301
301 // The mouse event co-ordinates should be generated from the co-ordinates of 302 // The mouse event co-ordinates should be generated from the co-ordinates of
302 // the touch point. 303 // the touch point.
303 FrameView* view = toFrameView(widget->parent()); 304 FrameView* view = toFrameView(frameViewBase->parent());
304 // FIXME: if view == nullptr, pointInRootFrame will really be 305 // FIXME: if view == nullptr, pointInRootFrame will really be
305 // pointInRootContent. 306 // pointInRootContent.
306 IntPoint pointInRootFrame = roundedIntPoint(touch->absoluteLocation()); 307 IntPoint pointInRootFrame = roundedIntPoint(touch->absoluteLocation());
307 if (view) 308 if (view)
308 pointInRootFrame = view->contentsToRootFrame(pointInRootFrame); 309 pointInRootFrame = view->contentsToRootFrame(pointInRootFrame);
309 IntPoint screenPoint = roundedIntPoint(touch->screenLocation()); 310 IntPoint screenPoint = roundedIntPoint(touch->screenLocation());
310 globalX = screenPoint.x(); 311 globalX = screenPoint.x();
311 globalY = screenPoint.y(); 312 globalY = screenPoint.y();
312 windowX = pointInRootFrame.x(); 313 windowX = pointInRootFrame.x();
313 windowY = pointInRootFrame.y(); 314 windowY = pointInRootFrame.y();
(...skipping 29 matching lines...) Expand all
343 m_type = WebInputEvent::Char; 344 m_type = WebInputEvent::Char;
344 else 345 else
345 return; // Skip all other keyboard events. 346 return; // Skip all other keyboard events.
346 347
347 m_modifiers = event.modifiers(); 348 m_modifiers = event.modifiers();
348 m_timeStampSeconds = event.platformTimeStamp().InSeconds(); 349 m_timeStampSeconds = event.platformTimeStamp().InSeconds();
349 windowsKeyCode = event.keyCode(); 350 windowsKeyCode = event.keyCode();
350 } 351 }
351 352
352 Vector<WebMouseEvent> TransformWebMouseEventVector( 353 Vector<WebMouseEvent> TransformWebMouseEventVector(
353 Widget* widget, 354 FrameViewBase* frameViewBase,
354 const std::vector<const WebInputEvent*>& coalescedEvents) { 355 const std::vector<const WebInputEvent*>& coalescedEvents) {
355 Vector<WebMouseEvent> result; 356 Vector<WebMouseEvent> result;
356 for (const auto& event : coalescedEvents) { 357 for (const auto& event : coalescedEvents) {
357 DCHECK(WebInputEvent::isMouseEventType(event->type())); 358 DCHECK(WebInputEvent::isMouseEventType(event->type()));
358 result.push_back(TransformWebMouseEvent( 359 result.push_back(TransformWebMouseEvent(
359 widget, static_cast<const WebMouseEvent&>(*event))); 360 frameViewBase, static_cast<const WebMouseEvent&>(*event)));
360 } 361 }
361 return result; 362 return result;
362 } 363 }
363 364
364 Vector<WebTouchEvent> TransformWebTouchEventVector( 365 Vector<WebTouchEvent> TransformWebTouchEventVector(
365 Widget* widget, 366 FrameViewBase* frameViewBase,
366 const std::vector<const WebInputEvent*>& coalescedEvents) { 367 const std::vector<const WebInputEvent*>& coalescedEvents) {
367 float scale = frameScale(widget); 368 float scale = frameScale(frameViewBase);
368 FloatPoint translation = frameTranslation(widget); 369 FloatPoint translation = frameTranslation(frameViewBase);
369 Vector<WebTouchEvent> result; 370 Vector<WebTouchEvent> result;
370 for (const auto& event : coalescedEvents) { 371 for (const auto& event : coalescedEvents) {
371 DCHECK(WebInputEvent::isTouchEventType(event->type())); 372 DCHECK(WebInputEvent::isTouchEventType(event->type()));
372 result.push_back(TransformWebTouchEvent( 373 result.push_back(TransformWebTouchEvent(
373 scale, translation, static_cast<const WebTouchEvent&>(*event))); 374 scale, translation, static_cast<const WebTouchEvent&>(*event)));
374 } 375 }
375 return result; 376 return result;
376 } 377 }
377 378
378 } // namespace blink 379 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/web/WebInputEventConversion.h ('k') | third_party/WebKit/Source/web/WebNode.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698