OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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 "base/containers/hash_tables.h" | 5 #include "base/containers/hash_tables.h" |
6 #include "cc/animation/scrollbar_animation_controller.h" | 6 #include "cc/animation/scrollbar_animation_controller.h" |
7 #include "cc/layers/append_quads_data.h" | 7 #include "cc/layers/append_quads_data.h" |
8 #include "cc/layers/painted_scrollbar_layer.h" | 8 #include "cc/layers/painted_scrollbar_layer.h" |
9 #include "cc/layers/painted_scrollbar_layer_impl.h" | 9 #include "cc/layers/painted_scrollbar_layer_impl.h" |
10 #include "cc/layers/scrollbar_layer_interface.h" | 10 #include "cc/layers/scrollbar_layer_interface.h" |
(...skipping 27 matching lines...) Expand all Loading... |
38 bool reverse_order, | 38 bool reverse_order, |
39 bool use_solid_color_scrollbar, | 39 bool use_solid_color_scrollbar, |
40 int thumb_thickness) { | 40 int thumb_thickness) { |
41 scoped_refptr<Layer> layer_tree_root = Layer::Create(); | 41 scoped_refptr<Layer> layer_tree_root = Layer::Create(); |
42 scoped_refptr<Layer> child1 = Layer::Create(); | 42 scoped_refptr<Layer> child1 = Layer::Create(); |
43 scoped_refptr<Layer> child2; | 43 scoped_refptr<Layer> child2; |
44 if (use_solid_color_scrollbar) { | 44 if (use_solid_color_scrollbar) { |
45 const bool kIsLeftSideVerticalScrollbar = false; | 45 const bool kIsLeftSideVerticalScrollbar = false; |
46 child2 = SolidColorScrollbarLayer::Create( | 46 child2 = SolidColorScrollbarLayer::Create( |
47 scrollbar->Orientation(), thumb_thickness, | 47 scrollbar->Orientation(), thumb_thickness, |
48 kIsLeftSideVerticalScrollbar, child1.get()); | 48 kIsLeftSideVerticalScrollbar, child1->id()); |
49 } else { | 49 } else { |
50 child2 = PaintedScrollbarLayer::Create(scrollbar.Pass(), child1.get()); | 50 child2 = PaintedScrollbarLayer::Create(scrollbar.Pass(), child1->id()); |
51 } | 51 } |
52 layer_tree_root->AddChild(child1); | 52 layer_tree_root->AddChild(child1); |
53 layer_tree_root->InsertChild(child2, reverse_order ? 0 : 1); | 53 layer_tree_root->InsertChild(child2, reverse_order ? 0 : 1); |
54 host->SetRootLayer(layer_tree_root); | 54 host->SetRootLayer(layer_tree_root); |
55 return host->CommitAndCreateLayerImplTree(); | 55 return host->CommitAndCreateLayerImplTree(); |
56 } | 56 } |
57 | 57 |
58 TEST(ScrollbarLayerTest, ResolveScrollLayerPointer) { | 58 TEST(ScrollbarLayerTest, ResolveScrollLayerPointer) { |
59 scoped_ptr<FakeLayerTreeHost> host = FakeLayerTreeHost::Create(); | 59 scoped_ptr<FakeLayerTreeHost> host = FakeLayerTreeHost::Create(); |
60 scoped_ptr<Scrollbar> scrollbar(new FakeScrollbar); | 60 scoped_ptr<Scrollbar> scrollbar(new FakeScrollbar); |
61 LayerImpl* layer_impl_tree_root = LayerImplForScrollAreaAndScrollbar( | 61 LayerImpl* layer_impl_tree_root = LayerImplForScrollAreaAndScrollbar( |
62 host.get(), scrollbar.Pass(), false, false, 0); | 62 host.get(), scrollbar.Pass(), false, false, 0); |
63 | 63 |
64 LayerImpl* cc_child1 = layer_impl_tree_root->children()[0]; | 64 LayerImpl* cc_child1 = layer_impl_tree_root->children()[0]; |
65 PaintedScrollbarLayerImpl* cc_child2 = | 65 PaintedScrollbarLayerImpl* cc_child2 = |
66 static_cast<PaintedScrollbarLayerImpl*>( | 66 static_cast<PaintedScrollbarLayerImpl*>( |
67 layer_impl_tree_root->children()[1]); | 67 layer_impl_tree_root->children()[1]); |
68 | 68 |
69 EXPECT_EQ(cc_child1->scrollbars()->size(), 1UL); | 69 EXPECT_EQ(cc_child1->horizontal_scrollbar_layer(), cc_child2); |
70 EXPECT_EQ(*(cc_child1->scrollbars()->begin()), cc_child2); | |
71 } | 70 } |
72 | 71 |
73 TEST(ScrollbarLayerTest, ResolveScrollLayerPointer_ReverseOrder) { | 72 TEST(ScrollbarLayerTest, ResolveScrollLayerPointer_ReverseOrder) { |
74 scoped_ptr<FakeLayerTreeHost> host = FakeLayerTreeHost::Create(); | 73 scoped_ptr<FakeLayerTreeHost> host = FakeLayerTreeHost::Create(); |
75 scoped_ptr<Scrollbar> scrollbar(new FakeScrollbar); | 74 scoped_ptr<Scrollbar> scrollbar(new FakeScrollbar); |
76 LayerImpl* layer_impl_tree_root = LayerImplForScrollAreaAndScrollbar( | 75 LayerImpl* layer_impl_tree_root = LayerImplForScrollAreaAndScrollbar( |
77 host.get(), scrollbar.Pass(), true, false, 0); | 76 host.get(), scrollbar.Pass(), true, false, 0); |
78 | 77 |
79 PaintedScrollbarLayerImpl* cc_child1 = | 78 PaintedScrollbarLayerImpl* cc_child1 = |
80 static_cast<PaintedScrollbarLayerImpl*>( | 79 static_cast<PaintedScrollbarLayerImpl*>( |
81 layer_impl_tree_root->children()[0]); | 80 layer_impl_tree_root->children()[0]); |
82 LayerImpl* cc_child2 = layer_impl_tree_root->children()[1]; | 81 LayerImpl* cc_child2 = layer_impl_tree_root->children()[1]; |
83 | 82 |
84 EXPECT_EQ(cc_child2->scrollbars()->size(), 1UL); | 83 EXPECT_EQ(cc_child2->horizontal_scrollbar_layer(), cc_child1); |
85 EXPECT_EQ(*(cc_child2->scrollbars()->begin()), cc_child1); | |
86 } | 84 } |
87 | 85 |
88 TEST(ScrollbarLayerTest, ShouldScrollNonOverlayOnMainThread) { | 86 TEST(ScrollbarLayerTest, ShouldScrollNonOverlayOnMainThread) { |
89 scoped_ptr<FakeLayerTreeHost> host = FakeLayerTreeHost::Create(); | 87 scoped_ptr<FakeLayerTreeHost> host = FakeLayerTreeHost::Create(); |
90 | 88 |
91 // Create and attach a non-overlay scrollbar. | 89 // Create and attach a non-overlay scrollbar. |
92 scoped_ptr<Scrollbar> scrollbar(new FakeScrollbar); | 90 scoped_ptr<Scrollbar> scrollbar(new FakeScrollbar); |
93 LayerImpl* layer_impl_tree_root = LayerImplForScrollAreaAndScrollbar( | 91 LayerImpl* layer_impl_tree_root = LayerImplForScrollAreaAndScrollbar( |
94 host.get(), scrollbar.Pass(), false, false, 0); | 92 host.get(), scrollbar.Pass(), false, false, 0); |
95 PaintedScrollbarLayerImpl* scrollbar_layer_impl = | 93 PaintedScrollbarLayerImpl* scrollbar_layer_impl = |
(...skipping 20 matching lines...) Expand all Loading... |
116 EXPECT_EQ(InputHandler::ScrollIgnored, | 114 EXPECT_EQ(InputHandler::ScrollIgnored, |
117 scrollbar_layer_impl->TryScroll(gfx::Point(0, 0), | 115 scrollbar_layer_impl->TryScroll(gfx::Point(0, 0), |
118 InputHandler::Gesture)); | 116 InputHandler::Gesture)); |
119 } | 117 } |
120 | 118 |
121 TEST(PaintedScrollbarLayerTest, ScrollOffsetSynchronization) { | 119 TEST(PaintedScrollbarLayerTest, ScrollOffsetSynchronization) { |
122 scoped_ptr<FakeLayerTreeHost> host = FakeLayerTreeHost::Create(); | 120 scoped_ptr<FakeLayerTreeHost> host = FakeLayerTreeHost::Create(); |
123 | 121 |
124 scoped_ptr<Scrollbar> scrollbar(new FakeScrollbar); | 122 scoped_ptr<Scrollbar> scrollbar(new FakeScrollbar); |
125 scoped_refptr<Layer> layer_tree_root = Layer::Create(); | 123 scoped_refptr<Layer> layer_tree_root = Layer::Create(); |
126 scoped_refptr<Layer> scroll_layer = Layer::Create(); | |
127 scoped_refptr<Layer> content_layer = Layer::Create(); | 124 scoped_refptr<Layer> content_layer = Layer::Create(); |
128 scoped_refptr<Layer> scrollbar_layer = | 125 scoped_refptr<Layer> scrollbar_layer = |
129 PaintedScrollbarLayer::Create(scrollbar.Pass(), layer_tree_root.get()); | 126 PaintedScrollbarLayer::Create(scrollbar.Pass(), layer_tree_root->id()); |
130 | 127 |
131 // Choose bounds to give max_scroll_offset = (30, 50). | 128 layer_tree_root->SetScrollable(true); |
132 layer_tree_root->SetBounds(gfx::Size(70, 150)); | 129 layer_tree_root->SetScrollOffset(gfx::Vector2d(10, 20)); |
133 scroll_layer->SetScrollClipLayer(layer_tree_root.get()); | 130 layer_tree_root->SetMaxScrollOffset(gfx::Vector2d(30, 50)); |
134 scroll_layer->SetScrollOffset(gfx::Vector2d(10, 20)); | 131 layer_tree_root->SetBounds(gfx::Size(100, 200)); |
135 scroll_layer->SetBounds(gfx::Size(100, 200)); | |
136 content_layer->SetBounds(gfx::Size(100, 200)); | 132 content_layer->SetBounds(gfx::Size(100, 200)); |
137 | 133 |
138 host->SetRootLayer(layer_tree_root); | 134 host->SetRootLayer(layer_tree_root); |
139 layer_tree_root->AddChild(scroll_layer); | 135 layer_tree_root->AddChild(content_layer); |
140 scroll_layer->AddChild(content_layer); | |
141 layer_tree_root->AddChild(scrollbar_layer); | 136 layer_tree_root->AddChild(scrollbar_layer); |
142 scrollbar_layer->ToScrollbarLayer()->SetScrollLayer(scroll_layer); | |
143 scrollbar_layer->ToScrollbarLayer()->SetClipLayer(layer_tree_root); | |
144 | 137 |
145 layer_tree_root->SavePaintProperties(); | 138 layer_tree_root->SavePaintProperties(); |
146 content_layer->SavePaintProperties(); | 139 content_layer->SavePaintProperties(); |
147 | 140 |
148 LayerImpl* layer_impl_tree_root = host->CommitAndCreateLayerImplTree(); | 141 LayerImpl* layer_impl_tree_root = host->CommitAndCreateLayerImplTree(); |
149 | 142 |
150 ScrollbarLayerImplBase* cc_scrollbar_layer = | 143 ScrollbarLayerImplBase* cc_scrollbar_layer = |
151 static_cast<PaintedScrollbarLayerImpl*>( | 144 static_cast<PaintedScrollbarLayerImpl*>( |
152 layer_impl_tree_root->children()[1]); | 145 layer_impl_tree_root->children()[1]); |
153 | 146 |
154 EXPECT_EQ(10.f, cc_scrollbar_layer->current_pos()); | 147 EXPECT_EQ(10.f, cc_scrollbar_layer->current_pos()); |
155 EXPECT_EQ(30, cc_scrollbar_layer->maximum()); | 148 EXPECT_EQ(30, cc_scrollbar_layer->maximum()); |
156 | 149 |
157 layer_tree_root->SetBounds(gfx::Size(700, 1500)); | 150 layer_tree_root->SetScrollOffset(gfx::Vector2d(100, 200)); |
| 151 layer_tree_root->SetMaxScrollOffset(gfx::Vector2d(300, 500)); |
| 152 layer_tree_root->SetBounds(gfx::Size(1000, 2000)); |
158 layer_tree_root->SavePaintProperties(); | 153 layer_tree_root->SavePaintProperties(); |
159 scroll_layer->SetBounds(gfx::Size(1000, 2000)); | |
160 scroll_layer->SetScrollOffset(gfx::Vector2d(100, 200)); | |
161 scroll_layer->SavePaintProperties(); | |
162 content_layer->SetBounds(gfx::Size(1000, 2000)); | 154 content_layer->SetBounds(gfx::Size(1000, 2000)); |
163 content_layer->SavePaintProperties(); | 155 content_layer->SavePaintProperties(); |
164 | 156 |
165 ScrollbarAnimationController* scrollbar_controller = | 157 ScrollbarAnimationController* scrollbar_controller = |
166 layer_impl_tree_root->scrollbar_animation_controller(); | 158 layer_impl_tree_root->scrollbar_animation_controller(); |
167 layer_impl_tree_root = host->CommitAndCreateLayerImplTree(); | 159 layer_impl_tree_root = host->CommitAndCreateLayerImplTree(); |
168 EXPECT_EQ(scrollbar_controller, | 160 EXPECT_EQ(scrollbar_controller, |
169 layer_impl_tree_root->scrollbar_animation_controller()); | 161 layer_impl_tree_root->scrollbar_animation_controller()); |
170 | 162 |
171 EXPECT_EQ(100.f, cc_scrollbar_layer->current_pos()); | 163 EXPECT_EQ(100.f, cc_scrollbar_layer->current_pos()); |
172 EXPECT_EQ(300, cc_scrollbar_layer->maximum()); | 164 EXPECT_EQ(300, cc_scrollbar_layer->maximum()); |
173 | 165 |
174 LayerImpl* scroll_layer_impl = layer_impl_tree_root->children()[0]; | 166 layer_impl_tree_root->ScrollBy(gfx::Vector2d(12, 34)); |
175 scroll_layer_impl->ScrollBy(gfx::Vector2d(12, 34)); | |
176 | 167 |
177 EXPECT_EQ(112.f, cc_scrollbar_layer->current_pos()); | 168 EXPECT_EQ(112.f, cc_scrollbar_layer->current_pos()); |
178 EXPECT_EQ(300, cc_scrollbar_layer->maximum()); | 169 EXPECT_EQ(300, cc_scrollbar_layer->maximum()); |
179 } | 170 } |
180 | 171 |
181 #define UPDATE_AND_EXTRACT_LAYER_POINTERS() \ | |
182 do { \ | |
183 scrollbar_layer->UpdateThumbAndTrackGeometry(); \ | |
184 root_clip_layer_impl = host->CommitAndCreateLayerImplTree(); \ | |
185 root_layer_impl = root_clip_layer_impl->children()[0]; \ | |
186 scrollbar_layer_impl = static_cast<PaintedScrollbarLayerImpl*>( \ | |
187 root_layer_impl->children()[1]); \ | |
188 scrollbar_layer_impl->ScrollbarParametersDidChange(); \ | |
189 } while (false) | |
190 | |
191 TEST(ScrollbarLayerTest, ThumbRect) { | 172 TEST(ScrollbarLayerTest, ThumbRect) { |
192 scoped_ptr<FakeLayerTreeHost> host = FakeLayerTreeHost::Create(); | 173 scoped_ptr<FakeLayerTreeHost> host = FakeLayerTreeHost::Create(); |
193 scoped_refptr<Layer> root_clip_layer = Layer::Create(); | |
194 scoped_refptr<Layer> root_layer = Layer::Create(); | 174 scoped_refptr<Layer> root_layer = Layer::Create(); |
195 scoped_refptr<Layer> content_layer = Layer::Create(); | 175 scoped_refptr<Layer> content_layer = Layer::Create(); |
196 scoped_refptr<FakePaintedScrollbarLayer> scrollbar_layer = | 176 scoped_refptr<FakePaintedScrollbarLayer> scrollbar_layer = |
197 FakePaintedScrollbarLayer::Create(false, true, root_layer.get()); | 177 FakePaintedScrollbarLayer::Create(false, true, root_layer->id()); |
198 | 178 |
199 root_layer->SetScrollClipLayer(root_clip_layer.get()); | 179 root_layer->SetScrollable(true); |
200 // Give the root-clip a size that will result in MaxScrollOffset = (80, 0). | 180 root_layer->SetMaxScrollOffset(gfx::Vector2d(80, 0)); |
201 root_clip_layer->SetBounds(gfx::Size(20, 50)); | |
202 root_layer->SetBounds(gfx::Size(100, 50)); | 181 root_layer->SetBounds(gfx::Size(100, 50)); |
203 content_layer->SetBounds(gfx::Size(100, 50)); | 182 content_layer->SetBounds(gfx::Size(100, 50)); |
204 | 183 |
205 host->SetRootLayer(root_clip_layer); | 184 host->SetRootLayer(root_layer); |
206 root_clip_layer->AddChild(root_layer); | |
207 root_layer->AddChild(content_layer); | 185 root_layer->AddChild(content_layer); |
208 root_layer->AddChild(scrollbar_layer); | 186 root_layer->AddChild(scrollbar_layer); |
209 | 187 |
210 root_layer->SetScrollOffset(gfx::Vector2d(0, 0)); | 188 root_layer->SetScrollOffset(gfx::Vector2d(0, 0)); |
211 scrollbar_layer->SetBounds(gfx::Size(70, 10)); | 189 scrollbar_layer->SetBounds(gfx::Size(70, 10)); |
212 scrollbar_layer->SetScrollLayer(root_layer.get()); | |
213 scrollbar_layer->SetClipLayer(root_clip_layer.get()); | |
214 scrollbar_layer->fake_scrollbar()->set_location(gfx::Point(20, 10)); | 190 scrollbar_layer->fake_scrollbar()->set_location(gfx::Point(20, 10)); |
215 scrollbar_layer->fake_scrollbar()->set_track_rect(gfx::Rect(30, 10, 50, 10)); | 191 scrollbar_layer->fake_scrollbar()->set_track_rect(gfx::Rect(30, 10, 50, 10)); |
216 scrollbar_layer->fake_scrollbar()->set_thumb_thickness(10); | 192 scrollbar_layer->fake_scrollbar()->set_thumb_thickness(10); |
217 scrollbar_layer->fake_scrollbar()->set_thumb_length(4); | 193 scrollbar_layer->fake_scrollbar()->set_thumb_length(4); |
218 scrollbar_layer->UpdateThumbAndTrackGeometry(); | 194 scrollbar_layer->UpdateThumbAndTrackGeometry(); |
219 LayerImpl* root_clip_layer_impl = NULL; | |
220 LayerImpl* root_layer_impl = NULL; | 195 LayerImpl* root_layer_impl = NULL; |
221 PaintedScrollbarLayerImpl* scrollbar_layer_impl = NULL; | 196 PaintedScrollbarLayerImpl* scrollbar_layer_impl = NULL; |
222 | 197 |
223 // Thumb is at the edge of the scrollbar (should be inset to | 198 // Thumb is at the edge of the scrollbar (should be inset to |
224 // the start of the track within the scrollbar layer's | 199 // the start of the track within the scrollbar layer's |
225 // position). | 200 // position). |
226 UPDATE_AND_EXTRACT_LAYER_POINTERS(); | 201 scrollbar_layer->UpdateThumbAndTrackGeometry(); |
| 202 root_layer_impl = host->CommitAndCreateLayerImplTree(); |
| 203 scrollbar_layer_impl = static_cast<PaintedScrollbarLayerImpl*>( |
| 204 root_layer_impl->children()[1]); |
227 EXPECT_EQ(gfx::Rect(10, 0, 4, 10).ToString(), | 205 EXPECT_EQ(gfx::Rect(10, 0, 4, 10).ToString(), |
228 scrollbar_layer_impl->ComputeThumbQuadRect().ToString()); | 206 scrollbar_layer_impl->ComputeThumbQuadRect().ToString()); |
229 | 207 |
230 // Under-scroll (thumb position should clamp and be unchanged). | 208 // Under-scroll (thumb position should clamp and be unchanged). |
231 root_layer->SetScrollOffset(gfx::Vector2d(-5, 0)); | 209 root_layer->SetScrollOffset(gfx::Vector2d(-5, 0)); |
232 | 210 |
233 UPDATE_AND_EXTRACT_LAYER_POINTERS(); | 211 scrollbar_layer->UpdateThumbAndTrackGeometry(); |
| 212 root_layer_impl = host->CommitAndCreateLayerImplTree(); |
| 213 scrollbar_layer_impl = static_cast<PaintedScrollbarLayerImpl*>( |
| 214 root_layer_impl->children()[1]); |
234 EXPECT_EQ(gfx::Rect(10, 0, 4, 10).ToString(), | 215 EXPECT_EQ(gfx::Rect(10, 0, 4, 10).ToString(), |
235 scrollbar_layer_impl->ComputeThumbQuadRect().ToString()); | 216 scrollbar_layer_impl->ComputeThumbQuadRect().ToString()); |
236 | 217 |
237 // Over-scroll (thumb position should clamp on the far side). | 218 // Over-scroll (thumb position should clamp on the far side). |
238 root_layer->SetScrollOffset(gfx::Vector2d(85, 0)); | 219 root_layer->SetScrollOffset(gfx::Vector2d(85, 0)); |
239 | 220 |
240 UPDATE_AND_EXTRACT_LAYER_POINTERS(); | 221 scrollbar_layer->UpdateThumbAndTrackGeometry(); |
| 222 root_layer_impl = host->CommitAndCreateLayerImplTree(); |
| 223 scrollbar_layer_impl = static_cast<PaintedScrollbarLayerImpl*>( |
| 224 root_layer_impl->children()[1]); |
241 EXPECT_EQ(gfx::Rect(56, 0, 4, 10).ToString(), | 225 EXPECT_EQ(gfx::Rect(56, 0, 4, 10).ToString(), |
242 scrollbar_layer_impl->ComputeThumbQuadRect().ToString()); | 226 scrollbar_layer_impl->ComputeThumbQuadRect().ToString()); |
243 | 227 |
244 // Change thumb thickness and length. | 228 // Change thumb thickness and length. |
245 scrollbar_layer->fake_scrollbar()->set_thumb_thickness(4); | 229 scrollbar_layer->fake_scrollbar()->set_thumb_thickness(4); |
246 scrollbar_layer->fake_scrollbar()->set_thumb_length(6); | 230 scrollbar_layer->fake_scrollbar()->set_thumb_length(6); |
247 | 231 |
248 UPDATE_AND_EXTRACT_LAYER_POINTERS(); | 232 scrollbar_layer->UpdateThumbAndTrackGeometry(); |
| 233 root_layer_impl = host->CommitAndCreateLayerImplTree(); |
| 234 scrollbar_layer_impl = static_cast<PaintedScrollbarLayerImpl*>( |
| 235 root_layer_impl->children()[1]); |
249 EXPECT_EQ(gfx::Rect(54, 0, 6, 4).ToString(), | 236 EXPECT_EQ(gfx::Rect(54, 0, 6, 4).ToString(), |
250 scrollbar_layer_impl->ComputeThumbQuadRect().ToString()); | 237 scrollbar_layer_impl->ComputeThumbQuadRect().ToString()); |
251 | 238 |
252 // Shrink the scrollbar layer to cover only the track. | 239 // Shrink the scrollbar layer to cover only the track. |
253 scrollbar_layer->SetBounds(gfx::Size(50, 10)); | 240 scrollbar_layer->SetBounds(gfx::Size(50, 10)); |
254 scrollbar_layer->fake_scrollbar()->set_location(gfx::Point(30, 10)); | 241 scrollbar_layer->fake_scrollbar()->set_location(gfx::Point(30, 10)); |
255 scrollbar_layer->fake_scrollbar()->set_track_rect(gfx::Rect(30, 10, 50, 10)); | 242 scrollbar_layer->fake_scrollbar()->set_track_rect(gfx::Rect(30, 10, 50, 10)); |
256 | 243 |
257 UPDATE_AND_EXTRACT_LAYER_POINTERS(); | 244 scrollbar_layer->UpdateThumbAndTrackGeometry(); |
| 245 root_layer_impl = host->CommitAndCreateLayerImplTree(); |
| 246 scrollbar_layer_impl = static_cast<PaintedScrollbarLayerImpl*>( |
| 247 root_layer_impl->children()[1]); |
258 EXPECT_EQ(gfx::Rect(44, 0, 6, 4).ToString(), | 248 EXPECT_EQ(gfx::Rect(44, 0, 6, 4).ToString(), |
259 scrollbar_layer_impl->ComputeThumbQuadRect().ToString()); | 249 scrollbar_layer_impl->ComputeThumbQuadRect().ToString()); |
260 | 250 |
261 // Shrink the track in the non-scrolling dimension so that it only covers the | 251 // Shrink the track in the non-scrolling dimension so that it only covers the |
262 // middle third of the scrollbar layer (this does not affect the thumb | 252 // middle third of the scrollbar layer (this does not affect the thumb |
263 // position). | 253 // position). |
264 scrollbar_layer->fake_scrollbar()->set_track_rect(gfx::Rect(30, 12, 50, 6)); | 254 scrollbar_layer->fake_scrollbar()->set_track_rect(gfx::Rect(30, 12, 50, 6)); |
265 | 255 |
266 UPDATE_AND_EXTRACT_LAYER_POINTERS(); | 256 scrollbar_layer->UpdateThumbAndTrackGeometry(); |
| 257 root_layer_impl = host->CommitAndCreateLayerImplTree(); |
| 258 scrollbar_layer_impl = static_cast<PaintedScrollbarLayerImpl*>( |
| 259 root_layer_impl->children()[1]); |
267 EXPECT_EQ(gfx::Rect(44, 0, 6, 4).ToString(), | 260 EXPECT_EQ(gfx::Rect(44, 0, 6, 4).ToString(), |
268 scrollbar_layer_impl->ComputeThumbQuadRect().ToString()); | 261 scrollbar_layer_impl->ComputeThumbQuadRect().ToString()); |
269 } | 262 } |
270 | 263 |
271 TEST(ScrollbarLayerTest, SolidColorDrawQuads) { | 264 TEST(ScrollbarLayerTest, SolidColorDrawQuads) { |
272 const int kThumbThickness = 3; | 265 const int kThumbThickness = 3; |
273 const int kTrackLength = 100; | 266 const int kTrackLength = 100; |
274 | 267 |
275 LayerTreeSettings layer_tree_settings; | 268 LayerTreeSettings layer_tree_settings; |
276 scoped_ptr<FakeLayerTreeHost> host = | 269 scoped_ptr<FakeLayerTreeHost> host = |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
332 | 325 |
333 TEST(ScrollbarLayerTest, LayerDrivenSolidColorDrawQuads) { | 326 TEST(ScrollbarLayerTest, LayerDrivenSolidColorDrawQuads) { |
334 const int kThumbThickness = 3; | 327 const int kThumbThickness = 3; |
335 const int kTrackLength = 10; | 328 const int kTrackLength = 10; |
336 | 329 |
337 LayerTreeSettings layer_tree_settings; | 330 LayerTreeSettings layer_tree_settings; |
338 scoped_ptr<FakeLayerTreeHost> host = | 331 scoped_ptr<FakeLayerTreeHost> host = |
339 FakeLayerTreeHost::Create(layer_tree_settings); | 332 FakeLayerTreeHost::Create(layer_tree_settings); |
340 | 333 |
341 scoped_ptr<Scrollbar> scrollbar(new FakeScrollbar(false, true, true)); | 334 scoped_ptr<Scrollbar> scrollbar(new FakeScrollbar(false, true, true)); |
342 | 335 LayerImpl* layer_impl_tree_root = LayerImplForScrollAreaAndScrollbar( |
343 { | 336 host.get(), scrollbar.Pass(), false, true, kThumbThickness); |
344 scoped_refptr<Layer> layer_tree_root = Layer::Create(); | |
345 scoped_refptr<Layer> scroll_layer = Layer::Create(); | |
346 scroll_layer->SetScrollClipLayer(layer_tree_root); | |
347 scoped_refptr<Layer> child1 = Layer::Create(); | |
348 scoped_refptr<Layer> child2; | |
349 const bool kIsLeftSideVerticalScrollbar = false; | |
350 child2 = SolidColorScrollbarLayer::Create( | |
351 scrollbar->Orientation(), kThumbThickness, | |
352 kIsLeftSideVerticalScrollbar, child1.get()); | |
353 child2->ToScrollbarLayer()->SetScrollLayer(scroll_layer); | |
354 child2->ToScrollbarLayer()->SetClipLayer(layer_tree_root); | |
355 scroll_layer->AddChild(child1); | |
356 scroll_layer->InsertChild(child2, 1); | |
357 layer_tree_root->AddChild(scroll_layer); | |
358 host->SetRootLayer(layer_tree_root); | |
359 } | |
360 LayerImpl* layer_impl_tree_root = host->CommitAndCreateLayerImplTree(); | |
361 LayerImpl* scroll_layer_impl = layer_impl_tree_root->children()[0]; | |
362 | |
363 ScrollbarLayerImplBase* scrollbar_layer_impl = | 337 ScrollbarLayerImplBase* scrollbar_layer_impl = |
364 static_cast<PaintedScrollbarLayerImpl*>( | 338 static_cast<PaintedScrollbarLayerImpl*>( |
365 scroll_layer_impl->children()[1]); | 339 layer_impl_tree_root->children()[1]); |
366 | |
367 // Choose layer bounds to give max_scroll_offset = (8, 8). | |
368 layer_impl_tree_root->SetBounds(gfx::Size(2, 2)); | |
369 scroll_layer_impl->SetBounds(gfx::Size(10, 10)); | |
370 scroll_layer_impl->ScrollBy(gfx::Vector2dF(4.f, 0.f)); | |
371 | 340 |
372 scrollbar_layer_impl->SetBounds(gfx::Size(kTrackLength, kThumbThickness)); | 341 scrollbar_layer_impl->SetBounds(gfx::Size(kTrackLength, kThumbThickness)); |
373 scrollbar_layer_impl->SetCurrentPos(4.f); | 342 scrollbar_layer_impl->SetCurrentPos(4.f); |
374 scrollbar_layer_impl->SetMaximum(8); | 343 scrollbar_layer_impl->SetMaximum(8); |
375 | 344 |
| 345 layer_impl_tree_root->SetScrollable(true); |
| 346 layer_impl_tree_root->SetHorizontalScrollbarLayer(scrollbar_layer_impl); |
| 347 layer_impl_tree_root->SetMaxScrollOffset(gfx::Vector2d(8, 8)); |
| 348 layer_impl_tree_root->SetBounds(gfx::Size(2, 2)); |
| 349 layer_impl_tree_root->ScrollBy(gfx::Vector2dF(4.f, 0.f)); |
| 350 |
376 { | 351 { |
377 MockQuadCuller quad_culler; | 352 MockQuadCuller quad_culler; |
378 AppendQuadsData data; | 353 AppendQuadsData data; |
379 scrollbar_layer_impl->AppendQuads(&quad_culler, &data); | 354 scrollbar_layer_impl->AppendQuads(&quad_culler, &data); |
380 | 355 |
381 const QuadList& quads = quad_culler.quad_list(); | 356 const QuadList& quads = quad_culler.quad_list(); |
382 ASSERT_EQ(1u, quads.size()); | 357 ASSERT_EQ(1u, quads.size()); |
383 EXPECT_EQ(DrawQuad::SOLID_COLOR, quads[0]->material); | 358 EXPECT_EQ(DrawQuad::SOLID_COLOR, quads[0]->material); |
384 EXPECT_RECT_EQ(gfx::Rect(3, 0, 3, 3), quads[0]->rect); | 359 EXPECT_RECT_EQ(gfx::Rect(3, 0, 3, 3), quads[0]->rect); |
385 } | 360 } |
386 } | 361 } |
387 | 362 |
388 class ScrollbarLayerSolidColorThumbTest : public testing::Test { | 363 class ScrollbarLayerSolidColorThumbTest : public testing::Test { |
389 public: | 364 public: |
390 ScrollbarLayerSolidColorThumbTest() { | 365 ScrollbarLayerSolidColorThumbTest() { |
391 LayerTreeSettings layer_tree_settings; | 366 LayerTreeSettings layer_tree_settings; |
392 host_impl_.reset(new FakeLayerTreeHostImpl(layer_tree_settings, &proxy_)); | 367 host_impl_.reset(new FakeLayerTreeHostImpl(layer_tree_settings, &proxy_)); |
393 | 368 |
394 const int kThumbThickness = 3; | 369 const int kThumbThickness = 3; |
395 const bool kIsLeftSideVerticalScrollbar = false; | 370 const bool kIsLeftSideVerticalScrollbar = false; |
396 const bool kIsOverlayScrollbar = false; | |
397 | 371 |
398 horizontal_scrollbar_layer_ = SolidColorScrollbarLayerImpl::Create( | 372 horizontal_scrollbar_layer_ = SolidColorScrollbarLayerImpl::Create( |
399 host_impl_->active_tree(), 1, HORIZONTAL, kThumbThickness, | 373 host_impl_->active_tree(), 1, HORIZONTAL, kThumbThickness, |
400 kIsLeftSideVerticalScrollbar, kIsOverlayScrollbar); | 374 kIsLeftSideVerticalScrollbar); |
401 vertical_scrollbar_layer_ = SolidColorScrollbarLayerImpl::Create( | 375 vertical_scrollbar_layer_ = SolidColorScrollbarLayerImpl::Create( |
402 host_impl_->active_tree(), 2, VERTICAL, kThumbThickness, | 376 host_impl_->active_tree(), 2, VERTICAL, kThumbThickness, |
403 kIsLeftSideVerticalScrollbar, kIsOverlayScrollbar); | 377 kIsLeftSideVerticalScrollbar); |
404 } | 378 } |
405 | 379 |
406 protected: | 380 protected: |
407 FakeImplProxy proxy_; | 381 FakeImplProxy proxy_; |
408 scoped_ptr<FakeLayerTreeHostImpl> host_impl_; | 382 scoped_ptr<FakeLayerTreeHostImpl> host_impl_; |
409 scoped_ptr<SolidColorScrollbarLayerImpl> horizontal_scrollbar_layer_; | 383 scoped_ptr<SolidColorScrollbarLayerImpl> horizontal_scrollbar_layer_; |
410 scoped_ptr<SolidColorScrollbarLayerImpl> vertical_scrollbar_layer_; | 384 scoped_ptr<SolidColorScrollbarLayerImpl> vertical_scrollbar_layer_; |
411 }; | 385 }; |
412 | 386 |
413 TEST_F(ScrollbarLayerSolidColorThumbTest, SolidColorThumbLength) { | 387 TEST_F(ScrollbarLayerSolidColorThumbTest, SolidColorThumbLength) { |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
475 vertical_scrollbar_layer_->ComputeThumbQuadRect()); | 449 vertical_scrollbar_layer_->ComputeThumbQuadRect()); |
476 } | 450 } |
477 | 451 |
478 class ScrollbarLayerTestMaxTextureSize : public LayerTreeTest { | 452 class ScrollbarLayerTestMaxTextureSize : public LayerTreeTest { |
479 public: | 453 public: |
480 ScrollbarLayerTestMaxTextureSize() {} | 454 ScrollbarLayerTestMaxTextureSize() {} |
481 | 455 |
482 void SetScrollbarBounds(gfx::Size bounds) { bounds_ = bounds; } | 456 void SetScrollbarBounds(gfx::Size bounds) { bounds_ = bounds; } |
483 | 457 |
484 virtual void BeginTest() OVERRIDE { | 458 virtual void BeginTest() OVERRIDE { |
485 scroll_layer_ = Layer::Create(); | |
486 layer_tree_host()->root_layer()->AddChild(scroll_layer_); | |
487 | |
488 scoped_ptr<Scrollbar> scrollbar(new FakeScrollbar); | 459 scoped_ptr<Scrollbar> scrollbar(new FakeScrollbar); |
489 scrollbar_layer_ = | 460 scrollbar_layer_ = PaintedScrollbarLayer::Create(scrollbar.Pass(), 1); |
490 PaintedScrollbarLayer::Create(scrollbar.Pass(), scroll_layer_.get()); | |
491 scrollbar_layer_->SetScrollLayer(scroll_layer_); | |
492 scrollbar_layer_->SetLayerTreeHost(layer_tree_host()); | 461 scrollbar_layer_->SetLayerTreeHost(layer_tree_host()); |
493 scrollbar_layer_->SetBounds(bounds_); | 462 scrollbar_layer_->SetBounds(bounds_); |
494 layer_tree_host()->root_layer()->AddChild(scrollbar_layer_); | 463 layer_tree_host()->root_layer()->AddChild(scrollbar_layer_); |
495 | 464 |
| 465 scroll_layer_ = Layer::Create(); |
| 466 scrollbar_layer_->SetScrollLayerId(scroll_layer_->id()); |
| 467 layer_tree_host()->root_layer()->AddChild(scroll_layer_); |
| 468 |
496 PostSetNeedsCommitToMainThread(); | 469 PostSetNeedsCommitToMainThread(); |
497 } | 470 } |
498 | 471 |
499 virtual void DidCommitAndDrawFrame() OVERRIDE { | 472 virtual void DidCommitAndDrawFrame() OVERRIDE { |
500 const int kMaxTextureSize = | 473 const int kMaxTextureSize = |
501 layer_tree_host()->GetRendererCapabilities().max_texture_size; | 474 layer_tree_host()->GetRendererCapabilities().max_texture_size; |
502 | 475 |
503 // Check first that we're actually testing something. | 476 // Check first that we're actually testing something. |
504 EXPECT_GT(scrollbar_layer_->bounds().width(), kMaxTextureSize); | 477 EXPECT_GT(scrollbar_layer_->bounds().width(), kMaxTextureSize); |
505 | 478 |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
604 scoped_refptr<Layer> layer_tree_root = Layer::Create(); | 577 scoped_refptr<Layer> layer_tree_root = Layer::Create(); |
605 scoped_refptr<Layer> content_layer = Layer::Create(); | 578 scoped_refptr<Layer> content_layer = Layer::Create(); |
606 scoped_refptr<Layer> scrollbar_layer; | 579 scoped_refptr<Layer> scrollbar_layer; |
607 if (use_solid_color_scrollbar) { | 580 if (use_solid_color_scrollbar) { |
608 const int kThumbThickness = 3; | 581 const int kThumbThickness = 3; |
609 const bool kIsLeftSideVerticalScrollbar = false; | 582 const bool kIsLeftSideVerticalScrollbar = false; |
610 scrollbar_layer = | 583 scrollbar_layer = |
611 SolidColorScrollbarLayer::Create(scrollbar->Orientation(), | 584 SolidColorScrollbarLayer::Create(scrollbar->Orientation(), |
612 kThumbThickness, | 585 kThumbThickness, |
613 kIsLeftSideVerticalScrollbar, | 586 kIsLeftSideVerticalScrollbar, |
614 layer_tree_root.get()); | 587 layer_tree_root->id()); |
615 } else { | 588 } else { |
616 scrollbar_layer = PaintedScrollbarLayer::Create(scrollbar.Pass(), | 589 scrollbar_layer = PaintedScrollbarLayer::Create(scrollbar.Pass(), |
617 layer_tree_root.get()); | 590 layer_tree_root->id()); |
618 } | 591 } |
619 layer_tree_root->AddChild(content_layer); | 592 layer_tree_root->AddChild(content_layer); |
620 layer_tree_root->AddChild(scrollbar_layer); | 593 layer_tree_root->AddChild(scrollbar_layer); |
621 | 594 |
622 layer_tree_host_->SetRootLayer(layer_tree_root); | 595 layer_tree_host_->SetRootLayer(layer_tree_root); |
623 | 596 |
624 scrollbar_layer->SetIsDrawable(true); | 597 scrollbar_layer->SetIsDrawable(true); |
625 scrollbar_layer->SetBounds(gfx::Size(100, 100)); | 598 scrollbar_layer->SetBounds(gfx::Size(100, 100)); |
626 layer_tree_root->SetScrollOffset(gfx::Vector2d(10, 20)); | 599 layer_tree_root->SetScrollOffset(gfx::Vector2d(10, 20)); |
| 600 layer_tree_root->SetMaxScrollOffset(gfx::Vector2d(30, 50)); |
627 layer_tree_root->SetBounds(gfx::Size(100, 200)); | 601 layer_tree_root->SetBounds(gfx::Size(100, 200)); |
628 content_layer->SetBounds(gfx::Size(100, 200)); | 602 content_layer->SetBounds(gfx::Size(100, 200)); |
629 scrollbar_layer->draw_properties().content_bounds = gfx::Size(100, 200); | 603 scrollbar_layer->draw_properties().content_bounds = gfx::Size(100, 200); |
630 scrollbar_layer->draw_properties().visible_content_rect = | 604 scrollbar_layer->draw_properties().visible_content_rect = |
631 gfx::Rect(0, 0, 100, 200); | 605 gfx::Rect(0, 0, 100, 200); |
632 scrollbar_layer->CreateRenderSurface(); | 606 scrollbar_layer->CreateRenderSurface(); |
633 scrollbar_layer->draw_properties().render_target = scrollbar_layer.get(); | 607 scrollbar_layer->draw_properties().render_target = scrollbar_layer.get(); |
634 | 608 |
635 testing::Mock::VerifyAndClearExpectations(layer_tree_host_.get()); | 609 testing::Mock::VerifyAndClearExpectations(layer_tree_host_.get()); |
636 EXPECT_EQ(scrollbar_layer->layer_tree_host(), layer_tree_host_.get()); | 610 EXPECT_EQ(scrollbar_layer->layer_tree_host(), layer_tree_host_.get()); |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
683 : fake_client_(FakeLayerTreeHostClient::DIRECT_3D) {} | 657 : fake_client_(FakeLayerTreeHostClient::DIRECT_3D) {} |
684 | 658 |
685 void TestResourceUpload(const float test_scale) { | 659 void TestResourceUpload(const float test_scale) { |
686 layer_tree_host_.reset( | 660 layer_tree_host_.reset( |
687 new MockLayerTreeHost(&fake_client_, layer_tree_settings_)); | 661 new MockLayerTreeHost(&fake_client_, layer_tree_settings_)); |
688 | 662 |
689 gfx::Point scrollbar_location(0, 185); | 663 gfx::Point scrollbar_location(0, 185); |
690 scoped_refptr<Layer> layer_tree_root = Layer::Create(); | 664 scoped_refptr<Layer> layer_tree_root = Layer::Create(); |
691 scoped_refptr<Layer> content_layer = Layer::Create(); | 665 scoped_refptr<Layer> content_layer = Layer::Create(); |
692 scoped_refptr<FakePaintedScrollbarLayer> scrollbar_layer = | 666 scoped_refptr<FakePaintedScrollbarLayer> scrollbar_layer = |
693 FakePaintedScrollbarLayer::Create(false, true, layer_tree_root.get()); | 667 FakePaintedScrollbarLayer::Create(false, true, layer_tree_root->id()); |
694 | 668 |
695 layer_tree_root->AddChild(content_layer); | 669 layer_tree_root->AddChild(content_layer); |
696 layer_tree_root->AddChild(scrollbar_layer); | 670 layer_tree_root->AddChild(scrollbar_layer); |
697 | 671 |
698 layer_tree_host_->SetRootLayer(layer_tree_root); | 672 layer_tree_host_->SetRootLayer(layer_tree_root); |
699 | 673 |
700 scrollbar_layer->SetIsDrawable(true); | 674 scrollbar_layer->SetIsDrawable(true); |
701 scrollbar_layer->SetBounds(gfx::Size(100, 15)); | 675 scrollbar_layer->SetBounds(gfx::Size(100, 15)); |
702 scrollbar_layer->SetPosition(scrollbar_location); | 676 scrollbar_layer->SetPosition(scrollbar_location); |
703 layer_tree_root->SetBounds(gfx::Size(100, 200)); | 677 layer_tree_root->SetBounds(gfx::Size(100, 200)); |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
753 TEST_F(ScaledScrollbarLayerTestResourceCreation, ScaledResourceUpload) { | 727 TEST_F(ScaledScrollbarLayerTestResourceCreation, ScaledResourceUpload) { |
754 // Pick a test scale that moves the scrollbar's (non-zero) position to | 728 // Pick a test scale that moves the scrollbar's (non-zero) position to |
755 // a non-pixel-aligned location. | 729 // a non-pixel-aligned location. |
756 TestResourceUpload(.041f); | 730 TestResourceUpload(.041f); |
757 TestResourceUpload(1.41f); | 731 TestResourceUpload(1.41f); |
758 TestResourceUpload(4.1f); | 732 TestResourceUpload(4.1f); |
759 } | 733 } |
760 | 734 |
761 } // namespace | 735 } // namespace |
762 } // namespace cc | 736 } // namespace cc |
OLD | NEW |