Index: third_party/WebKit/Source/platform/scroll/Scrollbar.cpp |
diff --git a/third_party/WebKit/Source/platform/scroll/Scrollbar.cpp b/third_party/WebKit/Source/platform/scroll/Scrollbar.cpp |
index f1fa7bc92c109843ae33199d7aa3b73c4bef4c0d..b340a59ad9af33bc6f118e92e25edce2588d0610 100644 |
--- a/third_party/WebKit/Source/platform/scroll/Scrollbar.cpp |
+++ b/third_party/WebKit/Source/platform/scroll/Scrollbar.cpp |
@@ -325,25 +325,60 @@ void Scrollbar::setPressedPart(ScrollbarPart part) |
m_pressedPart = part; |
} |
-bool Scrollbar::gestureEvent(const PlatformGestureEvent& evt) |
+bool Scrollbar::gestureEvent(const PlatformGestureEvent& evt, bool* shouldUpdateCapture) |
{ |
+ DCHECK(shouldUpdateCapture); |
switch (evt.type()) { |
case PlatformEvent::GestureTapDown: |
setPressedPart(theme().hitTest(*this, evt.position())); |
m_pressedPos = orientation() == HorizontalScrollbar ? convertFromRootFrame(evt.position()).x() : convertFromRootFrame(evt.position()).y(); |
+ *shouldUpdateCapture = true; |
return true; |
case PlatformEvent::GestureTapDownCancel: |
- case PlatformEvent::GestureScrollBegin: |
if (m_pressedPart != ThumbPart) |
return false; |
m_scrollPos = m_pressedPos; |
return true; |
+ case PlatformEvent::GestureScrollBegin: |
+ switch (evt.source()) { |
+ case PlatformGestureSourceTouchpad: |
+ // Update the state on GSB for touchpad since GestureTapDown |
+ // is not generated by that device. Touchscreen uses the tap down |
+ // gesture since the scrollbar enters a visual active state. |
+ *shouldUpdateCapture = true; |
+ setPressedPart(NoPart); |
+ m_pressedPos = 0; |
+ return true; |
+ case PlatformGestureSourceTouchscreen: |
+ if (m_pressedPart != ThumbPart) |
+ return false; |
+ m_scrollPos = m_pressedPos; |
+ return true; |
+ default: |
+ ASSERT_NOT_REACHED(); |
+ return true; |
+ } |
+ break; |
case PlatformEvent::GestureScrollUpdate: |
- if (m_pressedPart != ThumbPart) |
+ switch (evt.source()) { |
+ case PlatformGestureSourceTouchpad: { |
+ FloatSize delta(-evt.deltaX(), -evt.deltaY()); |
+ if (m_scrollableArea && m_scrollableArea->userScroll(evt.deltaUnits(), delta).didScroll()) { |
+ return true; |
+ } |
return false; |
- m_scrollPos += orientation() == HorizontalScrollbar ? evt.deltaX() : evt.deltaY(); |
- moveThumb(m_scrollPos, false); |
- return true; |
+ } |
+ case PlatformGestureSourceTouchscreen: |
+ if (m_pressedPart != ThumbPart) |
+ return false; |
+ m_scrollPos += orientation() == HorizontalScrollbar ? evt.deltaX() : evt.deltaY(); |
+ moveThumb(m_scrollPos, false); |
+ return true; |
+ default: |
+ ASSERT_NOT_REACHED(); |
+ return true; |
+ } |
+ break; |
case PlatformEvent::GestureScrollEnd: |
case PlatformEvent::GestureLongPress: |
case PlatformEvent::GestureFlingStart: |