OLD | NEW |
| (Empty) |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "cc/trees/layer_tree_host.h" | |
6 | |
7 #include "base/memory/scoped_ptr.h" | |
8 #include "cc/layers/layer.h" | |
9 #include "cc/test/geometry_test_utils.h" | |
10 #include "cc/test/layer_tree_test.h" | |
11 #include "testing/gmock/include/gmock/gmock.h" | |
12 #include "testing/gtest/include/gtest/gtest.h" | |
13 | |
14 using gfx::Vector2d; | |
15 | |
16 namespace cc { | |
17 namespace { | |
18 | |
19 class LayerTreeHostPinchZoomTest : public LayerTreeTest {}; | |
20 | |
21 // Ensure that the DistributeScrollOffsetToViewports() method of LayerTreeHost | |
22 // does not set values outside the scroll offset max. | |
23 class LayerTreeHostPinchZoomTestDistributeScrollOffsetToViewports | |
24 : public LayerTreeHostPinchZoomTest { | |
25 public: | |
26 // Sets up a 2X scale resulting in the following viewport configuration: | |
27 // +------------------------------------------------+ | |
28 // | | | | | |
29 // | | | | | |
30 // | | | | | |
31 // | InnerClip |5px | | | |
32 // | | | | | |
33 // | | |10px | | |
34 // |--------------+ | | | |
35 // | 5px | | | |
36 // | | | 20px | |
37 // | Inner Scroll/Outer Clip | | | |
38 // | | | | |
39 // |-----------------------------+ | | |
40 // | 10px | | |
41 // | | | |
42 // | | | |
43 // | Outer Scroll Layer | | |
44 // | | | |
45 // | | | |
46 // +------------------------------------------------+ | |
47 // 20px | |
48 // | |
49 virtual void SetupTree() OVERRIDE { | |
50 scoped_refptr<Layer> inner_viewport_clip_layer = Layer::Create(); | |
51 scoped_refptr<Layer> page_scale_layer = Layer::Create(); | |
52 scoped_refptr<Layer> inner_viewport_scroll_layer = Layer::Create(); | |
53 scoped_refptr<Layer> outer_viewport_clip_layer = Layer::Create(); | |
54 scoped_refptr<Layer> outer_viewport_scroll_layer = Layer::Create(); | |
55 | |
56 inner_viewport_scroll_layer->SetScrollClipLayerId( | |
57 inner_viewport_clip_layer->id()); | |
58 inner_viewport_scroll_layer->SetUserScrollable(true, true); | |
59 | |
60 inner_viewport_clip_layer->AddChild(page_scale_layer); | |
61 page_scale_layer->AddChild(inner_viewport_scroll_layer); | |
62 | |
63 inner_viewport_scroll_layer->AddChild(outer_viewport_clip_layer); | |
64 outer_viewport_clip_layer->AddChild(outer_viewport_scroll_layer); | |
65 | |
66 outer_viewport_scroll_layer->SetScrollClipLayerId( | |
67 outer_viewport_clip_layer->id()); | |
68 outer_viewport_scroll_layer->SetUserScrollable(true, true); | |
69 | |
70 layer_tree_host()->RegisterViewportLayers(page_scale_layer, | |
71 inner_viewport_scroll_layer, | |
72 outer_viewport_scroll_layer); | |
73 | |
74 inner_viewport_clip_layer->SetBounds(gfx::Size(10, 10)); | |
75 outer_viewport_clip_layer->SetAnchorPoint(gfx::PointF()); | |
76 outer_viewport_clip_layer->SetBounds(gfx::Size(10, 10)); | |
77 | |
78 layer_tree_host()->SetRootLayer(inner_viewport_clip_layer); | |
79 | |
80 inner_viewport_scroll_layer->SetBounds(gfx::Size(10, 10)); | |
81 outer_viewport_scroll_layer->SetBounds(gfx::Size(20, 20)); | |
82 layer_tree_host()->SetPageScaleFactorAndLimits(2.0f, 1.0f, 5.0f); | |
83 | |
84 // Sanity check | |
85 EXPECT_VECTOR_EQ(Vector2d(5, 5), | |
86 inner_viewport_scroll_layer->MaxScrollOffset()); | |
87 EXPECT_VECTOR_EQ(Vector2d(10, 10), | |
88 outer_viewport_scroll_layer->MaxScrollOffset()); | |
89 EXPECT_VECTOR_EQ(Vector2d(0, 0), | |
90 inner_viewport_scroll_layer->scroll_offset()); | |
91 EXPECT_VECTOR_EQ(Vector2d(0, 0), | |
92 outer_viewport_scroll_layer->scroll_offset()); | |
93 } | |
94 | |
95 virtual void BeginTest() OVERRIDE { | |
96 Layer *inner = layer_tree_host()->inner_viewport_scroll_layer(); | |
97 Layer *outer = layer_tree_host()->outer_viewport_scroll_layer(); | |
98 | |
99 // Try to scroll beyond offset minium | |
100 gfx::Vector2d offset(-20, -20); | |
101 outer->SetScrollOffset(offset); | |
102 EXPECT_VECTOR_EQ(Vector2d(0, 0), inner->scroll_offset()); | |
103 EXPECT_VECTOR_EQ(Vector2d(0, 0), outer->scroll_offset()); | |
104 | |
105 // Try to scroll beyond offset maximum | |
106 offset = gfx::Vector2d(20, 20); | |
107 outer->SetScrollOffset(offset); | |
108 EXPECT_VECTOR_EQ(Vector2d(5, 5), inner->scroll_offset()); | |
109 EXPECT_VECTOR_EQ(Vector2d(10, 10), outer->scroll_offset()); | |
110 | |
111 EndTest(); | |
112 } | |
113 | |
114 virtual void AfterTest() OVERRIDE {} | |
115 }; | |
116 | |
117 TEST_F(LayerTreeHostPinchZoomTestDistributeScrollOffsetToViewports, Test) { | |
118 RunTest(true, false, false); | |
119 } | |
120 | |
121 } // namespace | |
122 } // namespace cc | |
OLD | NEW |