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 "base/thread_task_runner_handle.h" | 6 #include "base/thread_task_runner_handle.h" |
7 #include "cc/animation/scrollbar_animation_controller.h" | 7 #include "cc/animation/scrollbar_animation_controller.h" |
8 #include "cc/layers/append_quads_data.h" | 8 #include "cc/layers/append_quads_data.h" |
9 #include "cc/layers/painted_scrollbar_layer.h" | 9 #include "cc/layers/painted_scrollbar_layer.h" |
10 #include "cc/layers/painted_scrollbar_layer_impl.h" | 10 #include "cc/layers/painted_scrollbar_layer_impl.h" |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
146 }; | 146 }; |
147 | 147 |
148 TEST_F(ScrollbarLayerTest, ShouldScrollNonOverlayOnMainThread) { | 148 TEST_F(ScrollbarLayerTest, ShouldScrollNonOverlayOnMainThread) { |
149 // Create and attach a non-overlay scrollbar. | 149 // Create and attach a non-overlay scrollbar. |
150 scoped_ptr<Scrollbar> scrollbar(new FakeScrollbar); | 150 scoped_ptr<Scrollbar> scrollbar(new FakeScrollbar); |
151 LayerImpl* layer_impl_tree_root = LayerImplForScrollAreaAndScrollbar( | 151 LayerImpl* layer_impl_tree_root = LayerImplForScrollAreaAndScrollbar( |
152 layer_settings(), layer_tree_host_.get(), scrollbar.Pass(), false, false, | 152 layer_settings(), layer_tree_host_.get(), scrollbar.Pass(), false, false, |
153 0, 0); | 153 0, 0); |
154 PaintedScrollbarLayerImpl* scrollbar_layer_impl = | 154 PaintedScrollbarLayerImpl* scrollbar_layer_impl = |
155 static_cast<PaintedScrollbarLayerImpl*>( | 155 static_cast<PaintedScrollbarLayerImpl*>( |
156 layer_impl_tree_root->children()[1]); | 156 layer_impl_tree_root->children()[1].get()); |
157 | 157 |
158 // When the scrollbar is not an overlay scrollbar, the scroll should be | 158 // When the scrollbar is not an overlay scrollbar, the scroll should be |
159 // responded to on the main thread as the compositor does not yet implement | 159 // responded to on the main thread as the compositor does not yet implement |
160 // scrollbar scrolling. | 160 // scrollbar scrolling. |
161 EXPECT_EQ(InputHandler::SCROLL_ON_MAIN_THREAD, | 161 EXPECT_EQ(InputHandler::SCROLL_ON_MAIN_THREAD, |
162 scrollbar_layer_impl->TryScroll( | 162 scrollbar_layer_impl->TryScroll( |
163 gfx::PointF(), InputHandler::GESTURE, SCROLL_BLOCKS_ON_NONE)); | 163 gfx::PointF(), InputHandler::GESTURE, SCROLL_BLOCKS_ON_NONE)); |
164 | 164 |
165 // Create and attach an overlay scrollbar. | 165 // Create and attach an overlay scrollbar. |
166 scrollbar.reset(new FakeScrollbar(false, false, true)); | 166 scrollbar.reset(new FakeScrollbar(false, false, true)); |
167 | 167 |
168 layer_impl_tree_root = LayerImplForScrollAreaAndScrollbar( | 168 layer_impl_tree_root = LayerImplForScrollAreaAndScrollbar( |
169 layer_settings(), layer_tree_host_.get(), scrollbar.Pass(), false, false, | 169 layer_settings(), layer_tree_host_.get(), scrollbar.Pass(), false, false, |
170 0, 0); | 170 0, 0); |
171 scrollbar_layer_impl = static_cast<PaintedScrollbarLayerImpl*>( | 171 scrollbar_layer_impl = static_cast<PaintedScrollbarLayerImpl*>( |
172 layer_impl_tree_root->children()[1]); | 172 layer_impl_tree_root->children()[1].get()); |
173 | 173 |
174 // The user shouldn't be able to drag an overlay scrollbar and the scroll | 174 // The user shouldn't be able to drag an overlay scrollbar and the scroll |
175 // may be handled in the compositor. | 175 // may be handled in the compositor. |
176 EXPECT_EQ(InputHandler::SCROLL_IGNORED, | 176 EXPECT_EQ(InputHandler::SCROLL_IGNORED, |
177 scrollbar_layer_impl->TryScroll( | 177 scrollbar_layer_impl->TryScroll( |
178 gfx::PointF(), InputHandler::GESTURE, SCROLL_BLOCKS_ON_NONE)); | 178 gfx::PointF(), InputHandler::GESTURE, SCROLL_BLOCKS_ON_NONE)); |
179 } | 179 } |
180 | 180 |
181 TEST_F(ScrollbarLayerTest, ScrollOffsetSynchronization) { | 181 TEST_F(ScrollbarLayerTest, ScrollOffsetSynchronization) { |
182 scoped_ptr<Scrollbar> scrollbar(new FakeScrollbar); | 182 scoped_ptr<Scrollbar> scrollbar(new FakeScrollbar); |
(...skipping 17 matching lines...) Expand all Loading... |
200 scrollbar_layer->ToScrollbarLayer()->SetScrollLayer(scroll_layer->id()); | 200 scrollbar_layer->ToScrollbarLayer()->SetScrollLayer(scroll_layer->id()); |
201 | 201 |
202 layer_tree_root->SavePaintProperties(); | 202 layer_tree_root->SavePaintProperties(); |
203 content_layer->SavePaintProperties(); | 203 content_layer->SavePaintProperties(); |
204 | 204 |
205 LayerImpl* layer_impl_tree_root = | 205 LayerImpl* layer_impl_tree_root = |
206 layer_tree_host_->CommitAndCreateLayerImplTree(); | 206 layer_tree_host_->CommitAndCreateLayerImplTree(); |
207 | 207 |
208 ScrollbarLayerImplBase* cc_scrollbar_layer = | 208 ScrollbarLayerImplBase* cc_scrollbar_layer = |
209 static_cast<PaintedScrollbarLayerImpl*>( | 209 static_cast<PaintedScrollbarLayerImpl*>( |
210 layer_impl_tree_root->children()[1]); | 210 layer_impl_tree_root->children()[1].get()); |
211 | 211 |
212 EXPECT_EQ(10.f, cc_scrollbar_layer->current_pos()); | 212 EXPECT_EQ(10.f, cc_scrollbar_layer->current_pos()); |
213 EXPECT_EQ(30, cc_scrollbar_layer->scroll_layer_length() - | 213 EXPECT_EQ(30, cc_scrollbar_layer->scroll_layer_length() - |
214 cc_scrollbar_layer->clip_layer_length()); | 214 cc_scrollbar_layer->clip_layer_length()); |
215 | 215 |
216 layer_tree_root->SetBounds(gfx::Size(700, 1500)); | 216 layer_tree_root->SetBounds(gfx::Size(700, 1500)); |
217 layer_tree_root->SavePaintProperties(); | 217 layer_tree_root->SavePaintProperties(); |
218 scroll_layer->SetBounds(gfx::Size(1000, 2000)); | 218 scroll_layer->SetBounds(gfx::Size(1000, 2000)); |
219 scroll_layer->SetScrollOffset(gfx::ScrollOffset(100, 200)); | 219 scroll_layer->SetScrollOffset(gfx::ScrollOffset(100, 200)); |
220 scroll_layer->SavePaintProperties(); | 220 scroll_layer->SavePaintProperties(); |
221 content_layer->SetBounds(gfx::Size(1000, 2000)); | 221 content_layer->SetBounds(gfx::Size(1000, 2000)); |
222 content_layer->SavePaintProperties(); | 222 content_layer->SavePaintProperties(); |
223 | 223 |
224 layer_impl_tree_root = layer_tree_host_->CommitAndCreateLayerImplTree(); | 224 layer_impl_tree_root = layer_tree_host_->CommitAndCreateLayerImplTree(); |
225 | 225 |
226 EXPECT_EQ(100.f, cc_scrollbar_layer->current_pos()); | 226 EXPECT_EQ(100.f, cc_scrollbar_layer->current_pos()); |
227 EXPECT_EQ(300, cc_scrollbar_layer->scroll_layer_length() - | 227 EXPECT_EQ(300, cc_scrollbar_layer->scroll_layer_length() - |
228 cc_scrollbar_layer->clip_layer_length()); | 228 cc_scrollbar_layer->clip_layer_length()); |
229 | 229 |
230 LayerImpl* scroll_layer_impl = layer_impl_tree_root->children()[0]; | 230 LayerImpl* scroll_layer_impl = layer_impl_tree_root->children()[0].get(); |
231 scroll_layer_impl->ScrollBy(gfx::Vector2d(12, 34)); | 231 scroll_layer_impl->ScrollBy(gfx::Vector2d(12, 34)); |
232 | 232 |
233 EXPECT_EQ(112.f, cc_scrollbar_layer->current_pos()); | 233 EXPECT_EQ(112.f, cc_scrollbar_layer->current_pos()); |
234 EXPECT_EQ(300, cc_scrollbar_layer->scroll_layer_length() - | 234 EXPECT_EQ(300, cc_scrollbar_layer->scroll_layer_length() - |
235 cc_scrollbar_layer->clip_layer_length()); | 235 cc_scrollbar_layer->clip_layer_length()); |
236 } | 236 } |
237 | 237 |
238 #define UPDATE_AND_EXTRACT_LAYER_POINTERS() \ | 238 #define UPDATE_AND_EXTRACT_LAYER_POINTERS() \ |
239 do { \ | 239 do { \ |
240 scrollbar_layer->UpdateInternalContentScale(); \ | 240 scrollbar_layer->UpdateInternalContentScale(); \ |
241 scrollbar_layer->UpdateThumbAndTrackGeometry(); \ | 241 scrollbar_layer->UpdateThumbAndTrackGeometry(); \ |
242 root_clip_layer_impl = layer_tree_host_->CommitAndCreateLayerImplTree(); \ | 242 root_clip_layer_impl = layer_tree_host_->CommitAndCreateLayerImplTree(); \ |
243 root_layer_impl = root_clip_layer_impl->children()[0]; \ | 243 root_layer_impl = root_clip_layer_impl->children()[0].get(); \ |
244 scrollbar_layer_impl = static_cast<PaintedScrollbarLayerImpl*>( \ | 244 scrollbar_layer_impl = static_cast<PaintedScrollbarLayerImpl*>( \ |
245 root_layer_impl->children()[1]); \ | 245 root_layer_impl->children()[1].get()); \ |
246 } while (false) | 246 } while (false) |
247 | 247 |
248 TEST_F(ScrollbarLayerTest, UpdatePropertiesOfScrollBarWhenThumbRemoved) { | 248 TEST_F(ScrollbarLayerTest, UpdatePropertiesOfScrollBarWhenThumbRemoved) { |
249 scoped_refptr<Layer> root_clip_layer = Layer::Create(layer_settings()); | 249 scoped_refptr<Layer> root_clip_layer = Layer::Create(layer_settings()); |
250 scoped_refptr<Layer> root_layer = Layer::Create(layer_settings()); | 250 scoped_refptr<Layer> root_layer = Layer::Create(layer_settings()); |
251 scoped_refptr<Layer> content_layer = Layer::Create(layer_settings()); | 251 scoped_refptr<Layer> content_layer = Layer::Create(layer_settings()); |
252 scoped_refptr<FakePaintedScrollbarLayer> scrollbar_layer = | 252 scoped_refptr<FakePaintedScrollbarLayer> scrollbar_layer = |
253 FakePaintedScrollbarLayer::Create(layer_settings(), false, true, | 253 FakePaintedScrollbarLayer::Create(layer_settings(), false, true, |
254 root_layer->id()); | 254 root_layer->id()); |
255 | 255 |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
368 const int kThumbThickness = 3; | 368 const int kThumbThickness = 3; |
369 const int kTrackStart = 1; | 369 const int kTrackStart = 1; |
370 const int kTrackLength = 100; | 370 const int kTrackLength = 100; |
371 | 371 |
372 scoped_ptr<Scrollbar> scrollbar(new FakeScrollbar(false, true, true)); | 372 scoped_ptr<Scrollbar> scrollbar(new FakeScrollbar(false, true, true)); |
373 LayerImpl* layer_impl_tree_root = LayerImplForScrollAreaAndScrollbar( | 373 LayerImpl* layer_impl_tree_root = LayerImplForScrollAreaAndScrollbar( |
374 layer_settings(), layer_tree_host_.get(), scrollbar.Pass(), false, true, | 374 layer_settings(), layer_tree_host_.get(), scrollbar.Pass(), false, true, |
375 kThumbThickness, kTrackStart); | 375 kThumbThickness, kTrackStart); |
376 ScrollbarLayerImplBase* scrollbar_layer_impl = | 376 ScrollbarLayerImplBase* scrollbar_layer_impl = |
377 static_cast<SolidColorScrollbarLayerImpl*>( | 377 static_cast<SolidColorScrollbarLayerImpl*>( |
378 layer_impl_tree_root->children()[1]); | 378 layer_impl_tree_root->children()[1].get()); |
379 scrollbar_layer_impl->SetBounds(gfx::Size(kTrackLength, kThumbThickness)); | 379 scrollbar_layer_impl->SetBounds(gfx::Size(kTrackLength, kThumbThickness)); |
380 scrollbar_layer_impl->SetCurrentPos(10.f); | 380 scrollbar_layer_impl->SetCurrentPos(10.f); |
381 scrollbar_layer_impl->SetClipLayerLength(200 / 3.f); | 381 scrollbar_layer_impl->SetClipLayerLength(200 / 3.f); |
382 scrollbar_layer_impl->SetScrollLayerLength(100 + 200 / 3.f); | 382 scrollbar_layer_impl->SetScrollLayerLength(100 + 200 / 3.f); |
383 | 383 |
384 // Thickness should be overridden to 3. | 384 // Thickness should be overridden to 3. |
385 { | 385 { |
386 scoped_ptr<RenderPass> render_pass = RenderPass::Create(); | 386 scoped_ptr<RenderPass> render_pass = RenderPass::Create(); |
387 AppendQuadsData data; | 387 AppendQuadsData data; |
388 scrollbar_layer_impl->AppendQuads(render_pass.get(), &data); | 388 scrollbar_layer_impl->AppendQuads(render_pass.get(), &data); |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
442 layer_settings(), scrollbar->Orientation(), kThumbThickness, | 442 layer_settings(), scrollbar->Orientation(), kThumbThickness, |
443 kTrackStart, kIsLeftSideVerticalScrollbar, child1->id()); | 443 kTrackStart, kIsLeftSideVerticalScrollbar, child1->id()); |
444 child2->ToScrollbarLayer()->SetScrollLayer(scroll_layer->id()); | 444 child2->ToScrollbarLayer()->SetScrollLayer(scroll_layer->id()); |
445 scroll_layer->AddChild(child1); | 445 scroll_layer->AddChild(child1); |
446 scroll_layer->InsertChild(child2, 1); | 446 scroll_layer->InsertChild(child2, 1); |
447 layer_tree_root->AddChild(scroll_layer); | 447 layer_tree_root->AddChild(scroll_layer); |
448 layer_tree_host_->SetRootLayer(layer_tree_root); | 448 layer_tree_host_->SetRootLayer(layer_tree_root); |
449 } | 449 } |
450 LayerImpl* layer_impl_tree_root = | 450 LayerImpl* layer_impl_tree_root = |
451 layer_tree_host_->CommitAndCreateLayerImplTree(); | 451 layer_tree_host_->CommitAndCreateLayerImplTree(); |
452 LayerImpl* scroll_layer_impl = layer_impl_tree_root->children()[0]; | 452 LayerImpl* scroll_layer_impl = layer_impl_tree_root->children()[0].get(); |
453 | 453 |
454 auto* scrollbar_layer_impl = | 454 auto* scrollbar_layer_impl = static_cast<ScrollbarLayerImplBase*>( |
455 static_cast<ScrollbarLayerImplBase*>(scroll_layer_impl->children()[1]); | 455 scroll_layer_impl->children()[1].get()); |
456 | 456 |
457 // Choose layer bounds to give max_scroll_offset = (8, 8). | 457 // Choose layer bounds to give max_scroll_offset = (8, 8). |
458 layer_impl_tree_root->SetBounds(gfx::Size(2, 2)); | 458 layer_impl_tree_root->SetBounds(gfx::Size(2, 2)); |
459 scroll_layer_impl->SetBounds(gfx::Size(10, 10)); | 459 scroll_layer_impl->SetBounds(gfx::Size(10, 10)); |
460 scroll_layer_impl->ScrollBy(gfx::Vector2dF(4.f, 0.f)); | 460 scroll_layer_impl->ScrollBy(gfx::Vector2dF(4.f, 0.f)); |
461 | 461 |
462 scrollbar_layer_impl->SetBounds(gfx::Size(kTrackLength, kThumbThickness)); | 462 scrollbar_layer_impl->SetBounds(gfx::Size(kTrackLength, kThumbThickness)); |
463 scrollbar_layer_impl->SetCurrentPos(4.f); | 463 scrollbar_layer_impl->SetCurrentPos(4.f); |
464 | 464 |
465 { | 465 { |
(...skipping 533 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
999 TestScale(gfx::Rect(1240, 0, 15, 1333), 2.7754839f); | 999 TestScale(gfx::Rect(1240, 0, 15, 1333), 2.7754839f); |
1000 TestScale(gfx::Rect(1240, 0, 15, 677), 2.46677136f); | 1000 TestScale(gfx::Rect(1240, 0, 15, 677), 2.46677136f); |
1001 | 1001 |
1002 // Horizontal Scrollbars. | 1002 // Horizontal Scrollbars. |
1003 TestScale(gfx::Rect(0, 1240, 1333, 15), 2.7754839f); | 1003 TestScale(gfx::Rect(0, 1240, 1333, 15), 2.7754839f); |
1004 TestScale(gfx::Rect(0, 1240, 677, 15), 2.46677136f); | 1004 TestScale(gfx::Rect(0, 1240, 677, 15), 2.46677136f); |
1005 } | 1005 } |
1006 | 1006 |
1007 } // namespace | 1007 } // namespace |
1008 } // namespace cc | 1008 } // namespace cc |
OLD | NEW |