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 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
43 int track_start) { | 43 int track_start) { |
44 scoped_refptr<Layer> layer_tree_root = Layer::Create(settings); | 44 scoped_refptr<Layer> layer_tree_root = Layer::Create(settings); |
45 scoped_refptr<Layer> child1 = Layer::Create(settings); | 45 scoped_refptr<Layer> child1 = Layer::Create(settings); |
46 scoped_refptr<Layer> child2; | 46 scoped_refptr<Layer> child2; |
47 if (use_solid_color_scrollbar) { | 47 if (use_solid_color_scrollbar) { |
48 const bool kIsLeftSideVerticalScrollbar = false; | 48 const bool kIsLeftSideVerticalScrollbar = false; |
49 child2 = SolidColorScrollbarLayer::Create( | 49 child2 = SolidColorScrollbarLayer::Create( |
50 settings, scrollbar->Orientation(), thumb_thickness, track_start, | 50 settings, scrollbar->Orientation(), thumb_thickness, track_start, |
51 kIsLeftSideVerticalScrollbar, child1->id()); | 51 kIsLeftSideVerticalScrollbar, child1->id()); |
52 } else { | 52 } else { |
53 child2 = | 53 child2 = PaintedScrollbarLayer::Create(settings, std::move(scrollbar), |
54 PaintedScrollbarLayer::Create(settings, scrollbar.Pass(), child1->id()); | 54 child1->id()); |
55 } | 55 } |
56 layer_tree_root->AddChild(child1); | 56 layer_tree_root->AddChild(child1); |
57 layer_tree_root->InsertChild(child2, reverse_order ? 0 : 1); | 57 layer_tree_root->InsertChild(child2, reverse_order ? 0 : 1); |
58 host->SetRootLayer(layer_tree_root); | 58 host->SetRootLayer(layer_tree_root); |
59 return host->CommitAndCreateLayerImplTree(); | 59 return host->CommitAndCreateLayerImplTree(); |
60 } | 60 } |
61 | 61 |
62 class FakeResourceTrackingLayerTreeHost : public FakeLayerTreeHost { | 62 class FakeResourceTrackingLayerTreeHost : public FakeLayerTreeHost { |
63 public: | 63 public: |
64 FakeResourceTrackingLayerTreeHost(FakeLayerTreeHostClient* client, | 64 FakeResourceTrackingLayerTreeHost(FakeLayerTreeHostClient* client, |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
142 TestTaskGraphRunner task_graph_runner_; | 142 TestTaskGraphRunner task_graph_runner_; |
143 LayerTreeSettings layer_tree_settings_; | 143 LayerTreeSettings layer_tree_settings_; |
144 LayerSettings layer_settings_; | 144 LayerSettings layer_settings_; |
145 scoped_ptr<FakeResourceTrackingLayerTreeHost> layer_tree_host_; | 145 scoped_ptr<FakeResourceTrackingLayerTreeHost> layer_tree_host_; |
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(), std::move(scrollbar), false, |
153 0, 0); | 153 false, 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].get()); | 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(), std::move(scrollbar), false, |
170 0, 0); | 170 false, 0, 0); |
171 scrollbar_layer_impl = static_cast<PaintedScrollbarLayerImpl*>( | 171 scrollbar_layer_impl = static_cast<PaintedScrollbarLayerImpl*>( |
172 layer_impl_tree_root->children()[1].get()); | 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); |
183 scoped_refptr<Layer> layer_tree_root = Layer::Create(layer_settings()); | 183 scoped_refptr<Layer> layer_tree_root = Layer::Create(layer_settings()); |
184 scoped_refptr<Layer> scroll_layer = Layer::Create(layer_settings()); | 184 scoped_refptr<Layer> scroll_layer = Layer::Create(layer_settings()); |
185 scoped_refptr<Layer> content_layer = Layer::Create(layer_settings()); | 185 scoped_refptr<Layer> content_layer = Layer::Create(layer_settings()); |
186 scoped_refptr<Layer> scrollbar_layer = PaintedScrollbarLayer::Create( | 186 scoped_refptr<Layer> scrollbar_layer = PaintedScrollbarLayer::Create( |
187 layer_settings(), scrollbar.Pass(), layer_tree_root->id()); | 187 layer_settings(), std::move(scrollbar), layer_tree_root->id()); |
188 | 188 |
189 // Choose bounds to give max_scroll_offset = (30, 50). | 189 // Choose bounds to give max_scroll_offset = (30, 50). |
190 layer_tree_root->SetBounds(gfx::Size(70, 150)); | 190 layer_tree_root->SetBounds(gfx::Size(70, 150)); |
191 scroll_layer->SetScrollClipLayerId(layer_tree_root->id()); | 191 scroll_layer->SetScrollClipLayerId(layer_tree_root->id()); |
192 scroll_layer->SetScrollOffset(gfx::ScrollOffset(10, 20)); | 192 scroll_layer->SetScrollOffset(gfx::ScrollOffset(10, 20)); |
193 scroll_layer->SetBounds(gfx::Size(100, 200)); | 193 scroll_layer->SetBounds(gfx::Size(100, 200)); |
194 content_layer->SetBounds(gfx::Size(100, 200)); | 194 content_layer->SetBounds(gfx::Size(100, 200)); |
195 | 195 |
196 layer_tree_host_->SetRootLayer(layer_tree_root); | 196 layer_tree_host_->SetRootLayer(layer_tree_root); |
197 layer_tree_root->AddChild(scroll_layer); | 197 layer_tree_root->AddChild(scroll_layer); |
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
364 scrollbar_layer_impl->ComputeThumbQuadRect().ToString()); | 364 scrollbar_layer_impl->ComputeThumbQuadRect().ToString()); |
365 } | 365 } |
366 | 366 |
367 TEST_F(ScrollbarLayerTest, SolidColorDrawQuads) { | 367 TEST_F(ScrollbarLayerTest, SolidColorDrawQuads) { |
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(), std::move(scrollbar), false, |
375 kThumbThickness, kTrackStart); | 375 true, 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].get()); | 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 { |
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
586 ScrollbarLayerTestMaxTextureSize() {} | 586 ScrollbarLayerTestMaxTextureSize() {} |
587 | 587 |
588 void SetScrollbarBounds(const gfx::Size& bounds) { bounds_ = bounds; } | 588 void SetScrollbarBounds(const gfx::Size& bounds) { bounds_ = bounds; } |
589 | 589 |
590 void BeginTest() override { | 590 void BeginTest() override { |
591 scroll_layer_ = Layer::Create(layer_settings()); | 591 scroll_layer_ = Layer::Create(layer_settings()); |
592 layer_tree_host()->root_layer()->AddChild(scroll_layer_); | 592 layer_tree_host()->root_layer()->AddChild(scroll_layer_); |
593 | 593 |
594 scoped_ptr<Scrollbar> scrollbar(new FakeScrollbar); | 594 scoped_ptr<Scrollbar> scrollbar(new FakeScrollbar); |
595 scrollbar_layer_ = PaintedScrollbarLayer::Create( | 595 scrollbar_layer_ = PaintedScrollbarLayer::Create( |
596 layer_settings(), scrollbar.Pass(), scroll_layer_->id()); | 596 layer_settings(), std::move(scrollbar), scroll_layer_->id()); |
597 scrollbar_layer_->SetScrollLayer(scroll_layer_->id()); | 597 scrollbar_layer_->SetScrollLayer(scroll_layer_->id()); |
598 scrollbar_layer_->SetLayerTreeHost(layer_tree_host()); | 598 scrollbar_layer_->SetLayerTreeHost(layer_tree_host()); |
599 scrollbar_layer_->SetBounds(bounds_); | 599 scrollbar_layer_->SetBounds(bounds_); |
600 scrollbar_layer_->SetIsDrawable(true); | 600 scrollbar_layer_->SetIsDrawable(true); |
601 layer_tree_host()->root_layer()->AddChild(scrollbar_layer_); | 601 layer_tree_host()->root_layer()->AddChild(scrollbar_layer_); |
602 | 602 |
603 PostSetNeedsCommitToMainThread(); | 603 PostSetNeedsCommitToMainThread(); |
604 } | 604 } |
605 | 605 |
606 void DidCommitAndDrawFrame() override { | 606 void DidCommitAndDrawFrame() override { |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
657 scoped_refptr<Layer> scrollbar_layer; | 657 scoped_refptr<Layer> scrollbar_layer; |
658 if (use_solid_color_scrollbar) { | 658 if (use_solid_color_scrollbar) { |
659 const int kThumbThickness = 3; | 659 const int kThumbThickness = 3; |
660 const int kTrackStart = 0; | 660 const int kTrackStart = 0; |
661 const bool kIsLeftSideVerticalScrollbar = false; | 661 const bool kIsLeftSideVerticalScrollbar = false; |
662 scrollbar_layer = SolidColorScrollbarLayer::Create( | 662 scrollbar_layer = SolidColorScrollbarLayer::Create( |
663 layer_settings(), scrollbar->Orientation(), kThumbThickness, | 663 layer_settings(), scrollbar->Orientation(), kThumbThickness, |
664 kTrackStart, kIsLeftSideVerticalScrollbar, layer_tree_root->id()); | 664 kTrackStart, kIsLeftSideVerticalScrollbar, layer_tree_root->id()); |
665 } else { | 665 } else { |
666 scrollbar_layer = PaintedScrollbarLayer::Create( | 666 scrollbar_layer = PaintedScrollbarLayer::Create( |
667 layer_settings(), scrollbar.Pass(), layer_tree_root->id()); | 667 layer_settings(), std::move(scrollbar), layer_tree_root->id()); |
668 } | 668 } |
669 layer_tree_root->AddChild(content_layer); | 669 layer_tree_root->AddChild(content_layer); |
670 layer_tree_root->AddChild(scrollbar_layer); | 670 layer_tree_root->AddChild(scrollbar_layer); |
671 | 671 |
672 layer_tree_host_->SetRootLayer(layer_tree_root); | 672 layer_tree_host_->SetRootLayer(layer_tree_root); |
673 | 673 |
674 scrollbar_layer->SetIsDrawable(true); | 674 scrollbar_layer->SetIsDrawable(true); |
675 scrollbar_layer->SetBounds(gfx::Size(100, 100)); | 675 scrollbar_layer->SetBounds(gfx::Size(100, 100)); |
676 layer_tree_root->SetScrollOffset(gfx::ScrollOffset(10, 20)); | 676 layer_tree_root->SetScrollOffset(gfx::ScrollOffset(10, 20)); |
677 layer_tree_root->SetBounds(gfx::Size(100, 200)); | 677 layer_tree_root->SetBounds(gfx::Size(100, 200)); |
(...skipping 321 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 |