| OLD | NEW |
| 1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 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/trees/layer_tree_host_common.h" | 5 #include "cc/trees/layer_tree_host_common.h" |
| 6 | 6 |
| 7 #include <set> | 7 #include <set> |
| 8 | 8 |
| 9 #include "cc/animation/layer_animation_controller.h" | 9 #include "cc/animation/layer_animation_controller.h" |
| 10 #include "cc/base/math_util.h" | 10 #include "cc/base/math_util.h" |
| (...skipping 404 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 415 sublayer->SetContentsScale(kPageScale * kDeviceScale, | 415 sublayer->SetContentsScale(kPageScale * kDeviceScale, |
| 416 kPageScale * kDeviceScale); | 416 kPageScale * kDeviceScale); |
| 417 SetLayerPropertiesForTesting(sublayer, | 417 SetLayerPropertiesForTesting(sublayer, |
| 418 identity_matrix, | 418 identity_matrix, |
| 419 identity_matrix, | 419 identity_matrix, |
| 420 gfx::Point(), | 420 gfx::Point(), |
| 421 gfx::PointF(), | 421 gfx::PointF(), |
| 422 gfx::Size(500, 500), | 422 gfx::Size(500, 500), |
| 423 false); | 423 false); |
| 424 | 424 |
| 425 scoped_ptr<LayerImpl> scroll_layerScopedPtr( | 425 scoped_ptr<LayerImpl> scroll_layer_scoped_ptr( |
| 426 LayerImpl::Create(host_impl.active_tree(), 2)); | 426 LayerImpl::Create(host_impl.active_tree(), 2)); |
| 427 LayerImpl* scroll_layer = scroll_layerScopedPtr.get(); | 427 LayerImpl* scroll_layer = scroll_layer_scoped_ptr.get(); |
| 428 SetLayerPropertiesForTesting(scroll_layer, | 428 SetLayerPropertiesForTesting(scroll_layer, |
| 429 identity_matrix, | 429 identity_matrix, |
| 430 identity_matrix, | 430 identity_matrix, |
| 431 gfx::PointF(), | 431 gfx::PointF(), |
| 432 gfx::PointF(), | 432 gfx::PointF(), |
| 433 gfx::Size(10, 20), | 433 gfx::Size(10, 20), |
| 434 false); | 434 false); |
| 435 scroll_layer->SetScrollable(true); | 435 |
| 436 scroll_layer->SetMaxScrollOffset(kMaxScrollOffset); | 436 scoped_ptr<LayerImpl> clip_layer_scoped_ptr( |
| 437 LayerImpl::Create(host_impl.active_tree(), 4)); |
| 438 LayerImpl* clip_layer = clip_layer_scoped_ptr.get(); |
| 439 |
| 440 scroll_layer->SetScrollable(clip_layer->id()); |
| 441 clip_layer->SetBounds( |
| 442 gfx::Size(scroll_layer->bounds().width() + kMaxScrollOffset.x(), |
| 443 scroll_layer->bounds().height() + kMaxScrollOffset.y())); |
| 437 scroll_layer->SetScrollOffset(kScrollOffset); | 444 scroll_layer->SetScrollOffset(kScrollOffset); |
| 438 scroll_layer->SetScrollDelta(kScrollDelta); | 445 scroll_layer->SetScrollDelta(kScrollDelta); |
| 439 gfx::Transform impl_transform; | 446 gfx::Transform impl_transform; |
| 440 scroll_layer->AddChild(sublayer_scoped_ptr.Pass()); | 447 scroll_layer->AddChild(sublayer_scoped_ptr.Pass()); |
| 448 clip_layer->AddChild(scroll_layer_scoped_ptr.Pass()); |
| 441 | 449 |
| 442 scoped_ptr<LayerImpl> root(LayerImpl::Create(host_impl.active_tree(), 3)); | 450 scoped_ptr<LayerImpl> root(LayerImpl::Create(host_impl.active_tree(), 3)); |
| 443 SetLayerPropertiesForTesting(root.get(), | 451 SetLayerPropertiesForTesting(root.get(), |
| 444 identity_matrix, | 452 identity_matrix, |
| 445 identity_matrix, | 453 identity_matrix, |
| 446 gfx::PointF(), | 454 gfx::PointF(), |
| 447 gfx::PointF(), | 455 gfx::PointF(), |
| 448 gfx::Size(3, 4), | 456 gfx::Size(3, 4), |
| 449 false); | 457 false); |
| 450 root->AddChild(scroll_layerScopedPtr.Pass()); | 458 root->AddChild(clip_layer_scoped_ptr.Pass()); |
| 451 | 459 |
| 452 ExecuteCalculateDrawProperties( | 460 ExecuteCalculateDrawProperties( |
| 453 root.get(), kDeviceScale, kPageScale, scroll_layer->parent()); | 461 root.get(), kDeviceScale, kPageScale, scroll_layer->parent()); |
| 454 gfx::Transform expected_transform = identity_matrix; | 462 gfx::Transform expected_transform = identity_matrix; |
| 455 gfx::PointF sub_layer_screen_position = kScrollLayerPosition - kScrollDelta; | 463 gfx::PointF sub_layer_screen_position = kScrollLayerPosition - kScrollDelta; |
| 456 sub_layer_screen_position.Scale(kPageScale * kDeviceScale); | 464 sub_layer_screen_position.Scale(kPageScale * kDeviceScale); |
| 457 expected_transform.Translate(MathUtil::Round(sub_layer_screen_position.x()), | 465 expected_transform.Translate(MathUtil::Round(sub_layer_screen_position.x()), |
| 458 MathUtil::Round(sub_layer_screen_position.y())); | 466 MathUtil::Round(sub_layer_screen_position.y())); |
| 459 EXPECT_TRANSFORMATION_MATRIX_EQ(expected_transform, | 467 EXPECT_TRANSFORMATION_MATRIX_EQ(expected_transform, |
| 460 sublayer->draw_transform()); | 468 sublayer->draw_transform()); |
| (...skipping 912 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1373 EXPECT_TRANSFORMATION_MATRIX_EQ(identity_matrix, | 1381 EXPECT_TRANSFORMATION_MATRIX_EQ(identity_matrix, |
| 1374 grand_child->draw_transform()); | 1382 grand_child->draw_transform()); |
| 1375 } | 1383 } |
| 1376 | 1384 |
| 1377 TEST_F(LayerTreeHostCommonTest, TransformAboveRootLayer) { | 1385 TEST_F(LayerTreeHostCommonTest, TransformAboveRootLayer) { |
| 1378 // Transformations applied at the root of the tree should be forwarded | 1386 // Transformations applied at the root of the tree should be forwarded |
| 1379 // to child layers instead of applied to the root RenderSurface. | 1387 // to child layers instead of applied to the root RenderSurface. |
| 1380 const gfx::Transform identity_matrix; | 1388 const gfx::Transform identity_matrix; |
| 1381 scoped_refptr<Layer> root = Layer::Create(); | 1389 scoped_refptr<Layer> root = Layer::Create(); |
| 1382 scoped_refptr<Layer> child = Layer::Create(); | 1390 scoped_refptr<Layer> child = Layer::Create(); |
| 1383 child->SetScrollable(true); | 1391 child->SetScrollable(root.get()); |
| 1384 root->AddChild(child); | 1392 root->AddChild(child); |
| 1385 | 1393 |
| 1386 scoped_ptr<FakeLayerTreeHost> host = FakeLayerTreeHost::Create(); | 1394 scoped_ptr<FakeLayerTreeHost> host = FakeLayerTreeHost::Create(); |
| 1387 host->SetRootLayer(root); | 1395 host->SetRootLayer(root); |
| 1388 | 1396 |
| 1389 SetLayerPropertiesForTesting(root.get(), | 1397 SetLayerPropertiesForTesting(root.get(), |
| 1390 identity_matrix, | 1398 identity_matrix, |
| 1391 identity_matrix, | 1399 identity_matrix, |
| 1392 gfx::PointF(), | 1400 gfx::PointF(), |
| 1393 gfx::PointF(), | 1401 gfx::PointF(), |
| (...skipping 7132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8526 // root (a render surface) | 8534 // root (a render surface) |
| 8527 // + clip_parent (masks to bounds) | 8535 // + clip_parent (masks to bounds) |
| 8528 // + render_surface1 (sets opacity) | 8536 // + render_surface1 (sets opacity) |
| 8529 // + intervening (masks to bounds AND scrolls) | 8537 // + intervening (masks to bounds AND scrolls) |
| 8530 // + render_surface2 (also sets opacity) | 8538 // + render_surface2 (also sets opacity) |
| 8531 // + clip_child | 8539 // + clip_child |
| 8532 // | 8540 // |
| 8533 scoped_refptr<Layer> root = Layer::Create(); | 8541 scoped_refptr<Layer> root = Layer::Create(); |
| 8534 scoped_refptr<Layer> clip_parent = Layer::Create(); | 8542 scoped_refptr<Layer> clip_parent = Layer::Create(); |
| 8535 scoped_refptr<Layer> render_surface1 = Layer::Create(); | 8543 scoped_refptr<Layer> render_surface1 = Layer::Create(); |
| 8544 scoped_refptr<Layer> clip_intervening = Layer::Create(); |
| 8536 scoped_refptr<Layer> intervening = Layer::Create(); | 8545 scoped_refptr<Layer> intervening = Layer::Create(); |
| 8537 scoped_refptr<Layer> render_surface2 = Layer::Create(); | 8546 scoped_refptr<Layer> render_surface2 = Layer::Create(); |
| 8538 scoped_refptr<LayerWithForcedDrawsContent> clip_child = | 8547 scoped_refptr<LayerWithForcedDrawsContent> clip_child = |
| 8539 make_scoped_refptr(new LayerWithForcedDrawsContent); | 8548 make_scoped_refptr(new LayerWithForcedDrawsContent); |
| 8540 | 8549 |
| 8541 root->AddChild(clip_parent); | 8550 root->AddChild(clip_parent); |
| 8542 clip_parent->AddChild(render_surface1); | 8551 clip_parent->AddChild(render_surface1); |
| 8543 render_surface1->AddChild(intervening); | 8552 render_surface1->AddChild(clip_intervening); |
| 8553 clip_intervening->AddChild(intervening); |
| 8544 intervening->AddChild(render_surface2); | 8554 intervening->AddChild(render_surface2); |
| 8545 render_surface2->AddChild(clip_child); | 8555 render_surface2->AddChild(clip_child); |
| 8546 | 8556 |
| 8547 clip_child->SetClipParent(clip_parent.get()); | 8557 clip_child->SetClipParent(clip_parent.get()); |
| 8548 | 8558 |
| 8549 intervening->SetMasksToBounds(true); | 8559 intervening->SetMasksToBounds(true); |
| 8550 clip_parent->SetMasksToBounds(true); | 8560 clip_parent->SetMasksToBounds(true); |
| 8551 intervening->SetScrollable(true); | 8561 intervening->SetScrollable(clip_intervening.get()); |
| 8552 intervening->SetMaxScrollOffset(gfx::Vector2d(50, 50)); | 8562 clip_intervening->SetBounds(gfx::Size(5, 5)); |
| 8553 intervening->SetScrollOffset(gfx::Vector2d(3, 3)); | 8563 intervening->SetScrollOffset(gfx::Vector2d(3, 3)); |
| 8554 | 8564 |
| 8555 render_surface1->SetForceRenderSurface(true); | 8565 render_surface1->SetForceRenderSurface(true); |
| 8556 render_surface2->SetForceRenderSurface(true); | 8566 render_surface2->SetForceRenderSurface(true); |
| 8557 | 8567 |
| 8558 gfx::Transform translation_transform; | 8568 gfx::Transform translation_transform; |
| 8559 translation_transform.Translate(2, 2); | 8569 translation_transform.Translate(2, 2); |
| 8560 | 8570 |
| 8561 gfx::Transform identity_transform; | 8571 gfx::Transform identity_transform; |
| 8562 SetLayerPropertiesForTesting(root.get(), | 8572 SetLayerPropertiesForTesting(root.get(), |
| (...skipping 15 matching lines...) Expand all Loading... |
| 8578 identity_transform, | 8588 identity_transform, |
| 8579 gfx::PointF(), | 8589 gfx::PointF(), |
| 8580 gfx::PointF(), | 8590 gfx::PointF(), |
| 8581 gfx::Size(10, 10), | 8591 gfx::Size(10, 10), |
| 8582 false); | 8592 false); |
| 8583 SetLayerPropertiesForTesting(intervening.get(), | 8593 SetLayerPropertiesForTesting(intervening.get(), |
| 8584 identity_transform, | 8594 identity_transform, |
| 8585 identity_transform, | 8595 identity_transform, |
| 8586 gfx::PointF(), | 8596 gfx::PointF(), |
| 8587 gfx::PointF(1.f, 1.f), | 8597 gfx::PointF(1.f, 1.f), |
| 8588 gfx::Size(5, 5), | 8598 gfx::Size(55, 55), |
| 8589 false); | 8599 false); |
| 8590 SetLayerPropertiesForTesting(render_surface2.get(), | 8600 SetLayerPropertiesForTesting(render_surface2.get(), |
| 8591 identity_transform, | 8601 identity_transform, |
| 8592 identity_transform, | 8602 identity_transform, |
| 8593 gfx::PointF(), | 8603 gfx::PointF(), |
| 8594 gfx::PointF(), | 8604 gfx::PointF(), |
| 8595 gfx::Size(10, 10), | 8605 gfx::Size(10, 10), |
| 8596 false); | 8606 false); |
| 8597 SetLayerPropertiesForTesting(clip_child.get(), | 8607 SetLayerPropertiesForTesting(clip_child.get(), |
| 8598 identity_transform, | 8608 identity_transform, |
| (...skipping 944 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9543 // due to layer sorting). | 9553 // due to layer sorting). |
| 9544 EXPECT_EQ(4u, root->render_surface()->layer_list().size()); | 9554 EXPECT_EQ(4u, root->render_surface()->layer_list().size()); |
| 9545 EXPECT_EQ(5, root->render_surface()->layer_list().at(0)->id()); | 9555 EXPECT_EQ(5, root->render_surface()->layer_list().at(0)->id()); |
| 9546 EXPECT_EQ(6, root->render_surface()->layer_list().at(1)->id()); | 9556 EXPECT_EQ(6, root->render_surface()->layer_list().at(1)->id()); |
| 9547 EXPECT_EQ(7, root->render_surface()->layer_list().at(2)->id()); | 9557 EXPECT_EQ(7, root->render_surface()->layer_list().at(2)->id()); |
| 9548 EXPECT_EQ(4, root->render_surface()->layer_list().at(3)->id()); | 9558 EXPECT_EQ(4, root->render_surface()->layer_list().at(3)->id()); |
| 9549 } | 9559 } |
| 9550 | 9560 |
| 9551 } // namespace | 9561 } // namespace |
| 9552 } // namespace cc | 9562 } // namespace cc |
| OLD | NEW |