Index: Source/web/WebDevToolsAgentImpl.cpp |
diff --git a/Source/web/WebDevToolsAgentImpl.cpp b/Source/web/WebDevToolsAgentImpl.cpp |
index 9b08ec2e4bf8a02156ec17b0f7de55b018ffb3c4..727926eac4c294a6adce840882aa088bd856c210 100644 |
--- a/Source/web/WebDevToolsAgentImpl.cpp |
+++ b/Source/web/WebDevToolsAgentImpl.cpp |
@@ -51,6 +51,7 @@ |
#include "core/fetch/MemoryCache.h" |
#include "core/frame/FrameView.h" |
#include "core/frame/LocalFrame.h" |
+#include "core/frame/Settings.h" |
#include "core/inspector/InjectedScriptHost.h" |
#include "core/inspector/InspectorController.h" |
#include "core/page/Page.h" |
@@ -205,6 +206,9 @@ WebDevToolsAgentImpl::WebDevToolsAgentImpl( |
, m_emulateViewportEnabled(false) |
, m_originalViewportEnabled(false) |
, m_isOverlayScrollbarsEnabled(false) |
+ , m_touchEventEmulationEnabled(false) |
+ , m_originalTouchEnabled(false) |
+ , m_originalDeviceSupportsMouse(false) |
{ |
ASSERT(m_hostId > 0); |
ClientMessageLoopAdapter::ensureClientMessageLoopCreated(m_client); |
@@ -298,6 +302,23 @@ bool WebDevToolsAgentImpl::handleInputEvent(WebCore::Page* page, const WebInputE |
if (!m_attached && !m_generatingEvent) |
return false; |
+ if (WebInputEvent::isGestureEventType(inputEvent.type) && m_touchEventEmulationEnabled) { |
+ FrameView* frameView = page->mainFrame()->view(); |
pfeldman
2014/04/07 17:32:59
Why are these gestures handled here?
pfeldman
2014/04/07 17:52:50
Please add fixme and a link to a bug.
dgozman
2014/04/08 16:51:48
Done.
|
+ PlatformGestureEventBuilder gestureEvent(frameView, *static_cast<const WebGestureEvent*>(&inputEvent)); |
+ if (gestureEvent.type() == PlatformEvent::GesturePinchUpdate) { |
+ IntPoint offset = gestureEvent.position(); |
+ float oldPageScaleFactor = page->pageScaleFactor(); |
+ float newPageScaleFactor = oldPageScaleFactor * gestureEvent.scale(); |
+ float offsetScale = 1 - oldPageScaleFactor / newPageScaleFactor; |
+ offset.scale(offsetScale, offsetScale); |
+ m_webViewImpl->setPageScaleFactor(newPageScaleFactor, offset + frameView->scrollPosition()); |
+ } |
+ if (gestureEvent.type() == PlatformEvent::GesturePinchBegin |
+ || gestureEvent.type() == PlatformEvent::GesturePinchUpdate |
+ || gestureEvent.type() == PlatformEvent::GesturePinchEnd) |
+ return true; |
+ } |
+ |
InspectorController* ic = inspectorController(); |
if (!ic) |
return false; |
@@ -352,6 +373,23 @@ void WebDevToolsAgentImpl::overrideDeviceMetrics(int width, int height, float de |
} |
} |
+void WebDevToolsAgentImpl::setTouchEventEmulationEnabled(bool enabled) |
+{ |
+ if (m_touchEventEmulationEnabled == enabled) |
+ return; |
+ |
+ if (!m_touchEventEmulationEnabled) { |
+ m_originalTouchEnabled = RuntimeEnabledFeatures::touchEnabled(); |
+ if (m_webViewImpl->page()) |
+ m_originalDeviceSupportsMouse = m_webViewImpl->page()->settings().deviceSupportsMouse(); |
+ } |
+ RuntimeEnabledFeatures::setTouchEnabled(enabled ? true : m_originalTouchEnabled); |
+ if (m_webViewImpl->page()) |
+ m_webViewImpl->page()->settings().setDeviceSupportsMouse(enabled ? false : m_originalDeviceSupportsMouse); |
+ m_client->setTouchEventEmulationEnabled(enabled); |
+ m_touchEventEmulationEnabled = enabled; |
+} |
+ |
void WebDevToolsAgentImpl::enableViewportEmulation() |
{ |
if (m_emulateViewportEnabled) |