Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(188)

Side by Side Diff: cc/layers/scrollbar_layer_unittest.cc

Issue 18341009: Refactor cc scrollbar layers to separate solid-color vs desktop. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address Enne's comments. Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 "cc/layers/scrollbar_layer.h" 5 #include "cc/layers/scrollbar_layer.h"
6 6
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/scrollbar_layer_base.h"
9 #include "cc/layers/scrollbar_layer_impl.h" 10 #include "cc/layers/scrollbar_layer_impl.h"
11 #include "cc/layers/solid_color_scrollbar_layer.h"
12 #include "cc/layers/solid_color_scrollbar_layer_impl.h"
10 #include "cc/quads/solid_color_draw_quad.h" 13 #include "cc/quads/solid_color_draw_quad.h"
11 #include "cc/resources/prioritized_resource_manager.h" 14 #include "cc/resources/prioritized_resource_manager.h"
12 #include "cc/resources/priority_calculator.h" 15 #include "cc/resources/priority_calculator.h"
13 #include "cc/resources/resource_update_queue.h" 16 #include "cc/resources/resource_update_queue.h"
14 #include "cc/test/fake_impl_proxy.h" 17 #include "cc/test/fake_impl_proxy.h"
15 #include "cc/test/fake_layer_tree_host.h" 18 #include "cc/test/fake_layer_tree_host.h"
16 #include "cc/test/fake_layer_tree_host_client.h" 19 #include "cc/test/fake_layer_tree_host_client.h"
17 #include "cc/test/fake_layer_tree_host_impl.h" 20 #include "cc/test/fake_layer_tree_host_impl.h"
18 #include "cc/test/fake_scrollbar.h" 21 #include "cc/test/fake_scrollbar.h"
19 #include "cc/test/geometry_test_utils.h" 22 #include "cc/test/geometry_test_utils.h"
20 #include "cc/test/layer_tree_test.h" 23 #include "cc/test/layer_tree_test.h"
21 #include "cc/test/mock_quad_culler.h" 24 #include "cc/test/mock_quad_culler.h"
22 #include "cc/test/test_web_graphics_context_3d.h" 25 #include "cc/test/test_web_graphics_context_3d.h"
23 #include "cc/trees/layer_tree_impl.h" 26 #include "cc/trees/layer_tree_impl.h"
24 #include "cc/trees/single_thread_proxy.h" 27 #include "cc/trees/single_thread_proxy.h"
25 #include "cc/trees/tree_synchronizer.h" 28 #include "cc/trees/tree_synchronizer.h"
26 #include "testing/gmock/include/gmock/gmock.h" 29 #include "testing/gmock/include/gmock/gmock.h"
27 #include "testing/gtest/include/gtest/gtest.h" 30 #include "testing/gtest/include/gtest/gtest.h"
28 31
29 namespace cc { 32 namespace cc {
30 namespace { 33 namespace {
31 34
32 LayerImpl* LayerImplForScrollAreaAndScrollbar( 35 LayerImpl* LayerImplForScrollAreaAndScrollbar(
33 FakeLayerTreeHost* host, 36 FakeLayerTreeHost* host,
34 scoped_ptr<Scrollbar> scrollbar, 37 scoped_ptr<Scrollbar> scrollbar,
35 bool reverse_order) { 38 bool reverse_order,
39 bool use_solid_color_scrollbar,
40 int thumb_thickness) {
36 scoped_refptr<Layer> layer_tree_root = Layer::Create(); 41 scoped_refptr<Layer> layer_tree_root = Layer::Create();
37 scoped_refptr<Layer> child1 = Layer::Create(); 42 scoped_refptr<Layer> child1 = Layer::Create();
38 scoped_refptr<Layer> child2 = 43 scoped_refptr<Layer> child2;
39 ScrollbarLayer::Create(scrollbar.Pass(), 44 if (use_solid_color_scrollbar) {
40 child1->id()); 45 SkColor color = SkColorSetARGB(128, 128, 128, 128);
46 child2 = SolidColorScrollbarLayer::Create(
47 scrollbar->Orientation(), thumb_thickness, color, child1->id());
48 } else {
49 child2 = ScrollbarLayer::Create(scrollbar.Pass(), child1->id());
50 }
41 layer_tree_root->AddChild(child1); 51 layer_tree_root->AddChild(child1);
42 layer_tree_root->InsertChild(child2, reverse_order ? 0 : 1); 52 layer_tree_root->InsertChild(child2, reverse_order ? 0 : 1);
43 host->SetRootLayer(layer_tree_root); 53 host->SetRootLayer(layer_tree_root);
44 return host->CommitAndCreateLayerImplTree(); 54 return host->CommitAndCreateLayerImplTree();
45 } 55 }
46 56
47 TEST(ScrollbarLayerTest, ResolveScrollLayerPointer) { 57 TEST(ScrollbarLayerTest, ResolveScrollLayerPointer) {
48 scoped_ptr<FakeLayerTreeHost> host = FakeLayerTreeHost::Create(); 58 scoped_ptr<FakeLayerTreeHost> host = FakeLayerTreeHost::Create();
49 scoped_ptr<Scrollbar> scrollbar(new FakeScrollbar); 59 scoped_ptr<Scrollbar> scrollbar(new FakeScrollbar);
50 LayerImpl* layer_impl_tree_root = 60 LayerImpl* layer_impl_tree_root = LayerImplForScrollAreaAndScrollbar(
51 LayerImplForScrollAreaAndScrollbar(host.get(), scrollbar.Pass(), false); 61 host.get(), scrollbar.Pass(), false, false, 0);
52 62
53 LayerImpl* cc_child1 = layer_impl_tree_root->children()[0]; 63 LayerImpl* cc_child1 = layer_impl_tree_root->children()[0];
54 ScrollbarLayerImpl* cc_child2 = static_cast<ScrollbarLayerImpl*>( 64 ScrollbarLayerImpl* cc_child2 = static_cast<ScrollbarLayerImpl*>(
55 layer_impl_tree_root->children()[1]); 65 layer_impl_tree_root->children()[1]);
56 66
57 EXPECT_EQ(cc_child1->horizontal_scrollbar_layer(), cc_child2); 67 EXPECT_EQ(cc_child1->horizontal_scrollbar_layer(), cc_child2);
58 } 68 }
59 69
60 TEST(ScrollbarLayerTest, ResolveScrollLayerPointer_ReverseOrder) { 70 TEST(ScrollbarLayerTest, ResolveScrollLayerPointer_ReverseOrder) {
61 scoped_ptr<FakeLayerTreeHost> host = FakeLayerTreeHost::Create(); 71 scoped_ptr<FakeLayerTreeHost> host = FakeLayerTreeHost::Create();
62 scoped_ptr<Scrollbar> scrollbar(new FakeScrollbar); 72 scoped_ptr<Scrollbar> scrollbar(new FakeScrollbar);
63 LayerImpl* layer_impl_tree_root = 73 LayerImpl* layer_impl_tree_root = LayerImplForScrollAreaAndScrollbar(
64 LayerImplForScrollAreaAndScrollbar(host.get(), scrollbar.Pass(), true); 74 host.get(), scrollbar.Pass(), true, false, 0);
65 75
66 ScrollbarLayerImpl* cc_child1 = static_cast<ScrollbarLayerImpl*>( 76 ScrollbarLayerImpl* cc_child1 = static_cast<ScrollbarLayerImpl*>(
67 layer_impl_tree_root->children()[0]); 77 layer_impl_tree_root->children()[0]);
68 LayerImpl* cc_child2 = layer_impl_tree_root->children()[1]; 78 LayerImpl* cc_child2 = layer_impl_tree_root->children()[1];
69 79
70 EXPECT_EQ(cc_child2->horizontal_scrollbar_layer(), cc_child1); 80 EXPECT_EQ(cc_child2->horizontal_scrollbar_layer(), cc_child1);
71 } 81 }
72 82
73 TEST(ScrollbarLayerTest, ShouldScrollNonOverlayOnMainThread) { 83 TEST(ScrollbarLayerTest, ShouldScrollNonOverlayOnMainThread) {
74 scoped_ptr<FakeLayerTreeHost> host = FakeLayerTreeHost::Create(); 84 scoped_ptr<FakeLayerTreeHost> host = FakeLayerTreeHost::Create();
75 85
76 // Create and attach a non-overlay scrollbar. 86 // Create and attach a non-overlay scrollbar.
77 scoped_ptr<Scrollbar> scrollbar(new FakeScrollbar); 87 scoped_ptr<Scrollbar> scrollbar(new FakeScrollbar);
78 LayerImpl* layer_impl_tree_root = 88 LayerImpl* layer_impl_tree_root = LayerImplForScrollAreaAndScrollbar(
79 LayerImplForScrollAreaAndScrollbar(host.get(), scrollbar.Pass(), false); 89 host.get(), scrollbar.Pass(), false, false, 0);
80 ScrollbarLayerImpl* scrollbar_layer_impl = 90 ScrollbarLayerImpl* scrollbar_layer_impl =
81 static_cast<ScrollbarLayerImpl*>(layer_impl_tree_root->children()[1]); 91 static_cast<ScrollbarLayerImpl*>(layer_impl_tree_root->children()[1]);
82 92
83 // When the scrollbar is not an overlay scrollbar, the scroll should be 93 // When the scrollbar is not an overlay scrollbar, the scroll should be
84 // responded to on the main thread as the compositor does not yet implement 94 // responded to on the main thread as the compositor does not yet implement
85 // scrollbar scrolling. 95 // scrollbar scrolling.
86 EXPECT_EQ(InputHandler::ScrollOnMainThread, 96 EXPECT_EQ(InputHandler::ScrollOnMainThread,
87 scrollbar_layer_impl->TryScroll(gfx::Point(0, 0), 97 scrollbar_layer_impl->TryScroll(gfx::Point(0, 0),
88 InputHandler::Gesture)); 98 InputHandler::Gesture));
89 99
90 // Create and attach an overlay scrollbar. 100 // Create and attach an overlay scrollbar.
91 scrollbar.reset(new FakeScrollbar(false, false, true)); 101 scrollbar.reset(new FakeScrollbar(false, false, true));
92 102
93 layer_impl_tree_root = 103 layer_impl_tree_root = LayerImplForScrollAreaAndScrollbar(
94 LayerImplForScrollAreaAndScrollbar(host.get(), scrollbar.Pass(), false); 104 host.get(), scrollbar.Pass(), false, false, 0);
95 scrollbar_layer_impl = 105 scrollbar_layer_impl =
96 static_cast<ScrollbarLayerImpl*>(layer_impl_tree_root->children()[1]); 106 static_cast<ScrollbarLayerImpl*>(layer_impl_tree_root->children()[1]);
97 107
98 // The user shouldn't be able to drag an overlay scrollbar and the scroll 108 // The user shouldn't be able to drag an overlay scrollbar and the scroll
99 // may be handled in the compositor. 109 // may be handled in the compositor.
100 EXPECT_EQ(InputHandler::ScrollIgnored, 110 EXPECT_EQ(InputHandler::ScrollIgnored,
101 scrollbar_layer_impl->TryScroll(gfx::Point(0, 0), 111 scrollbar_layer_impl->TryScroll(gfx::Point(0, 0),
102 InputHandler::Gesture)); 112 InputHandler::Gesture));
103 } 113 }
104 114
(...skipping 18 matching lines...) Expand all
123 layer_tree_root->AddChild(scrollbar_layer); 133 layer_tree_root->AddChild(scrollbar_layer);
124 134
125 layer_tree_root->SavePaintProperties(); 135 layer_tree_root->SavePaintProperties();
126 content_layer->SavePaintProperties(); 136 content_layer->SavePaintProperties();
127 137
128 LayerImpl* layer_impl_tree_root = host->CommitAndCreateLayerImplTree(); 138 LayerImpl* layer_impl_tree_root = host->CommitAndCreateLayerImplTree();
129 139
130 ScrollbarLayerImpl* cc_scrollbar_layer = 140 ScrollbarLayerImpl* cc_scrollbar_layer =
131 static_cast<ScrollbarLayerImpl*>(layer_impl_tree_root->children()[1]); 141 static_cast<ScrollbarLayerImpl*>(layer_impl_tree_root->children()[1]);
132 142
133 EXPECT_EQ(10.f, cc_scrollbar_layer->CurrentPos()); 143 EXPECT_EQ(10.f, cc_scrollbar_layer->current_pos());
134 EXPECT_EQ(30, cc_scrollbar_layer->Maximum()); 144 EXPECT_EQ(30, cc_scrollbar_layer->maximum());
135 145
136 layer_tree_root->SetScrollOffset(gfx::Vector2d(100, 200)); 146 layer_tree_root->SetScrollOffset(gfx::Vector2d(100, 200));
137 layer_tree_root->SetMaxScrollOffset(gfx::Vector2d(300, 500)); 147 layer_tree_root->SetMaxScrollOffset(gfx::Vector2d(300, 500));
138 layer_tree_root->SetBounds(gfx::Size(1000, 2000)); 148 layer_tree_root->SetBounds(gfx::Size(1000, 2000));
139 layer_tree_root->SavePaintProperties(); 149 layer_tree_root->SavePaintProperties();
140 content_layer->SetBounds(gfx::Size(1000, 2000)); 150 content_layer->SetBounds(gfx::Size(1000, 2000));
141 content_layer->SavePaintProperties(); 151 content_layer->SavePaintProperties();
142 152
143 ScrollbarAnimationController* scrollbar_controller = 153 ScrollbarAnimationController* scrollbar_controller =
144 layer_impl_tree_root->scrollbar_animation_controller(); 154 layer_impl_tree_root->scrollbar_animation_controller();
145 layer_impl_tree_root = host->CommitAndCreateLayerImplTree(); 155 layer_impl_tree_root = host->CommitAndCreateLayerImplTree();
146 EXPECT_EQ(scrollbar_controller, 156 EXPECT_EQ(scrollbar_controller,
147 layer_impl_tree_root->scrollbar_animation_controller()); 157 layer_impl_tree_root->scrollbar_animation_controller());
148 158
149 EXPECT_EQ(100.f, cc_scrollbar_layer->CurrentPos()); 159 EXPECT_EQ(100.f, cc_scrollbar_layer->current_pos());
150 EXPECT_EQ(300, cc_scrollbar_layer->Maximum()); 160 EXPECT_EQ(300, cc_scrollbar_layer->maximum());
151 161
152 layer_impl_tree_root->ScrollBy(gfx::Vector2d(12, 34)); 162 layer_impl_tree_root->ScrollBy(gfx::Vector2d(12, 34));
153 163
154 EXPECT_EQ(112.f, cc_scrollbar_layer->CurrentPos()); 164 EXPECT_EQ(112.f, cc_scrollbar_layer->current_pos());
155 EXPECT_EQ(300, cc_scrollbar_layer->Maximum()); 165 EXPECT_EQ(300, cc_scrollbar_layer->maximum());
156 } 166 }
157 167
158 TEST(ScrollbarLayerTest, SolidColorDrawQuads) { 168 TEST(ScrollbarLayerTest, SolidColorDrawQuads) {
169 const int thumb_thickness = 3;
170 const int track_length = 100;
171
159 LayerTreeSettings layer_tree_settings; 172 LayerTreeSettings layer_tree_settings;
160 layer_tree_settings.solid_color_scrollbars = true;
161 layer_tree_settings.solid_color_scrollbar_thickness_dip = 3;
162 scoped_ptr<FakeLayerTreeHost> host = 173 scoped_ptr<FakeLayerTreeHost> host =
163 FakeLayerTreeHost::Create(layer_tree_settings); 174 FakeLayerTreeHost::Create(layer_tree_settings);
164 175
165 scoped_ptr<Scrollbar> scrollbar(new FakeScrollbar(false, true, true)); 176 scoped_ptr<Scrollbar> scrollbar(new FakeScrollbar(false, true, true));
166 LayerImpl* layer_impl_tree_root = 177 LayerImpl* layer_impl_tree_root = LayerImplForScrollAreaAndScrollbar(
167 LayerImplForScrollAreaAndScrollbar(host.get(), scrollbar.Pass(), false); 178 host.get(), scrollbar.Pass(), false, true, thumb_thickness);
168 ScrollbarLayerImpl* scrollbar_layer_impl = 179 ScrollbarLayerImplBase* scrollbar_layer_impl =
169 static_cast<ScrollbarLayerImpl*>(layer_impl_tree_root->children()[1]); 180 static_cast<ScrollbarLayerImpl*>(layer_impl_tree_root->children()[1]);
170 scrollbar_layer_impl->set_thumb_thickness(3); 181 scrollbar_layer_impl->SetBounds(gfx::Size(track_length, thumb_thickness));
171 scrollbar_layer_impl->SetCurrentPos(10.f); 182 scrollbar_layer_impl->set_current_pos(10.f);
172 scrollbar_layer_impl->SetMaximum(100); 183 scrollbar_layer_impl->set_maximum(100);
173 scrollbar_layer_impl->set_track_length(100);
174 scrollbar_layer_impl->set_visible_to_total_length_ratio(0.4f); 184 scrollbar_layer_impl->set_visible_to_total_length_ratio(0.4f);
175 185
176 // Thickness should be overridden to 3. 186 // Thickness should be overridden to 3.
177 { 187 {
178 MockQuadCuller quad_culler; 188 MockQuadCuller quad_culler;
179 AppendQuadsData data; 189 AppendQuadsData data;
180 scrollbar_layer_impl->AppendQuads(&quad_culler, &data); 190 scrollbar_layer_impl->AppendQuads(&quad_culler, &data);
181 191
182 const QuadList& quads = quad_culler.quad_list(); 192 const QuadList& quads = quad_culler.quad_list();
183 ASSERT_EQ(1u, quads.size()); 193 ASSERT_EQ(1u, quads.size());
(...skipping 26 matching lines...) Expand all
210 scrollbar_layer_impl->AppendQuads(&quad_culler, &data); 220 scrollbar_layer_impl->AppendQuads(&quad_culler, &data);
211 221
212 const QuadList& quads = quad_culler.quad_list(); 222 const QuadList& quads = quad_culler.quad_list();
213 ASSERT_EQ(1u, quads.size()); 223 ASSERT_EQ(1u, quads.size());
214 EXPECT_EQ(DrawQuad::SOLID_COLOR, quads[0]->material); 224 EXPECT_EQ(DrawQuad::SOLID_COLOR, quads[0]->material);
215 EXPECT_RECT_EQ(gfx::Rect(8, 0, 20, 3), quads[0]->rect); 225 EXPECT_RECT_EQ(gfx::Rect(8, 0, 20, 3), quads[0]->rect);
216 } 226 }
217 } 227 }
218 228
219 TEST(ScrollbarLayerTest, LayerDrivenSolidColorDrawQuads) { 229 TEST(ScrollbarLayerTest, LayerDrivenSolidColorDrawQuads) {
230 const int thumb_thickness = 3;
enne (OOO) 2013/08/14 21:01:09 style nit: constants in chromium are kThumbThickne
wjmaclean 2013/08/15 20:09:40 Done.
231 const int track_length = 10;
232
220 LayerTreeSettings layer_tree_settings; 233 LayerTreeSettings layer_tree_settings;
221 layer_tree_settings.solid_color_scrollbars = true;
222 layer_tree_settings.solid_color_scrollbar_thickness_dip = 3;
223 scoped_ptr<FakeLayerTreeHost> host = 234 scoped_ptr<FakeLayerTreeHost> host =
224 FakeLayerTreeHost::Create(layer_tree_settings); 235 FakeLayerTreeHost::Create(layer_tree_settings);
225 236
226 scoped_ptr<Scrollbar> scrollbar(new FakeScrollbar(false, true, true)); 237 scoped_ptr<Scrollbar> scrollbar(new FakeScrollbar(false, true, true));
227 LayerImpl* layer_impl_tree_root = 238 LayerImpl* layer_impl_tree_root = LayerImplForScrollAreaAndScrollbar(
228 LayerImplForScrollAreaAndScrollbar(host.get(), scrollbar.Pass(), false); 239 host.get(), scrollbar.Pass(), false, true, thumb_thickness);
229 ScrollbarLayerImpl* scrollbar_layer_impl = 240 ScrollbarLayerImplBase* scrollbar_layer_impl =
230 static_cast<ScrollbarLayerImpl*>(layer_impl_tree_root->children()[1]); 241 static_cast<ScrollbarLayerImpl*>(layer_impl_tree_root->children()[1]);
231 242
232 scrollbar_layer_impl->set_thumb_thickness(3); 243 scrollbar_layer_impl->SetBounds(gfx::Size(track_length, thumb_thickness));
233 scrollbar_layer_impl->set_track_length(10); 244 scrollbar_layer_impl->set_current_pos(4.f);
234 scrollbar_layer_impl->SetCurrentPos(4.f); 245 scrollbar_layer_impl->set_maximum(8);
235 scrollbar_layer_impl->SetMaximum(8);
236 246
237 layer_impl_tree_root->SetScrollable(true); 247 layer_impl_tree_root->SetScrollable(true);
238 layer_impl_tree_root->SetHorizontalScrollbarLayer(scrollbar_layer_impl); 248 layer_impl_tree_root->SetHorizontalScrollbarLayer(scrollbar_layer_impl);
239 layer_impl_tree_root->SetMaxScrollOffset(gfx::Vector2d(8, 8)); 249 layer_impl_tree_root->SetMaxScrollOffset(gfx::Vector2d(8, 8));
240 layer_impl_tree_root->SetBounds(gfx::Size(2, 2)); 250 layer_impl_tree_root->SetBounds(gfx::Size(2, 2));
241 layer_impl_tree_root->ScrollBy(gfx::Vector2dF(4.f, 0.f)); 251 layer_impl_tree_root->ScrollBy(gfx::Vector2dF(4.f, 0.f));
242 252
243 { 253 {
244 MockQuadCuller quad_culler; 254 MockQuadCuller quad_culler;
245 AppendQuadsData data; 255 AppendQuadsData data;
246 scrollbar_layer_impl->AppendQuads(&quad_culler, &data); 256 scrollbar_layer_impl->AppendQuads(&quad_culler, &data);
247 257
248 const QuadList& quads = quad_culler.quad_list(); 258 const QuadList& quads = quad_culler.quad_list();
249 ASSERT_EQ(1u, quads.size()); 259 ASSERT_EQ(1u, quads.size());
250 EXPECT_EQ(DrawQuad::SOLID_COLOR, quads[0]->material); 260 EXPECT_EQ(DrawQuad::SOLID_COLOR, quads[0]->material);
251 EXPECT_RECT_EQ(gfx::Rect(3, 0, 3, 3), quads[0]->rect); 261 EXPECT_RECT_EQ(gfx::Rect(3, 0, 3, 3), quads[0]->rect);
252 } 262 }
253 } 263 }
254 264
255 class ScrollbarLayerSolidColorThumbTest : public testing::Test { 265 class ScrollbarLayerSolidColorThumbTest : public testing::Test {
256 public: 266 public:
257 ScrollbarLayerSolidColorThumbTest() { 267 ScrollbarLayerSolidColorThumbTest() {
258 LayerTreeSettings layer_tree_settings; 268 LayerTreeSettings layer_tree_settings;
259 layer_tree_settings.solid_color_scrollbars = true;
260 host_impl_.reset(new FakeLayerTreeHostImpl(layer_tree_settings, &proxy_)); 269 host_impl_.reset(new FakeLayerTreeHostImpl(layer_tree_settings, &proxy_));
261 270
262 horizontal_scrollbar_layer_ = ScrollbarLayerImpl::Create( 271 const int thumb_thickness = 3;
263 host_impl_->active_tree(), 1, HORIZONTAL); 272 const SkColor color = SkColorSetARGB(128, 128, 128, 128);
264 vertical_scrollbar_layer_ = ScrollbarLayerImpl::Create( 273
265 host_impl_->active_tree(), 2, VERTICAL); 274 horizontal_scrollbar_layer_ = SolidColorScrollbarLayerImpl::Create(
275 host_impl_->active_tree(), 1, HORIZONTAL, thumb_thickness, color);
276 vertical_scrollbar_layer_ = SolidColorScrollbarLayerImpl::Create(
277 host_impl_->active_tree(),
278 2,
279 VERTICAL,
280 thumb_thickness, color);
266 } 281 }
267 282
268 protected: 283 protected:
269 FakeImplProxy proxy_; 284 FakeImplProxy proxy_;
270 scoped_ptr<FakeLayerTreeHostImpl> host_impl_; 285 scoped_ptr<FakeLayerTreeHostImpl> host_impl_;
271 scoped_ptr<ScrollbarLayerImpl> horizontal_scrollbar_layer_; 286 scoped_ptr<SolidColorScrollbarLayerImpl> horizontal_scrollbar_layer_;
272 scoped_ptr<ScrollbarLayerImpl> vertical_scrollbar_layer_; 287 scoped_ptr<SolidColorScrollbarLayerImpl> vertical_scrollbar_layer_;
273 }; 288 };
274 289
275 TEST_F(ScrollbarLayerSolidColorThumbTest, SolidColorThumbLength) { 290 TEST_F(ScrollbarLayerSolidColorThumbTest, SolidColorThumbLength) {
276 horizontal_scrollbar_layer_->SetCurrentPos(0); 291 horizontal_scrollbar_layer_->set_current_pos(0);
277 horizontal_scrollbar_layer_->SetMaximum(10); 292 horizontal_scrollbar_layer_->set_maximum(10);
278 horizontal_scrollbar_layer_->set_thumb_thickness(3);
279 293
280 // Simple case - one third of the scrollable area is visible, so the thumb 294 // Simple case - one third of the scrollable area is visible, so the thumb
281 // should be one third as long as the track. 295 // should be one third as long as the track.
282 horizontal_scrollbar_layer_->set_visible_to_total_length_ratio(0.33f); 296 horizontal_scrollbar_layer_->set_visible_to_total_length_ratio(0.33f);
283 horizontal_scrollbar_layer_->set_track_length(100); 297 horizontal_scrollbar_layer_->SetBounds(gfx::Size(100, 3));
284 EXPECT_EQ(33, horizontal_scrollbar_layer_->ComputeThumbQuadRect().width()); 298 EXPECT_EQ(33, horizontal_scrollbar_layer_->ComputeThumbQuadRect().width());
285 299
286 // The thumb's length should never be less than its thickness. 300 // The thumb's length should never be less than its thickness.
287 horizontal_scrollbar_layer_->set_visible_to_total_length_ratio(0.01f); 301 horizontal_scrollbar_layer_->set_visible_to_total_length_ratio(0.01f);
288 horizontal_scrollbar_layer_->set_track_length(100); 302 horizontal_scrollbar_layer_->SetBounds(gfx::Size(100, 3));
289 EXPECT_EQ(3, horizontal_scrollbar_layer_->ComputeThumbQuadRect().width()); 303 EXPECT_EQ(3, horizontal_scrollbar_layer_->ComputeThumbQuadRect().width());
290 } 304 }
291 305
292 TEST_F(ScrollbarLayerSolidColorThumbTest, SolidColorThumbPosition) { 306 TEST_F(ScrollbarLayerSolidColorThumbTest, SolidColorThumbPosition) {
293 horizontal_scrollbar_layer_->set_track_length(100); 307 horizontal_scrollbar_layer_->SetBounds(gfx::Size(100, 3));
294 horizontal_scrollbar_layer_->set_visible_to_total_length_ratio(0.1f); 308 horizontal_scrollbar_layer_->set_visible_to_total_length_ratio(0.1f);
295 horizontal_scrollbar_layer_->set_thumb_thickness(3);
296 309
297 horizontal_scrollbar_layer_->SetCurrentPos(0); 310 horizontal_scrollbar_layer_->set_current_pos(0);
298 horizontal_scrollbar_layer_->SetMaximum(100); 311 horizontal_scrollbar_layer_->set_maximum(100);
299 EXPECT_EQ(0, horizontal_scrollbar_layer_->ComputeThumbQuadRect().x()); 312 EXPECT_EQ(0, horizontal_scrollbar_layer_->ComputeThumbQuadRect().x());
300 EXPECT_EQ(10, horizontal_scrollbar_layer_->ComputeThumbQuadRect().width()); 313 EXPECT_EQ(10, horizontal_scrollbar_layer_->ComputeThumbQuadRect().width());
301 314
302 horizontal_scrollbar_layer_->SetCurrentPos(100); 315 horizontal_scrollbar_layer_->set_current_pos(100);
303 // The thumb is 10px long and the track is 100px, so the maximum thumb 316 // The thumb is 10px long and the track is 100px, so the maximum thumb
304 // position is 90px. 317 // position is 90px.
305 EXPECT_EQ(90, horizontal_scrollbar_layer_->ComputeThumbQuadRect().x()); 318 EXPECT_EQ(90, horizontal_scrollbar_layer_->ComputeThumbQuadRect().x());
306 319
307 horizontal_scrollbar_layer_->SetCurrentPos(80); 320 horizontal_scrollbar_layer_->set_current_pos(80);
308 // The scroll position is 80% of the maximum, so the thumb's position should 321 // The scroll position is 80% of the maximum, so the thumb's position should
309 // be at 80% of its maximum or 72px. 322 // be at 80% of its maximum or 72px.
310 EXPECT_EQ(72, horizontal_scrollbar_layer_->ComputeThumbQuadRect().x()); 323 EXPECT_EQ(72, horizontal_scrollbar_layer_->ComputeThumbQuadRect().x());
311 } 324 }
312 325
313 TEST_F(ScrollbarLayerSolidColorThumbTest, SolidColorThumbVerticalAdjust) { 326 TEST_F(ScrollbarLayerSolidColorThumbTest, SolidColorThumbVerticalAdjust) {
314 ScrollbarLayerImpl* layers[2] = 327 SolidColorScrollbarLayerImpl* layers[2] =
315 { horizontal_scrollbar_layer_.get(), vertical_scrollbar_layer_.get() }; 328 { horizontal_scrollbar_layer_.get(), vertical_scrollbar_layer_.get() };
316 for (size_t i = 0; i < 2; ++i) { 329 for (size_t i = 0; i < 2; ++i) {
317 layers[i]->set_track_length(100);
318 layers[i]->set_visible_to_total_length_ratio(0.2f); 330 layers[i]->set_visible_to_total_length_ratio(0.2f);
319 layers[i]->set_thumb_thickness(3); 331 layers[i]->set_current_pos(25);
320 layers[i]->SetCurrentPos(25); 332 layers[i]->set_maximum(100);
321 layers[i]->SetMaximum(100);
322 } 333 }
334 layers[0]->SetBounds(gfx::Size(100, 3));
335 layers[1]->SetBounds(gfx::Size(3, 100));
323 336
324 EXPECT_RECT_EQ(gfx::RectF(20.f, 0.f, 20.f, 3.f), 337 EXPECT_RECT_EQ(gfx::RectF(20.f, 0.f, 20.f, 3.f),
325 horizontal_scrollbar_layer_->ComputeThumbQuadRect()); 338 horizontal_scrollbar_layer_->ComputeThumbQuadRect());
326 EXPECT_RECT_EQ(gfx::RectF(0.f, 20.f, 3.f, 20.f), 339 EXPECT_RECT_EQ(gfx::RectF(0.f, 20.f, 3.f, 20.f),
327 vertical_scrollbar_layer_->ComputeThumbQuadRect()); 340 vertical_scrollbar_layer_->ComputeThumbQuadRect());
328 341
329 horizontal_scrollbar_layer_->set_vertical_adjust(10.f); 342 horizontal_scrollbar_layer_->set_vertical_adjust(10.f);
330 vertical_scrollbar_layer_->set_vertical_adjust(10.f); 343 vertical_scrollbar_layer_->set_vertical_adjust(10.f);
331 344
332 // The vertical adjustment factor has two effects: 345 // The vertical adjustment factor has two effects:
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
408 Initialize(NULL); 421 Initialize(NULL);
409 } 422 }
410 }; 423 };
411 424
412 425
413 class ScrollbarLayerTestResourceCreation : public testing::Test { 426 class ScrollbarLayerTestResourceCreation : public testing::Test {
414 public: 427 public:
415 ScrollbarLayerTestResourceCreation() 428 ScrollbarLayerTestResourceCreation()
416 : fake_client_(FakeLayerTreeHostClient::DIRECT_3D) {} 429 : fake_client_(FakeLayerTreeHostClient::DIRECT_3D) {}
417 430
418 void TestResourceUpload(size_t expected_resources) { 431 void TestResourceUpload(size_t expected_resources,
432 bool use_solid_color_scrollbar) {
419 layer_tree_host_.reset( 433 layer_tree_host_.reset(
420 new MockLayerTreeHost(&fake_client_, layer_tree_settings_)); 434 new MockLayerTreeHost(&fake_client_, layer_tree_settings_));
421 435
422 scoped_ptr<Scrollbar> scrollbar(new FakeScrollbar(false, true, false)); 436 scoped_ptr<Scrollbar> scrollbar(new FakeScrollbar(false, true, false));
423 scoped_refptr<Layer> layer_tree_root = Layer::Create(); 437 scoped_refptr<Layer> layer_tree_root = Layer::Create();
424 scoped_refptr<Layer> content_layer = Layer::Create(); 438 scoped_refptr<Layer> content_layer = Layer::Create();
425 scoped_refptr<Layer> scrollbar_layer = 439 scoped_refptr<Layer> scrollbar_layer;
426 ScrollbarLayer::Create(scrollbar.Pass(), layer_tree_root->id()); 440 if (use_solid_color_scrollbar) {
441 SkColor color = SkColorSetARGB(128, 128, 128, 128);
442 int thumb_thickness = 3;
443 scrollbar_layer =
444 SolidColorScrollbarLayer::Create(scrollbar->Orientation(),
445 thumb_thickness,
446 color,
447 layer_tree_root->id());
448 } else {
449 scrollbar_layer =
450 ScrollbarLayer::Create(scrollbar.Pass(), layer_tree_root->id());
451 }
427 layer_tree_root->AddChild(content_layer); 452 layer_tree_root->AddChild(content_layer);
428 layer_tree_root->AddChild(scrollbar_layer); 453 layer_tree_root->AddChild(scrollbar_layer);
429 454
430 layer_tree_host_->InitializeOutputSurfaceIfNeeded(); 455 layer_tree_host_->InitializeOutputSurfaceIfNeeded();
431 layer_tree_host_->contents_texture_manager()-> 456 layer_tree_host_->contents_texture_manager()->
432 SetMaxMemoryLimitBytes(1024 * 1024); 457 SetMaxMemoryLimitBytes(1024 * 1024);
433 layer_tree_host_->SetRootLayer(layer_tree_root); 458 layer_tree_host_->SetRootLayer(layer_tree_root);
434 459
435 scrollbar_layer->SetIsDrawable(true); 460 scrollbar_layer->SetIsDrawable(true);
436 scrollbar_layer->SetBounds(gfx::Size(100, 100)); 461 scrollbar_layer->SetBounds(gfx::Size(100, 100));
(...skipping 26 matching lines...) Expand all
463 scrollbar_layer->ClearRenderSurface(); 488 scrollbar_layer->ClearRenderSurface();
464 } 489 }
465 490
466 protected: 491 protected:
467 FakeLayerTreeHostClient fake_client_; 492 FakeLayerTreeHostClient fake_client_;
468 LayerTreeSettings layer_tree_settings_; 493 LayerTreeSettings layer_tree_settings_;
469 scoped_ptr<MockLayerTreeHost> layer_tree_host_; 494 scoped_ptr<MockLayerTreeHost> layer_tree_host_;
470 }; 495 };
471 496
472 TEST_F(ScrollbarLayerTestResourceCreation, ResourceUpload) { 497 TEST_F(ScrollbarLayerTestResourceCreation, ResourceUpload) {
473 layer_tree_settings_.solid_color_scrollbars = false; 498 TestResourceUpload(2, false);
474 TestResourceUpload(2);
475 } 499 }
476 500
477 TEST_F(ScrollbarLayerTestResourceCreation, SolidColorNoResourceUpload) { 501 TEST_F(ScrollbarLayerTestResourceCreation, SolidColorNoResourceUpload) {
478 layer_tree_settings_.solid_color_scrollbars = true; 502 TestResourceUpload(0, true);
479 TestResourceUpload(0);
480 } 503 }
481 504
482 class ScaledScrollbarLayerTestResourceCreation : public testing::Test { 505 class ScaledScrollbarLayerTestResourceCreation : public testing::Test {
483 public: 506 public:
484 ScaledScrollbarLayerTestResourceCreation() 507 ScaledScrollbarLayerTestResourceCreation()
485 : fake_client_(FakeLayerTreeHostClient::DIRECT_3D) {} 508 : fake_client_(FakeLayerTreeHostClient::DIRECT_3D) {}
486 509
487 void TestResourceUpload(size_t expected_resources, const float test_scale) { 510 void TestResourceUpload(size_t expected_resources, const float test_scale) {
488 layer_tree_host_.reset( 511 layer_tree_host_.reset(
489 new MockLayerTreeHost(&fake_client_, layer_tree_settings_)); 512 new MockLayerTreeHost(&fake_client_, layer_tree_settings_));
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
559 scrollbar_layer->ClearRenderSurface(); 582 scrollbar_layer->ClearRenderSurface();
560 } 583 }
561 584
562 protected: 585 protected:
563 FakeLayerTreeHostClient fake_client_; 586 FakeLayerTreeHostClient fake_client_;
564 LayerTreeSettings layer_tree_settings_; 587 LayerTreeSettings layer_tree_settings_;
565 scoped_ptr<MockLayerTreeHost> layer_tree_host_; 588 scoped_ptr<MockLayerTreeHost> layer_tree_host_;
566 }; 589 };
567 590
568 TEST_F(ScaledScrollbarLayerTestResourceCreation, ScaledResourceUpload) { 591 TEST_F(ScaledScrollbarLayerTestResourceCreation, ScaledResourceUpload) {
569 layer_tree_settings_.solid_color_scrollbars = false;
570 // Pick a test scale that moves the scrollbar's (non-zero) position to 592 // Pick a test scale that moves the scrollbar's (non-zero) position to
571 // a non-pixel-aligned location. 593 // a non-pixel-aligned location.
572 TestResourceUpload(2, 1.41f); 594 TestResourceUpload(2, 1.41f);
573 } 595 }
574 596
575 } // namespace 597 } // namespace
576 } // namespace cc 598 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698