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

Unified Diff: third_party/WebKit/Source/web/WebViewImpl.cpp

Issue 1841053002: Fix mouse wheel scrolling on PDFs. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add comment Created 4 years, 9 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: third_party/WebKit/Source/web/WebViewImpl.cpp
diff --git a/third_party/WebKit/Source/web/WebViewImpl.cpp b/third_party/WebKit/Source/web/WebViewImpl.cpp
index 98b04285fcb22d795e62fbf56591a796e7734f21..33c4cdd77443cdff181b43512a460f7e1e658f3e 100644
--- a/third_party/WebKit/Source/web/WebViewImpl.cpp
+++ b/third_party/WebKit/Source/web/WebViewImpl.cpp
@@ -643,9 +643,26 @@ WebInputEventResult WebViewImpl::handleMouseWheel(LocalFrame& mainFrame, const W
return PageWidgetEventHandler::handleMouseWheel(mainFrame, event);
}
+WebGestureEvent WebViewImpl::createGestureScrollEventFromFling(WebInputEvent::Type type, WebGestureDevice sourceDevice) const
+{
+ WebGestureEvent gestureEvent;
+ gestureEvent.type = type;
+ gestureEvent.sourceDevice = sourceDevice;
+ gestureEvent.timeStampSeconds = WTF::monotonicallyIncreasingTime();
+ gestureEvent.x = m_positionOnFlingStart.x;
+ gestureEvent.y = m_positionOnFlingStart.y;
+ gestureEvent.globalX = m_globalPositionOnFlingStart.x;
+ gestureEvent.globalY = m_globalPositionOnFlingStart.y;
+ gestureEvent.modifiers = m_flingModifier;
+ return gestureEvent;
+}
+
bool WebViewImpl::scrollBy(const WebFloatSize& delta, const WebFloatSize& velocity)
{
ASSERT(m_flingSourceDevice != WebGestureDeviceUninitialized);
+ if (!m_page || !m_page->mainFrame() || !m_page->mainFrame()->isLocalFrame() || !m_page->deprecatedLocalMainFrame()->view())
+ return false;
+
if (m_flingSourceDevice == WebGestureDeviceTouchpad) {
WebMouseWheelEvent syntheticWheel;
const float tickDivisor = WheelEvent::TickMultiplier;
@@ -663,30 +680,41 @@ bool WebViewImpl::scrollBy(const WebFloatSize& delta, const WebFloatSize& veloci
syntheticWheel.globalY = m_globalPositionOnFlingStart.y;
syntheticWheel.modifiers = m_flingModifier;
- if (m_page && m_page->mainFrame() && m_page->mainFrame()->isLocalFrame() && m_page->deprecatedLocalMainFrame()->view())
- return handleMouseWheel(*m_page->deprecatedLocalMainFrame(), syntheticWheel) != WebInputEventResult::NotHandled;
- } else {
- WebGestureEvent syntheticGestureEvent;
+ if (handleMouseWheel(*m_page->deprecatedLocalMainFrame(), syntheticWheel) != WebInputEventResult::NotHandled)
+ return true;
+ if (!m_webSettings->wheelGesturesEnabled())
+ return false;
- syntheticGestureEvent.type = WebInputEvent::GestureScrollUpdate;
- syntheticGestureEvent.timeStampSeconds = WTF::monotonicallyIncreasingTime();
+ // TODO(dtapuska): Remove these GSB/GSE sequences when trackpad latching is implemented; see crbug.com/526463.
+ WebGestureEvent syntheticScrollBegin = createGestureScrollEventFromFling(WebInputEvent::GestureScrollBegin, WebGestureDeviceTouchpad);
+ syntheticScrollBegin.data.scrollBegin.deltaXHint = delta.width;
+ syntheticScrollBegin.data.scrollBegin.deltaYHint = delta.height;
+ syntheticScrollBegin.data.scrollBegin.inertial = true;
+ handleGestureEvent(syntheticScrollBegin);
+
+ WebGestureEvent syntheticScrollUpdate = createGestureScrollEventFromFling(WebInputEvent::GestureScrollUpdate, WebGestureDeviceTouchpad);
+ syntheticScrollUpdate.data.scrollUpdate.deltaX = delta.width;
+ syntheticScrollUpdate.data.scrollUpdate.deltaY = delta.height;
+ syntheticScrollUpdate.data.scrollUpdate.velocityX = velocity.width;
+ syntheticScrollUpdate.data.scrollUpdate.velocityY = velocity.height;
+ syntheticScrollUpdate.data.scrollUpdate.inertial = true;
+ bool scrollUpdateHandled = handleGestureEvent(syntheticScrollUpdate) != WebInputEventResult::NotHandled;
+
+ WebGestureEvent syntheticScrollEnd = createGestureScrollEventFromFling(WebInputEvent::GestureScrollEnd, WebGestureDeviceTouchpad);
+ syntheticScrollEnd.data.scrollEnd.inertial = true;
+ handleGestureEvent(syntheticScrollEnd);
+ return scrollUpdateHandled;
+ } else {
+ WebGestureEvent syntheticGestureEvent = createGestureScrollEventFromFling(WebInputEvent::GestureScrollUpdate, WebGestureDeviceTouchscreen);
syntheticGestureEvent.data.scrollUpdate.preventPropagation = true;
syntheticGestureEvent.data.scrollUpdate.deltaX = delta.width;
syntheticGestureEvent.data.scrollUpdate.deltaY = delta.height;
syntheticGestureEvent.data.scrollUpdate.velocityX = velocity.width;
syntheticGestureEvent.data.scrollUpdate.velocityY = velocity.height;
- syntheticGestureEvent.x = m_positionOnFlingStart.x;
- syntheticGestureEvent.y = m_positionOnFlingStart.y;
- syntheticGestureEvent.globalX = m_globalPositionOnFlingStart.x;
- syntheticGestureEvent.globalY = m_globalPositionOnFlingStart.y;
- syntheticGestureEvent.modifiers = m_flingModifier;
- syntheticGestureEvent.sourceDevice = WebGestureDeviceTouchscreen;
syntheticGestureEvent.data.scrollUpdate.inertial = true;
- if (m_page && m_page->mainFrame() && m_page->mainFrame()->isLocalFrame() && m_page->deprecatedLocalMainFrame()->view())
- return handleGestureEvent(syntheticGestureEvent) != WebInputEventResult::NotHandled;
+ return handleGestureEvent(syntheticGestureEvent) != WebInputEventResult::NotHandled;
}
- return false;
}
WebInputEventResult WebViewImpl::handleGestureEvent(const WebGestureEvent& event)

Powered by Google App Engine
This is Rietveld 408576698