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

Unified Diff: cc/layer_tree_host_impl.cc

Issue 11975007: Implement one-page-at-a-time mousewheel scrolling in the impl thread. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 11 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: cc/layer_tree_host_impl.cc
diff --git a/cc/layer_tree_host_impl.cc b/cc/layer_tree_host_impl.cc
index cddbec75d02a5a56574fb679414dd5b457445962..a7e6685a03357e6fa4267ee59bb67e25d5240e07 100644
--- a/cc/layer_tree_host_impl.cc
+++ b/cc/layer_tree_host_impl.cc
@@ -1255,7 +1255,8 @@ static gfx::Vector2dF scrollLayerWithLocalDelta(LayerImpl& layerImpl, gfx::Vecto
}
bool LayerTreeHostImpl::scrollBy(const gfx::Point& viewportPoint,
- const gfx::Vector2d& scrollDelta)
+ const gfx::Vector2d& scrollDelta,
+ bool scrollByPage)
{
TRACE_EVENT0("cc", "LayerTreeHostImpl::scrollBy");
if (!currentlyScrollingLayer())
@@ -1272,6 +1273,10 @@ bool LayerTreeHostImpl::scrollBy(const gfx::Point& viewportPoint,
if (m_settings.pageScalePinchZoomEnabled && layerImpl == rootScrollLayer())
viewport = &m_pinchZoomViewport;
gfx::Vector2dF appliedDelta;
+ gfx::Size visibleScrollArea = layerImpl->visibleScrollArea();
+ if (scrollByPage)
+ pendingDelta = gfx::ScaleVector2d(pendingDelta, visibleScrollArea.width(), visibleScrollArea.height());
jamesr 2013/03/06 23:50:37 This seems a bit strange. scrollByPage is only va
+
if (m_topControlsManager && layerImpl == rootScrollLayer())
pendingDelta = m_topControlsManager->ScrollBy(pendingDelta);
@@ -1281,6 +1286,13 @@ bool LayerTreeHostImpl::scrollBy(const gfx::Point& viewportPoint,
} else
appliedDelta = scrollLayerWithLocalDelta(*layerImpl, pendingDelta);
+ if (scrollByPage) {
+ if (visibleScrollArea.width() != 0.0)
+ appliedDelta.set_x(appliedDelta.x() / visibleScrollArea.width());
+ if (visibleScrollArea.height() != 0.0)
+ appliedDelta.set_y(appliedDelta.y() / visibleScrollArea.height());
+ }
+
// If the layer wasn't able to move, try the next one in the hierarchy.
float moveThresholdSquared = 0.1f * 0.1f;
if (appliedDelta.LengthSquared() < moveThresholdSquared)

Powered by Google App Engine
This is Rietveld 408576698