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

Unified Diff: Source/core/page/EventHandler.cpp

Issue 1056983004: OverscrollGlow for mainThread-{BLINK CHANGES} (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 5 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/core/page/EventHandler.cpp
diff --git a/Source/core/page/EventHandler.cpp b/Source/core/page/EventHandler.cpp
index f5667d003a275407cf9304ebd526e82dc658e6d1..5dfe1d6e1504e37912e8f51b63bebfad83c29875 100644
--- a/Source/core/page/EventHandler.cpp
+++ b/Source/core/page/EventHandler.cpp
@@ -299,6 +299,8 @@ void EventHandler::clear()
m_dragTarget = nullptr;
m_shouldOnlyFireDragOverEvent = false;
m_mousePositionIsUnknown = true;
+ m_unusedDelta = IntPoint();
+ m_accumulatedRootOverscroll = IntPoint();
m_lastKnownMousePosition = IntPoint();
m_lastKnownMouseGlobalPosition = IntPoint();
m_lastMouseDownUserGestureToken.clear();
@@ -926,7 +928,7 @@ void EventHandler::stopAutoscroll()
controller->stopAutoscroll();
}
-bool EventHandler::scroll(ScrollDirection direction, ScrollGranularity granularity, Node* startNode, Node** stopNode, float delta, IntPoint absolutePoint)
+bool EventHandler::scroll(ScrollDirection direction, ScrollGranularity granularity, Node* startNode, Node** stopNode, float delta, IntPoint absolutePoint, int* unusedDelta)
{
if (!delta)
return false;
@@ -951,6 +953,11 @@ bool EventHandler::scroll(ScrollDirection direction, ScrollGranularity granulari
// If we're at the stopNode, we should try to scroll it but we shouldn't bubble past it
bool shouldStopBubbling = stopNode && *stopNode && curBox->node() == *stopNode;
bool didScroll = curBox->scroll(physicalDirection, granularity, delta);
+ IntPoint cbUnusedDelta = curBox->unUsedDelta();
+ if (direction == ScrollUp)
+ *unusedDelta = cbUnusedDelta.y();
+ else if (direction == ScrollLeft)
+ *unusedDelta = cbUnusedDelta.x();
majidvp 2015/04/23 18:25:08 Overscroll should happen only if the document's ma
MuVen 2015/04/27 12:53:46 if (m_frame->isMainFrame()) condition will accumul
if (didScroll && stopNode)
*stopNode = curBox->node();
@@ -996,6 +1003,21 @@ bool EventHandler::bubblingScroll(ScrollDirection direction, ScrollGranularity g
return toLocalFrame(parentFrame)->eventHandler().bubblingScroll(direction, granularity, m_frame->deprecatedLocalOwner());
}
+IntPoint EventHandler::unusedDelta() const
+{
+ return m_unusedDelta;
+}
+
+IntPoint EventHandler::accumaltedRootOverScroll() const
+{
+ return m_accumulatedRootOverscroll;
+}
+
+void EventHandler::resetOverScrollParams()
+{
+ m_unusedDelta = m_accumulatedRootOverscroll = IntPoint();
majidvp 2015/04/23 18:25:08 Scroll deltas should use |FloatSize| and not |IntP
MuVen 2015/04/27 12:53:46 Done.
+}
+
IntPoint EventHandler::lastKnownMousePosition() const
{
return m_lastKnownMousePosition;
@@ -2366,7 +2388,6 @@ bool EventHandler::handleGestureScrollEvent(const PlatformGestureEvent& gestureE
if (eventSwallowed)
return true;
}
-
switch (gestureEvent.type()) {
case PlatformEvent::GestureScrollBegin:
return handleGestureScrollBegin(gestureEvent);
@@ -2611,6 +2632,7 @@ bool EventHandler::handleGestureScrollEnd(const PlatformGestureEvent& gestureEve
}
clearGestureScrollNodes();
+ resetOverScrollParams();
return false;
}
@@ -2636,7 +2658,6 @@ bool EventHandler::handleGestureScrollBegin(const PlatformGestureEvent& gestureE
return false;
}
ASSERT(m_scrollGestureHandlingNode);
-
passScrollGestureEventToWidget(gestureEvent, m_scrollGestureHandlingNode->layoutObject());
if (RuntimeEnabledFeatures::scrollCustomizationEnabled()) {
m_currentScrollChain.clear();
@@ -2648,6 +2669,8 @@ bool EventHandler::handleGestureScrollBegin(const PlatformGestureEvent& gestureE
if (m_frame->isMainFrame())
m_frame->host()->topControls().scrollBegin();
}
+
+ resetOverScrollParams();
return true;
}
@@ -2709,13 +2732,17 @@ bool EventHandler::handleGestureScrollUpdate(const PlatformGestureEvent& gesture
stopNode = m_previousGestureScrolledNode.get();
// First try to scroll the closest scrollable LayoutBox ancestor of |node|.
+ int uDelta;
+ m_unusedDelta = IntPoint();
ScrollGranularity granularity = ScrollByPrecisePixel;
- bool horizontalScroll = scroll(ScrollLeft, granularity, node, &stopNode, delta.width());
+ bool horizontalScroll = scroll(ScrollLeft, granularity, node, &stopNode, delta.width(), IntPoint(), &uDelta);
+ m_unusedDelta.setX(uDelta);
if (!gestureEvent.preventPropagation())
stopNode = nullptr;
- bool verticalScroll = scroll(ScrollUp, granularity, node, &stopNode, delta.height());
+ bool verticalScroll = scroll(ScrollUp, granularity, node, &stopNode, delta.height(), IntPoint(), &uDelta);
+ m_unusedDelta.setY(uDelta);
scrolled = horizontalScroll || verticalScroll;
-
+ m_accumulatedRootOverscroll = m_accumulatedRootOverscroll + m_unusedDelta;
if (gestureEvent.preventPropagation())
m_previousGestureScrolledNode = stopNode;
}

Powered by Google App Engine
This is Rietveld 408576698