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

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

Issue 225303014: [Pinch-to-zoom] Moved scale factor into PinchViewport (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Fixed layout test breakage Created 6 years, 8 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
« no previous file with comments | « Source/web/InspectorClientImpl.cpp ('k') | Source/web/WebViewImpl.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 20 matching lines...) Expand all
31 #include "config.h" 31 #include "config.h"
32 #include "WebInputEventConversion.h" 32 #include "WebInputEventConversion.h"
33 33
34 #include "core/dom/Touch.h" 34 #include "core/dom/Touch.h"
35 #include "core/dom/TouchList.h" 35 #include "core/dom/TouchList.h"
36 #include "core/events/GestureEvent.h" 36 #include "core/events/GestureEvent.h"
37 #include "core/events/KeyboardEvent.h" 37 #include "core/events/KeyboardEvent.h"
38 #include "core/events/MouseEvent.h" 38 #include "core/events/MouseEvent.h"
39 #include "core/events/TouchEvent.h" 39 #include "core/events/TouchEvent.h"
40 #include "core/events/WheelEvent.h" 40 #include "core/events/WheelEvent.h"
41 #include "core/frame/FrameHost.h"
42 #include "core/frame/FrameView.h"
43 #include "core/frame/PinchViewport.h"
44 #include "core/page/Page.h"
41 #include "core/rendering/RenderObject.h" 45 #include "core/rendering/RenderObject.h"
42 #include "platform/KeyboardCodes.h" 46 #include "platform/KeyboardCodes.h"
43 #include "platform/Widget.h" 47 #include "platform/Widget.h"
44 #include "platform/scroll/ScrollView.h" 48 #include "platform/scroll/ScrollView.h"
45 49
46 using namespace WebCore; 50 using namespace WebCore;
47 51
48 namespace blink { 52 namespace blink {
49 53
50 static const double millisPerSecond = 1000.0; 54 static const double millisPerSecond = 1000.0;
(...skipping 14 matching lines...) Expand all
65 { 69 {
66 if (!widget) 70 if (!widget)
67 return IntSize(); 71 return IntSize();
68 ScrollView* rootView = toScrollView(widget->root()); 72 ScrollView* rootView = toScrollView(widget->root());
69 if (!rootView) 73 if (!rootView)
70 return IntSize(); 74 return IntSize();
71 75
72 return rootView->inputEventsOffsetForEmulation(); 76 return rootView->inputEventsOffsetForEmulation();
73 } 77 }
74 78
79 static IntPoint pinchViewportOffset(const Widget* widget)
80 {
81 // Event position needs to be adjusted by the pinch viewport's offset within the
82 // main frame before being passed into the widget's convertFromContainingWin dow.
83 FrameView* rootView = toFrameView(widget->root());
84 if (!rootView)
85 return IntPoint();
86
87 return flooredIntPoint(rootView->page()->frameHost().pinchViewport().visible Rect().location());
88 }
89
75 // MakePlatformMouseEvent ----------------------------------------------------- 90 // MakePlatformMouseEvent -----------------------------------------------------
76 91
77 PlatformMouseEventBuilder::PlatformMouseEventBuilder(Widget* widget, const WebMo useEvent& e) 92 PlatformMouseEventBuilder::PlatformMouseEventBuilder(Widget* widget, const WebMo useEvent& e)
78 { 93 {
79 float scale = widgetInputEventsScaleFactor(widget); 94 float scale = widgetInputEventsScaleFactor(widget);
80 IntSize offset = widgetInputEventsOffset(widget); 95 IntSize offset = widgetInputEventsOffset(widget);
96 IntPoint pinchViewport = pinchViewportOffset(widget);
81 97
82 // FIXME: Widget is always toplevel, unless it's a popup. We may be able 98 // FIXME: Widget is always toplevel, unless it's a popup. We may be able
83 // to get rid of this once we abstract popups into a WebKit API. 99 // to get rid of this once we abstract popups into a WebKit API.
84 m_position = widget->convertFromContainingWindow(IntPoint((e.x - offset.widt h()) / scale, (e.y - offset.height()) / scale)); 100 m_position = widget->convertFromContainingWindow(
101 IntPoint((e.x - offset.width()) / scale + pinchViewport.x(), (e.y - offs et.height()) / scale + pinchViewport.y()));
85 m_globalPosition = IntPoint(e.globalX, e.globalY); 102 m_globalPosition = IntPoint(e.globalX, e.globalY);
86 m_movementDelta = IntPoint(e.movementX / scale, e.movementY / scale); 103 m_movementDelta = IntPoint(e.movementX / scale, e.movementY / scale);
87 m_button = static_cast<MouseButton>(e.button); 104 m_button = static_cast<MouseButton>(e.button);
88 105
89 m_modifiers = 0; 106 m_modifiers = 0;
90 if (e.modifiers & WebInputEvent::ShiftKey) 107 if (e.modifiers & WebInputEvent::ShiftKey)
91 m_modifiers |= PlatformEvent::ShiftKey; 108 m_modifiers |= PlatformEvent::ShiftKey;
92 if (e.modifiers & WebInputEvent::ControlKey) 109 if (e.modifiers & WebInputEvent::ControlKey)
93 m_modifiers |= PlatformEvent::CtrlKey; 110 m_modifiers |= PlatformEvent::CtrlKey;
94 if (e.modifiers & WebInputEvent::AltKey) 111 if (e.modifiers & WebInputEvent::AltKey)
(...skipping 23 matching lines...) Expand all
118 ASSERT_NOT_REACHED(); 135 ASSERT_NOT_REACHED();
119 } 136 }
120 } 137 }
121 138
122 // PlatformWheelEventBuilder -------------------------------------------------- 139 // PlatformWheelEventBuilder --------------------------------------------------
123 140
124 PlatformWheelEventBuilder::PlatformWheelEventBuilder(Widget* widget, const WebMo useWheelEvent& e) 141 PlatformWheelEventBuilder::PlatformWheelEventBuilder(Widget* widget, const WebMo useWheelEvent& e)
125 { 142 {
126 float scale = widgetInputEventsScaleFactor(widget); 143 float scale = widgetInputEventsScaleFactor(widget);
127 IntSize offset = widgetInputEventsOffset(widget); 144 IntSize offset = widgetInputEventsOffset(widget);
145 IntPoint pinchViewport = pinchViewportOffset(widget);
128 146
129 m_position = widget->convertFromContainingWindow(IntPoint((e.x - offset.widt h()) / scale, (e.y - offset.height()) / scale)); 147 m_position = widget->convertFromContainingWindow(
148 IntPoint((e.x - offset.width()) / scale + pinchViewport.x(), (e.y - offs et.height()) / scale + pinchViewport.y()));
130 m_globalPosition = IntPoint(e.globalX, e.globalY); 149 m_globalPosition = IntPoint(e.globalX, e.globalY);
131 m_deltaX = e.deltaX; 150 m_deltaX = e.deltaX;
132 m_deltaY = e.deltaY; 151 m_deltaY = e.deltaY;
133 m_wheelTicksX = e.wheelTicksX; 152 m_wheelTicksX = e.wheelTicksX;
134 m_wheelTicksY = e.wheelTicksY; 153 m_wheelTicksY = e.wheelTicksY;
135 m_granularity = e.scrollByPage ? 154 m_granularity = e.scrollByPage ?
136 ScrollByPageWheelEvent : ScrollByPixelWheelEvent; 155 ScrollByPageWheelEvent : ScrollByPixelWheelEvent;
137 156
138 m_type = PlatformEvent::Wheel; 157 m_type = PlatformEvent::Wheel;
139 158
(...skipping 19 matching lines...) Expand all
159 m_canRubberbandRight = e.canRubberbandRight; 178 m_canRubberbandRight = e.canRubberbandRight;
160 #endif 179 #endif
161 } 180 }
162 181
163 // PlatformGestureEventBuilder ------------------------------------------------- - 182 // PlatformGestureEventBuilder ------------------------------------------------- -
164 183
165 PlatformGestureEventBuilder::PlatformGestureEventBuilder(Widget* widget, const W ebGestureEvent& e) 184 PlatformGestureEventBuilder::PlatformGestureEventBuilder(Widget* widget, const W ebGestureEvent& e)
166 { 185 {
167 float scale = widgetInputEventsScaleFactor(widget); 186 float scale = widgetInputEventsScaleFactor(widget);
168 IntSize offset = widgetInputEventsOffset(widget); 187 IntSize offset = widgetInputEventsOffset(widget);
188 IntPoint pinchViewport = pinchViewportOffset(widget);
169 189
170 switch (e.type) { 190 switch (e.type) {
171 case WebInputEvent::GestureScrollBegin: 191 case WebInputEvent::GestureScrollBegin:
172 m_type = PlatformEvent::GestureScrollBegin; 192 m_type = PlatformEvent::GestureScrollBegin;
173 break; 193 break;
174 case WebInputEvent::GestureScrollEnd: 194 case WebInputEvent::GestureScrollEnd:
175 m_type = PlatformEvent::GestureScrollEnd; 195 m_type = PlatformEvent::GestureScrollEnd;
176 break; 196 break;
177 case WebInputEvent::GestureFlingStart: 197 case WebInputEvent::GestureFlingStart:
178 m_type = PlatformEvent::GestureFlingStart; 198 m_type = PlatformEvent::GestureFlingStart;
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
236 case WebInputEvent::GesturePinchEnd: 256 case WebInputEvent::GesturePinchEnd:
237 m_type = PlatformEvent::GesturePinchEnd; 257 m_type = PlatformEvent::GesturePinchEnd;
238 break; 258 break;
239 case WebInputEvent::GesturePinchUpdate: 259 case WebInputEvent::GesturePinchUpdate:
240 m_type = PlatformEvent::GesturePinchUpdate; 260 m_type = PlatformEvent::GesturePinchUpdate;
241 m_data.m_pinchUpdate.m_scale = e.data.pinchUpdate.scale; 261 m_data.m_pinchUpdate.m_scale = e.data.pinchUpdate.scale;
242 break; 262 break;
243 default: 263 default:
244 ASSERT_NOT_REACHED(); 264 ASSERT_NOT_REACHED();
245 } 265 }
246 m_position = widget->convertFromContainingWindow(IntPoint((e.x - offset.widt h()) / scale, (e.y - offset.height()) / scale)); 266 m_position = widget->convertFromContainingWindow(
267 IntPoint((e.x - offset.width()) / scale + pinchViewport.x(), (e.y - offs et.height()) / scale + pinchViewport.y()));
247 m_globalPosition = IntPoint(e.globalX, e.globalY); 268 m_globalPosition = IntPoint(e.globalX, e.globalY);
248 m_timestamp = e.timeStampSeconds; 269 m_timestamp = e.timeStampSeconds;
249 270
250 m_modifiers = 0; 271 m_modifiers = 0;
251 if (e.modifiers & WebInputEvent::ShiftKey) 272 if (e.modifiers & WebInputEvent::ShiftKey)
252 m_modifiers |= PlatformEvent::ShiftKey; 273 m_modifiers |= PlatformEvent::ShiftKey;
253 if (e.modifiers & WebInputEvent::ControlKey) 274 if (e.modifiers & WebInputEvent::ControlKey)
254 m_modifiers |= PlatformEvent::CtrlKey; 275 m_modifiers |= PlatformEvent::CtrlKey;
255 if (e.modifiers & WebInputEvent::AltKey) 276 if (e.modifiers & WebInputEvent::AltKey)
256 m_modifiers |= PlatformEvent::AltKey; 277 m_modifiers |= PlatformEvent::AltKey;
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
398 return WebTouchPoint::StatePressed; 419 return WebTouchPoint::StatePressed;
399 if (type == EventTypeNames::touchmove) 420 if (type == EventTypeNames::touchmove)
400 return WebTouchPoint::StateMoved; 421 return WebTouchPoint::StateMoved;
401 return WebTouchPoint::StateUndefined; 422 return WebTouchPoint::StateUndefined;
402 } 423 }
403 424
404 PlatformTouchPointBuilder::PlatformTouchPointBuilder(Widget* widget, const WebTo uchPoint& point) 425 PlatformTouchPointBuilder::PlatformTouchPointBuilder(Widget* widget, const WebTo uchPoint& point)
405 { 426 {
406 float scale = widgetInputEventsScaleFactor(widget); 427 float scale = widgetInputEventsScaleFactor(widget);
407 IntSize offset = widgetInputEventsOffset(widget); 428 IntSize offset = widgetInputEventsOffset(widget);
429 IntPoint pinchViewport = pinchViewportOffset(widget);
408 m_id = point.id; 430 m_id = point.id;
409 m_state = toPlatformTouchPointState(point.state); 431 m_state = toPlatformTouchPointState(point.state);
410 m_pos = widget->convertFromContainingWindow(IntPoint((point.position.x - off set.width()) / scale, (point.position.y - offset.height()) / scale)); 432 m_pos = widget->convertFromContainingWindow(IntPoint(
433 (point.position.x - offset.width()) / scale + pinchViewport.x(),
434 (point.position.y - offset.height()) / scale + pinchViewport.y()));
411 m_screenPos = IntPoint(point.screenPosition.x, point.screenPosition.y); 435 m_screenPos = IntPoint(point.screenPosition.x, point.screenPosition.y);
412 m_radiusY = point.radiusY / scale; 436 m_radiusY = point.radiusY / scale;
413 m_radiusX = point.radiusX / scale; 437 m_radiusX = point.radiusX / scale;
414 m_rotationAngle = point.rotationAngle; 438 m_rotationAngle = point.rotationAngle;
415 m_force = point.force; 439 m_force = point.force;
416 } 440 }
417 441
418 PlatformTouchEventBuilder::PlatformTouchEventBuilder(Widget* widget, const WebTo uchEvent& event) 442 PlatformTouchEventBuilder::PlatformTouchEventBuilder(Widget* widget, const WebTo uchEvent& event)
419 { 443 {
420 m_type = toPlatformTouchEventType(event.type); 444 m_type = toPlatformTouchEventType(event.type);
(...skipping 344 matching lines...) Expand 10 before | Expand all | Expand 10 after
765 modifiers = getWebInputModifiers(event); 789 modifiers = getWebInputModifiers(event);
766 790
767 globalX = event.screenX(); 791 globalX = event.screenX();
768 globalY = event.screenY(); 792 globalY = event.screenY();
769 IntPoint localPoint = convertAbsoluteLocationForRenderObject(event.absoluteL ocation(), *renderObject); 793 IntPoint localPoint = convertAbsoluteLocationForRenderObject(event.absoluteL ocation(), *renderObject);
770 x = localPoint.x(); 794 x = localPoint.x();
771 y = localPoint.y(); 795 y = localPoint.y();
772 } 796 }
773 797
774 } // namespace blink 798 } // namespace blink
OLDNEW
« no previous file with comments | « Source/web/InspectorClientImpl.cpp ('k') | Source/web/WebViewImpl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698