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

Unified Diff: third_party/WebKit/Source/core/page/scrolling/RootViewportScrollCallback.cpp

Issue 2128543002: Make ViewportScrollCallback an interface and add child and root classes (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@moveViewportCreationToDocumentAttachment
Patch Set: Rebase Created 4 years, 5 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/core/page/scrolling/RootViewportScrollCallback.cpp
diff --git a/third_party/WebKit/Source/core/page/scrolling/ViewportScrollCallback.cpp b/third_party/WebKit/Source/core/page/scrolling/RootViewportScrollCallback.cpp
similarity index 58%
copy from third_party/WebKit/Source/core/page/scrolling/ViewportScrollCallback.cpp
copy to third_party/WebKit/Source/core/page/scrolling/RootViewportScrollCallback.cpp
index f8cc13a7ff8d3c9b0a824568832561bc51bfe749..a75ebc3a0c280ad08012e8461212c700d4233ec3 100644
--- a/third_party/WebKit/Source/core/page/scrolling/ViewportScrollCallback.cpp
+++ b/third_party/WebKit/Source/core/page/scrolling/RootViewportScrollCallback.cpp
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "core/page/scrolling/ViewportScrollCallback.h"
+#include "core/page/scrolling/RootViewportScrollCallback.h"
#include "core/frame/FrameHost.h"
#include "core/frame/FrameView.h"
@@ -15,26 +15,26 @@
namespace blink {
-ViewportScrollCallback::ViewportScrollCallback(
+RootViewportScrollCallback::RootViewportScrollCallback(
TopControls* topControls, OverscrollController* overscrollController)
: m_topControls(topControls)
, m_overscrollController(overscrollController)
{
}
-ViewportScrollCallback::~ViewportScrollCallback()
+RootViewportScrollCallback::~RootViewportScrollCallback()
{
}
-DEFINE_TRACE(ViewportScrollCallback)
+DEFINE_TRACE(RootViewportScrollCallback)
{
visitor->trace(m_topControls);
visitor->trace(m_overscrollController);
visitor->trace(m_scroller);
- ScrollStateCallback::trace(visitor);
+ ViewportScrollCallback::trace(visitor);
}
-bool ViewportScrollCallback::shouldScrollTopControls(const FloatSize& delta,
+bool RootViewportScrollCallback::shouldScrollTopControls(const FloatSize& delta,
ScrollGranularity granularity) const
{
if (granularity != ScrollByPixel && granularity != ScrollByPrecisePixel)
@@ -53,32 +53,39 @@ bool ViewportScrollCallback::shouldScrollTopControls(const FloatSize& delta,
return delta.height() < 0 || scrollPosition.y() < maxScroll.y();
}
-void ViewportScrollCallback::handleEvent(ScrollState* state)
+bool RootViewportScrollCallback::scrollTopControls(ScrollState& state)
{
- FloatSize delta(state->deltaX(), state->deltaY());
- ScrollGranularity granularity =
- ScrollGranularity(static_cast<int>(state->deltaGranularity()));
- FloatSize remainingDelta = delta;
-
// Scroll top controls.
if (m_topControls) {
- if (state->isBeginning())
+ if (state.isBeginning())
m_topControls->scrollBegin();
- if (shouldScrollTopControls(delta, granularity))
- remainingDelta = m_topControls->scrollBy(delta);
+ FloatSize delta(state.deltaX(), state.deltaY());
+ ScrollGranularity granularity =
+ ScrollGranularity(static_cast<int>(state.deltaGranularity()));
+ if (shouldScrollTopControls(delta, granularity)) {
+ FloatSize remainingDelta = m_topControls->scrollBy(delta);
+ FloatSize consumed = delta - remainingDelta;
+ state.consumeDeltaNative(consumed.width(), consumed.height());
+ return !consumed.isZero();
+ }
}
- bool topControlsConsumedScroll = remainingDelta.height() != delta.height();
+ return false;
+}
- // Scroll the element's scrollable area.
+void RootViewportScrollCallback::handleEvent(ScrollState* state)
+{
+ DCHECK(state);
if (!m_scroller)
return;
- ScrollResult result = m_scroller->userScroll(granularity, remainingDelta);
+ bool topControlsDidScroll = scrollTopControls(*state);
+
+ ScrollResult result = performNativeScroll(*state, *m_scroller);
// We consider top controls movement to be scrolling.
- result.didScrollY |= topControlsConsumedScroll;
+ result.didScrollY |= topControlsDidScroll;
// Handle Overscroll.
if (m_overscrollController) {
@@ -86,17 +93,9 @@ void ViewportScrollCallback::handleEvent(ScrollState* state)
FloatSize velocity(state->velocityX(), state->velocityY());
m_overscrollController->handleOverscroll(result, position, velocity);
}
-
- // The viewport consumes everything.
- // TODO(bokan): This isn't actually consuming everything but doing so breaks
- // the main thread pull-to-refresh action. I need to figure out where that
- // gets activated. crbug.com/607210.
- state->consumeDeltaNative(
- state->deltaX() - result.unusedScrollDeltaX,
- state->deltaY() - result.unusedScrollDeltaY);
}
-void ViewportScrollCallback::setScroller(ScrollableArea* scroller)
+void RootViewportScrollCallback::setScroller(ScrollableArea* scroller)
{
m_scroller = scroller;
}

Powered by Google App Engine
This is Rietveld 408576698