 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| Index: Source/web/WebInputEventConversion.cpp | 
| diff --git a/Source/web/WebInputEventConversion.cpp b/Source/web/WebInputEventConversion.cpp | 
| index 2b383ced828daf5885efe876d5c7e40d91b2cdc2..32597a77b85f1ac7234d8d98d77b50ef57b8d268 100644 | 
| --- a/Source/web/WebInputEventConversion.cpp | 
| +++ b/Source/web/WebInputEventConversion.cpp | 
| @@ -38,6 +38,10 @@ | 
| #include "core/events/MouseEvent.h" | 
| #include "core/events/TouchEvent.h" | 
| #include "core/events/WheelEvent.h" | 
| +#include "core/frame/FrameHost.h" | 
| +#include "core/frame/FrameView.h" | 
| +#include "core/frame/PinchViewport.h" | 
| +#include "core/page/Page.h" | 
| #include "core/rendering/RenderObject.h" | 
| #include "platform/KeyboardCodes.h" | 
| #include "platform/Widget.h" | 
| @@ -72,16 +76,29 @@ static IntSize widgetInputEventsOffset(const Widget* widget) | 
| return rootView->inputEventsOffsetForEmulation(); | 
| } | 
| +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.
 | 
| +{ | 
| + // Event position needs to be adjusted by the pinch viewport's offset within the | 
| + // main frame before being passed into the widget's convertFromContainingWindow. | 
| + 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.
 | 
| + if (!rootView) | 
| + return IntPoint(); | 
| + | 
| + return flooredIntPoint(rootView->page()->frameHost().pinchViewport().visibleRect().location()); | 
| +} | 
| + | 
| // MakePlatformMouseEvent ----------------------------------------------------- | 
| PlatformMouseEventBuilder::PlatformMouseEventBuilder(Widget* widget, const WebMouseEvent& e) | 
| { | 
| float scale = widgetInputEventsScaleFactor(widget); | 
| IntSize offset = widgetInputEventsOffset(widget); | 
| + IntPoint pinchViewport = pinchViewportOffset(widget); | 
| // FIXME: Widget is always toplevel, unless it's a popup. We may be able | 
| // to get rid of this once we abstract popups into a WebKit API. | 
| - m_position = widget->convertFromContainingWindow(IntPoint((e.x - offset.width()) / scale, (e.y - offset.height()) / scale)); | 
| + m_position = widget->convertFromContainingWindow( | 
| + IntPoint((e.x - offset.width()) / scale + pinchViewport.x(), (e.y - offset.height()) / scale + pinchViewport.y())); | 
| m_globalPosition = IntPoint(e.globalX, e.globalY); | 
| m_movementDelta = IntPoint(e.movementX / scale, e.movementY / scale); | 
| m_button = static_cast<MouseButton>(e.button); | 
| @@ -125,8 +142,10 @@ PlatformWheelEventBuilder::PlatformWheelEventBuilder(Widget* widget, const WebMo | 
| { | 
| float scale = widgetInputEventsScaleFactor(widget); | 
| IntSize offset = widgetInputEventsOffset(widget); | 
| + IntPoint pinchViewport = pinchViewportOffset(widget); | 
| - m_position = widget->convertFromContainingWindow(IntPoint((e.x - offset.width()) / scale, (e.y - offset.height()) / scale)); | 
| + m_position = widget->convertFromContainingWindow( | 
| + IntPoint((e.x - offset.width()) / scale + pinchViewport.x(), (e.y - offset.height()) / scale + pinchViewport.y())); | 
| m_globalPosition = IntPoint(e.globalX, e.globalY); | 
| m_deltaX = e.deltaX; | 
| m_deltaY = e.deltaY; | 
| @@ -166,6 +185,7 @@ PlatformGestureEventBuilder::PlatformGestureEventBuilder(Widget* widget, const W | 
| { | 
| float scale = widgetInputEventsScaleFactor(widget); | 
| IntSize offset = widgetInputEventsOffset(widget); | 
| + IntPoint pinchViewport = pinchViewportOffset(widget); | 
| switch (e.type) { | 
| case WebInputEvent::GestureScrollBegin: | 
| @@ -243,7 +263,8 @@ PlatformGestureEventBuilder::PlatformGestureEventBuilder(Widget* widget, const W | 
| default: | 
| ASSERT_NOT_REACHED(); | 
| } | 
| - m_position = widget->convertFromContainingWindow(IntPoint((e.x - offset.width()) / scale, (e.y - offset.height()) / scale)); | 
| + m_position = widget->convertFromContainingWindow( | 
| + IntPoint((e.x - offset.width()) / scale + pinchViewport.x(), (e.y - offset.height()) / scale + pinchViewport.y())); | 
| m_globalPosition = IntPoint(e.globalX, e.globalY); | 
| m_timestamp = e.timeStampSeconds; | 
| @@ -405,9 +426,12 @@ PlatformTouchPointBuilder::PlatformTouchPointBuilder(Widget* widget, const WebTo | 
| { | 
| float scale = widgetInputEventsScaleFactor(widget); | 
| IntSize offset = widgetInputEventsOffset(widget); | 
| + IntPoint pinchViewport = pinchViewportOffset(widget); | 
| m_id = point.id; | 
| m_state = toPlatformTouchPointState(point.state); | 
| - m_pos = widget->convertFromContainingWindow(IntPoint((point.position.x - offset.width()) / scale, (point.position.y - offset.height()) / scale)); | 
| + m_pos = widget->convertFromContainingWindow(IntPoint( | 
| + (point.position.x - offset.width()) / scale + pinchViewport.x(), | 
| + (point.position.y - offset.height()) / scale + pinchViewport.y())); | 
| m_screenPos = IntPoint(point.screenPosition.x, point.screenPosition.y); | 
| m_radiusY = point.radiusY / scale; | 
| m_radiusX = point.radiusX / scale; |