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

Unified 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: 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 side-by-side diff with in-line comments
Download patch
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;

Powered by Google App Engine
This is Rietveld 408576698