OLD | NEW |
1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "cc/trees/layer_tree_host_impl.h" | 5 #include "cc/trees/layer_tree_host_impl.h" |
6 | 6 |
7 #include <cmath> | 7 #include <cmath> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
(...skipping 5830 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5841 } | 5841 } |
5842 }; | 5842 }; |
5843 | 5843 |
5844 TEST_F(LayerTreeHostImplWithTopControlsTest, NoIdleAnimations) { | 5844 TEST_F(LayerTreeHostImplWithTopControlsTest, NoIdleAnimations) { |
5845 SetupScrollAndContentsLayers(gfx::Size(100, 100)) | 5845 SetupScrollAndContentsLayers(gfx::Size(100, 100)) |
5846 ->SetScrollOffset(gfx::Vector2d(0, 10)); | 5846 ->SetScrollOffset(gfx::Vector2d(0, 10)); |
5847 host_impl_->Animate(base::TimeTicks(), base::Time()); | 5847 host_impl_->Animate(base::TimeTicks(), base::Time()); |
5848 EXPECT_FALSE(did_request_redraw_); | 5848 EXPECT_FALSE(did_request_redraw_); |
5849 } | 5849 } |
5850 | 5850 |
| 5851 class LayerTreeHostImplVirtualViewportTest : public LayerTreeHostImplTest { |
| 5852 public: |
| 5853 void SetupVirtualViewportLayers(const gfx::Size& content_size, |
| 5854 const gfx::Size& outer_viewport, |
| 5855 const gfx::Size& inner_viewport) { |
| 5856 LayerTreeImpl* layer_tree_impl = host_impl_->active_tree(); |
| 5857 const int kOuterViewportClipLayerId = 6; |
| 5858 const int kOuterViewportScrollLayerId = 7; |
| 5859 const int kInnerViewportScrollLayerId = 2; |
| 5860 const int kInnerViewportClipLayerId = 4; |
| 5861 const int kPageScaleLayerId = 5; |
| 5862 |
| 5863 scoped_ptr<LayerImpl> inner_scroll = |
| 5864 LayerImpl::Create(layer_tree_impl, kInnerViewportScrollLayerId); |
| 5865 inner_scroll->SetIsContainerForFixedPositionLayers(true); |
| 5866 inner_scroll->SetScrollOffset(gfx::Vector2d()); |
| 5867 |
| 5868 scoped_ptr<LayerImpl> inner_clip = |
| 5869 LayerImpl::Create(layer_tree_impl, kInnerViewportClipLayerId); |
| 5870 inner_clip->SetBounds(inner_viewport); |
| 5871 |
| 5872 scoped_ptr<LayerImpl> page_scale = |
| 5873 LayerImpl::Create(layer_tree_impl, kPageScaleLayerId); |
| 5874 |
| 5875 inner_scroll->SetScrollClipLayer(inner_clip->id()); |
| 5876 inner_scroll->SetBounds(outer_viewport); |
| 5877 inner_scroll->SetContentBounds(outer_viewport); |
| 5878 inner_scroll->SetPosition(gfx::PointF()); |
| 5879 inner_scroll->SetAnchorPoint(gfx::PointF()); |
| 5880 |
| 5881 scoped_ptr<LayerImpl> outer_clip = |
| 5882 LayerImpl::Create(layer_tree_impl, kOuterViewportClipLayerId); |
| 5883 outer_clip->SetBounds(outer_viewport); |
| 5884 outer_clip->SetIsContainerForFixedPositionLayers(true); |
| 5885 |
| 5886 scoped_ptr<LayerImpl> outer_scroll = |
| 5887 LayerImpl::Create(layer_tree_impl, kOuterViewportScrollLayerId); |
| 5888 outer_scroll->SetScrollClipLayer(outer_clip->id()); |
| 5889 outer_scroll->SetScrollOffset(gfx::Vector2d()); |
| 5890 outer_scroll->SetBounds(content_size); |
| 5891 outer_scroll->SetContentBounds(content_size); |
| 5892 outer_scroll->SetPosition(gfx::PointF()); |
| 5893 outer_scroll->SetAnchorPoint(gfx::PointF()); |
| 5894 |
| 5895 scoped_ptr<LayerImpl> contents = |
| 5896 LayerImpl::Create(layer_tree_impl, 8); |
| 5897 contents->SetDrawsContent(true); |
| 5898 contents->SetBounds(content_size); |
| 5899 contents->SetContentBounds(content_size); |
| 5900 contents->SetPosition(gfx::PointF()); |
| 5901 contents->SetAnchorPoint(gfx::PointF()); |
| 5902 |
| 5903 outer_scroll->AddChild(contents.Pass()); |
| 5904 outer_clip->AddChild(outer_scroll.Pass()); |
| 5905 inner_scroll->AddChild(outer_clip.Pass()); |
| 5906 page_scale->AddChild(inner_scroll.Pass()); |
| 5907 inner_clip->AddChild(page_scale.Pass()); |
| 5908 |
| 5909 layer_tree_impl->SetRootLayer(inner_clip.Pass()); |
| 5910 layer_tree_impl->SetViewportLayersFromIds(kPageScaleLayerId, |
| 5911 kInnerViewportScrollLayerId, kOuterViewportScrollLayerId); |
| 5912 |
| 5913 host_impl_->active_tree()->DidBecomeActive(); |
| 5914 } |
| 5915 }; |
| 5916 |
| 5917 TEST_F(LayerTreeHostImplVirtualViewportTest, FlingScrollBubblesToInner) { |
| 5918 gfx::Size content_size = gfx::Size(100, 160); |
| 5919 gfx::Size outer_viewport = gfx::Size(50, 80); |
| 5920 gfx::Size inner_viewport = gfx::Size(25, 40); |
| 5921 |
| 5922 SetupVirtualViewportLayers(content_size, outer_viewport, inner_viewport); |
| 5923 |
| 5924 LayerImpl* outer_scroll = host_impl_->OuterViewportScrollLayer(); |
| 5925 LayerImpl* inner_scroll = host_impl_->InnerViewportScrollLayer(); |
| 5926 DrawFrame(); |
| 5927 { |
| 5928 gfx::Vector2dF inner_expected; |
| 5929 gfx::Vector2dF outer_expected; |
| 5930 EXPECT_VECTOR_EQ(inner_expected, inner_scroll->TotalScrollOffset()); |
| 5931 EXPECT_VECTOR_EQ(outer_expected, outer_scroll->TotalScrollOffset()); |
| 5932 |
| 5933 // Make sure the fling goes to the outer viewport first |
| 5934 EXPECT_EQ(InputHandler::ScrollStarted, |
| 5935 host_impl_->ScrollBegin(gfx::Point(), InputHandler::Gesture)); |
| 5936 EXPECT_EQ(InputHandler::ScrollStarted, host_impl_->FlingScrollBegin()); |
| 5937 |
| 5938 gfx::Vector2d scroll_delta(inner_viewport.width(), inner_viewport.height()); |
| 5939 host_impl_->ScrollBy(gfx::Point(), scroll_delta); |
| 5940 outer_expected += gfx::Vector2dF(scroll_delta.x(), scroll_delta.y()); |
| 5941 |
| 5942 host_impl_->ScrollEnd(); |
| 5943 |
| 5944 EXPECT_VECTOR_EQ(inner_expected, inner_scroll->TotalScrollOffset()); |
| 5945 EXPECT_VECTOR_EQ(outer_expected, outer_scroll->TotalScrollOffset()); |
| 5946 |
| 5947 // Fling past the outer viewport boundry, make sure inner viewport scrolls. |
| 5948 EXPECT_EQ(InputHandler::ScrollStarted, |
| 5949 host_impl_->ScrollBegin(gfx::Point(), InputHandler::Gesture)); |
| 5950 EXPECT_EQ(InputHandler::ScrollStarted, host_impl_->FlingScrollBegin()); |
| 5951 |
| 5952 host_impl_->ScrollBy(gfx::Point(), scroll_delta); |
| 5953 outer_expected += gfx::Vector2dF(scroll_delta.x(), scroll_delta.y()); |
| 5954 |
| 5955 host_impl_->ScrollBy(gfx::Point(), scroll_delta); |
| 5956 inner_expected += gfx::Vector2dF(scroll_delta.x(), scroll_delta.y()); |
| 5957 |
| 5958 host_impl_->ScrollEnd(); |
| 5959 |
| 5960 EXPECT_VECTOR_EQ(inner_expected, inner_scroll->TotalScrollOffset()); |
| 5961 EXPECT_VECTOR_EQ(outer_expected, outer_scroll->TotalScrollOffset()); |
| 5962 } |
| 5963 } |
| 5964 |
5851 } // namespace | 5965 } // namespace |
5852 } // namespace cc | 5966 } // namespace cc |
OLD | NEW |