 Chromium Code Reviews
 Chromium Code Reviews Issue 225303014:
  [Pinch-to-zoom] Moved scale factor into PinchViewport  (Closed) 
  Base URL: https://chromium.googlesource.com/chromium/blink.git@master
    
  
    Issue 225303014:
  [Pinch-to-zoom] Moved scale factor into PinchViewport  (Closed) 
  Base URL: https://chromium.googlesource.com/chromium/blink.git@master| OLD | NEW | 
|---|---|
| 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 Loading... | |
| 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 Loading... | |
| 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) | |
| 
aelias_OOO_until_Jul13
2014/04/09 08:41:22
Could you add a a test case for this to WebInputEv
 
bokan
2014/04/09 19:57:19
Done.
 | |
| 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()); | |
| 
aelias_OOO_until_Jul13
2014/04/09 08:41:22
nit: extra space after =
 
bokan
2014/04/09 15:30:59
Done.
 | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 | 
| OLD | NEW |