From 87a082c5137a63dedb3fe5b1f48f75dcd1fd780c Mon Sep 17 00:00:00 2001 From: "bokan@chromium.org" Date: Fri, 28 Mar 2014 11:24:14 +0000 Subject: [PATCH] Removed pinch viewport scroll offset distribution The associated change in Blink makes the pinch viewport a proper ScrollableArea meaning the normal path for synchronizing layer scroll offsets is used. This is a 2 sided patch, the other CL: https://codereview.chromium.org/199253002/ BUG=349941 Review URL: https://codereview.chromium.org/210543002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@260105 0039d316-1c4b-4281-b951-d872f2087c98 --- cc/cc_tests.gyp | 1 - cc/layers/layer.cc | 5 - cc/trees/layer_tree_host.cc | 44 ------- cc/trees/layer_tree_host.h | 3 - .../layer_tree_host_unittest_pinch_zoom.cc | 122 ------------------ 5 files changed, 175 deletions(-) delete mode 100644 cc/trees/layer_tree_host_unittest_pinch_zoom.cc diff --git a/cc/cc_tests.gyp b/cc/cc_tests.gyp index 14696e7a03a2e1..39528df81080da 100644 --- a/cc/cc_tests.gyp +++ b/cc/cc_tests.gyp @@ -103,7 +103,6 @@ 'trees/layer_tree_host_unittest_delegated.cc', 'trees/layer_tree_host_unittest_occlusion.cc', 'trees/layer_tree_host_unittest_picture.cc', - 'trees/layer_tree_host_unittest_pinch_zoom.cc', 'trees/layer_tree_host_unittest_scroll.cc', 'trees/layer_tree_host_unittest_video.cc', 'trees/occlusion_tracker_unittest.cc', diff --git a/cc/layers/layer.cc b/cc/layers/layer.cc index d016571e9094b6..44c71e5f409e06 100644 --- a/cc/layers/layer.cc +++ b/cc/layers/layer.cc @@ -674,11 +674,6 @@ void Layer::RemoveClipChild(Layer* child) { void Layer::SetScrollOffset(gfx::Vector2d scroll_offset) { DCHECK(IsPropertyChangeAllowed()); - if (layer_tree_host()) { - scroll_offset = layer_tree_host()->DistributeScrollOffsetToViewports( - scroll_offset, this); - } - if (scroll_offset_ == scroll_offset) return; scroll_offset_ = scroll_offset; diff --git a/cc/trees/layer_tree_host.cc b/cc/trees/layer_tree_host.cc index f4bfada437edcb..21772804c95e0b 100644 --- a/cc/trees/layer_tree_host.cc +++ b/cc/trees/layer_tree_host.cc @@ -1059,50 +1059,6 @@ void LayerTreeHost::ApplyScrollAndScale(const ScrollAndScaleSet& info) { } } -gfx::Vector2d LayerTreeHost::DistributeScrollOffsetToViewports( - const gfx::Vector2d offset, - Layer* layer) { - DCHECK(layer); - if (layer != outer_viewport_scroll_layer_.get()) - return offset; - - gfx::Vector2d inner_viewport_offset = - inner_viewport_scroll_layer_->scroll_offset(); - gfx::Vector2d outer_viewport_offset = - outer_viewport_scroll_layer_->scroll_offset(); - - if (offset == inner_viewport_offset + outer_viewport_offset) { - // In this case, nothing should change, so we just return to the outer - // viewport the offset is already has. - return outer_viewport_offset; - } - - // In the spirit of document-scrolls-first, we always want any change to - // go to the outer viewport first. - gfx::Vector2d max_outer_viewport_scroll_offset = - outer_viewport_scroll_layer_->MaxScrollOffset(); - gfx::Vector2d max_inner_viewport_scroll_offset = - inner_viewport_scroll_layer_->MaxScrollOffset(); - - // TODO(bokan): This trips on zoom-out due to how Blink orders scale-scroll. - // Disabled until that's sorted out: crbug.com/336574 - // gfx::Vector2d total_max_scroll_offset = - // max_outer_viewport_scroll_offset + max_inner_viewport_scroll_offset; - // DCHECK(total_max_scroll_offset.x() >= offset.x() && - // total_max_scroll_offset.y() >= offset.y()); - - outer_viewport_offset = offset - inner_viewport_offset; - outer_viewport_offset.SetToMin(max_outer_viewport_scroll_offset); - outer_viewport_offset.SetToMax(gfx::Vector2d()); - - inner_viewport_offset = offset - outer_viewport_offset; - inner_viewport_offset.SetToMin(max_inner_viewport_scroll_offset); - inner_viewport_offset.SetToMax(gfx::Vector2d()); - inner_viewport_scroll_layer_->SetScrollOffset(inner_viewport_offset); - - return outer_viewport_offset; -} - void LayerTreeHost::StartRateLimiter() { if (animating_) return; diff --git a/cc/trees/layer_tree_host.h b/cc/trees/layer_tree_host.h index 4564584b9d9e49..98ac83d13b154f 100644 --- a/cc/trees/layer_tree_host.h +++ b/cc/trees/layer_tree_host.h @@ -239,9 +239,6 @@ class CC_EXPORT LayerTreeHost { base::TimeDelta duration); void ApplyScrollAndScale(const ScrollAndScaleSet& info); - gfx::Vector2d DistributeScrollOffsetToViewports(const gfx::Vector2d offset, - Layer* layer); - void SetImplTransform(const gfx::Transform& transform); // Virtual for tests. diff --git a/cc/trees/layer_tree_host_unittest_pinch_zoom.cc b/cc/trees/layer_tree_host_unittest_pinch_zoom.cc deleted file mode 100644 index a77cbdccb9febd..00000000000000 --- a/cc/trees/layer_tree_host_unittest_pinch_zoom.cc +++ /dev/null @@ -1,122 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "cc/trees/layer_tree_host.h" - -#include "base/memory/scoped_ptr.h" -#include "cc/layers/layer.h" -#include "cc/test/geometry_test_utils.h" -#include "cc/test/layer_tree_test.h" -#include "testing/gmock/include/gmock/gmock.h" -#include "testing/gtest/include/gtest/gtest.h" - -using gfx::Vector2d; - -namespace cc { -namespace { - -class LayerTreeHostPinchZoomTest : public LayerTreeTest {}; - -// Ensure that the DistributeScrollOffsetToViewports() method of LayerTreeHost -// does not set values outside the scroll offset max. -class LayerTreeHostPinchZoomTestDistributeScrollOffsetToViewports - : public LayerTreeHostPinchZoomTest { - public: - // Sets up a 2X scale resulting in the following viewport configuration: - // +------------------------------------------------+ - // | | | | - // | | | | - // | | | | - // | InnerClip |5px | | - // | | | | - // | | |10px | - // |--------------+ | | - // | 5px | | - // | | | 20px - // | Inner Scroll/Outer Clip | | - // | | | - // |-----------------------------+ | - // | 10px | - // | | - // | | - // | Outer Scroll Layer | - // | | - // | | - // +------------------------------------------------+ - // 20px - // - virtual void SetupTree() OVERRIDE { - scoped_refptr inner_viewport_clip_layer = Layer::Create(); - scoped_refptr page_scale_layer = Layer::Create(); - scoped_refptr inner_viewport_scroll_layer = Layer::Create(); - scoped_refptr outer_viewport_clip_layer = Layer::Create(); - scoped_refptr outer_viewport_scroll_layer = Layer::Create(); - - inner_viewport_scroll_layer->SetScrollClipLayerId( - inner_viewport_clip_layer->id()); - inner_viewport_scroll_layer->SetUserScrollable(true, true); - - inner_viewport_clip_layer->AddChild(page_scale_layer); - page_scale_layer->AddChild(inner_viewport_scroll_layer); - - inner_viewport_scroll_layer->AddChild(outer_viewport_clip_layer); - outer_viewport_clip_layer->AddChild(outer_viewport_scroll_layer); - - outer_viewport_scroll_layer->SetScrollClipLayerId( - outer_viewport_clip_layer->id()); - outer_viewport_scroll_layer->SetUserScrollable(true, true); - - layer_tree_host()->RegisterViewportLayers(page_scale_layer, - inner_viewport_scroll_layer, - outer_viewport_scroll_layer); - - inner_viewport_clip_layer->SetBounds(gfx::Size(10, 10)); - outer_viewport_clip_layer->SetAnchorPoint(gfx::PointF()); - outer_viewport_clip_layer->SetBounds(gfx::Size(10, 10)); - - layer_tree_host()->SetRootLayer(inner_viewport_clip_layer); - - inner_viewport_scroll_layer->SetBounds(gfx::Size(10, 10)); - outer_viewport_scroll_layer->SetBounds(gfx::Size(20, 20)); - layer_tree_host()->SetPageScaleFactorAndLimits(2.0f, 1.0f, 5.0f); - - // Sanity check - EXPECT_VECTOR_EQ(Vector2d(5, 5), - inner_viewport_scroll_layer->MaxScrollOffset()); - EXPECT_VECTOR_EQ(Vector2d(10, 10), - outer_viewport_scroll_layer->MaxScrollOffset()); - EXPECT_VECTOR_EQ(Vector2d(0, 0), - inner_viewport_scroll_layer->scroll_offset()); - EXPECT_VECTOR_EQ(Vector2d(0, 0), - outer_viewport_scroll_layer->scroll_offset()); - } - - virtual void BeginTest() OVERRIDE { - Layer *inner = layer_tree_host()->inner_viewport_scroll_layer(); - Layer *outer = layer_tree_host()->outer_viewport_scroll_layer(); - - // Try to scroll beyond offset minium - gfx::Vector2d offset(-20, -20); - outer->SetScrollOffset(offset); - EXPECT_VECTOR_EQ(Vector2d(0, 0), inner->scroll_offset()); - EXPECT_VECTOR_EQ(Vector2d(0, 0), outer->scroll_offset()); - - // Try to scroll beyond offset maximum - offset = gfx::Vector2d(20, 20); - outer->SetScrollOffset(offset); - EXPECT_VECTOR_EQ(Vector2d(5, 5), inner->scroll_offset()); - EXPECT_VECTOR_EQ(Vector2d(10, 10), outer->scroll_offset()); - - EndTest(); - } - - virtual void AfterTest() OVERRIDE {} -}; - -TEST_F(LayerTreeHostPinchZoomTestDistributeScrollOffsetToViewports, Test) { - RunTest(true, false, false); -} - -} // namespace -} // namespace cc