OLD | NEW |
---|---|
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 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 <string> | |
Ian Vollick
2011/10/22 01:06:03
Is this used?
| |
6 | |
5 #include "base/basictypes.h" | 7 #include "base/basictypes.h" |
6 #include "base/compiler_specific.h" | 8 #include "base/compiler_specific.h" |
7 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
8 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
9 #include "ui/gfx/canvas_skia.h" | 11 #include "ui/gfx/canvas_skia.h" |
10 #include "ui/gfx/compositor/compositor_observer.h" | 12 #include "ui/gfx/compositor/compositor_observer.h" |
11 #include "ui/gfx/compositor/layer.h" | 13 #include "ui/gfx/compositor/layer.h" |
12 #include "ui/gfx/compositor/test_compositor.h" | 14 #include "ui/gfx/compositor/test_compositor.h" |
13 #include "ui/gfx/compositor/test_compositor_host.h" | 15 #include "ui/gfx/compositor/test_compositor_host.h" |
14 | 16 |
(...skipping 513 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
528 | 530 |
529 scoped_ptr<Layer> child1(CreateTextureLayer(gfx::Rect(50, 50, 100, 100))); | 531 scoped_ptr<Layer> child1(CreateTextureLayer(gfx::Rect(50, 50, 100, 100))); |
530 parent->Add(child1.get()); | 532 parent->Add(child1.get()); |
531 | 533 |
532 scoped_ptr<Layer> child2(CreateTextureLayer(gfx::Rect(75, 75, 200, 200))); | 534 scoped_ptr<Layer> child2(CreateTextureLayer(gfx::Rect(75, 75, 200, 200))); |
533 parent->Add(child2.get()); | 535 parent->Add(child2.get()); |
534 | 536 |
535 EXPECT_EQ(gfx::Rect(75, 75, 200, 200), parent->hole_rect()); | 537 EXPECT_EQ(gfx::Rect(75, 75, 200, 200), parent->hole_rect()); |
536 } | 538 } |
537 | 539 |
540 // Verifies that the largest hole in the draw order is picked | |
541 TEST_F(LayerWithNullDelegateTest, HoleGeneratedFromLeaf) { | |
542 // Layer tree looks like: | |
543 // node 1 | |
544 // |_ node 11 | |
545 // |_ node 111 | |
546 // |_ node 12 | |
547 // |_ node 121 | |
548 | |
549 scoped_ptr<Layer> node1(CreateTextureRootLayer(gfx::Rect(0, 0, 400, 400))); | |
550 | |
551 scoped_ptr<Layer> node11(CreateTextureLayer(gfx::Rect(50, 50, 100, 100))); | |
552 node1->Add(node11.get()); | |
553 | |
554 scoped_ptr<Layer> node12(CreateTextureLayer(gfx::Rect(75, 75, 200, 200))); | |
555 node1->Add(node12.get()); | |
556 | |
557 scoped_ptr<Layer> node111(CreateTextureLayer(gfx::Rect(10, 10, 20, 20))); | |
558 node11->Add(node111.get()); | |
559 | |
560 scoped_ptr<Layer> node121(CreateTextureLayer(gfx::Rect(10, 10, 190, 190))); | |
561 node12->Add(node121.get()); | |
562 | |
563 EXPECT_EQ(gfx::Rect(75, 75, 200, 200), node1->hole_rect()); | |
564 EXPECT_EQ(gfx::Rect(35, 35, 65, 65), node11->hole_rect()); | |
565 EXPECT_EQ(gfx::Rect(10, 10, 190, 190), node12->hole_rect()); | |
566 } | |
567 | |
568 // Verifies that a layer can only punch a hole if the opacity of the layer | |
569 // punching the hole and the layer being punched is the same. | |
570 TEST_F(LayerWithNullDelegateTest, HoleWithRelativeOpacity) { | |
571 // Layer tree looks like: | |
572 // node 1 | |
573 // |_ node 11 | |
574 // |_ node 111 | |
575 | |
576 scoped_ptr<Layer> node1(CreateTextureRootLayer(gfx::Rect(0, 0, 400, 400))); | |
577 | |
578 scoped_ptr<Layer> node11(CreateTextureLayer(gfx::Rect(50, 50, 100, 100))); | |
579 node1->Add(node11.get()); | |
580 | |
581 scoped_ptr<Layer> node111(CreateTextureLayer(gfx::Rect(10, 10, 20, 20))); | |
582 node11->Add(node111.get()); | |
583 | |
584 EXPECT_EQ(gfx::Rect(50, 50, 100, 100), node1->hole_rect()); | |
585 EXPECT_EQ(gfx::Rect(10, 10, 20, 20), node11->hole_rect()); | |
586 | |
587 // Combined opacity node11 = combined opacity node111 | |
588 node11->SetOpacity(0.5f); | |
589 EXPECT_TRUE(node1->hole_rect().IsEmpty()); | |
590 EXPECT_EQ(gfx::Rect(10, 10, 20, 20), node11->hole_rect()); | |
591 | |
592 // Combined opacity of node11 != combind opacity node111. | |
593 node111->SetOpacity(0.5f); | |
594 EXPECT_TRUE(node1->hole_rect().IsEmpty()); | |
595 EXPECT_TRUE(node11->hole_rect().IsEmpty()); | |
596 } | |
597 | |
598 // Verifies that a non visible layer or any of its children is not a hole. | |
599 TEST_F(LayerWithNullDelegateTest, NonVisibleLayerCannotBeHole) { | |
600 // Layer tree looks like: | |
601 // node 1 | |
602 // |_ node 11 | |
603 // |_ node 111 | |
604 | |
605 scoped_ptr<Layer> node1(CreateTextureRootLayer(gfx::Rect(0, 0, 400, 400))); | |
606 | |
607 scoped_ptr<Layer> node11(CreateTextureLayer(gfx::Rect(50, 50, 100, 100))); | |
608 node1->Add(node11.get()); | |
609 | |
610 scoped_ptr<Layer> node111(CreateTextureLayer(gfx::Rect(10, 10, 20, 20))); | |
611 node11->Add(node111.get()); | |
612 | |
613 EXPECT_EQ(gfx::Rect(50, 50, 100, 100), node1->hole_rect()); | |
614 EXPECT_EQ(gfx::Rect(10, 10, 20, 20), node11->hole_rect()); | |
615 | |
616 node11->SetVisible(false); | |
617 EXPECT_TRUE(node1->hole_rect().IsEmpty()); | |
618 EXPECT_TRUE(node11->hole_rect().IsEmpty()); | |
619 } | |
620 | |
621 // Verifies that a layer which doesn't fill its bounds opaquely cannot punch a | |
622 // hole. However its children should still be able to punch a hole. | |
623 TEST_F(LayerWithNullDelegateTest, LayerNotFillingBoundsOpaquelyCannotBeHole) { | |
624 // Layer tree looks like: | |
625 // node 1 | |
626 // |_ node 11 | |
627 // |_ node 111 | |
628 | |
629 scoped_ptr<Layer> node1(CreateTextureRootLayer(gfx::Rect(0, 0, 400, 400))); | |
630 | |
631 scoped_ptr<Layer> node11(CreateTextureLayer(gfx::Rect(50, 50, 100, 100))); | |
632 node1->Add(node11.get()); | |
633 | |
634 scoped_ptr<Layer> node111(CreateTextureLayer(gfx::Rect(10, 10, 20, 20))); | |
635 node11->Add(node111.get()); | |
636 | |
637 EXPECT_EQ(gfx::Rect(50, 50, 100, 100), node1->hole_rect()); | |
638 EXPECT_EQ(gfx::Rect(10, 10, 20, 20), node11->hole_rect()); | |
639 | |
640 node11->SetFillsBoundsOpaquely(false); | |
641 EXPECT_EQ(gfx::Rect(60, 60, 20, 20), node1->hole_rect()); | |
642 EXPECT_TRUE(node11->hole_rect().IsEmpty()); | |
643 } | |
644 | |
538 // Verifies that the hole is with respect to the local bounds of its parent. | 645 // Verifies that the hole is with respect to the local bounds of its parent. |
539 TEST_F(LayerWithNullDelegateTest, HoleLocalBounds) { | 646 TEST_F(LayerWithNullDelegateTest, HoleLocalBounds) { |
540 scoped_ptr<Layer> parent(CreateTextureRootLayer( | 647 scoped_ptr<Layer> parent(CreateTextureRootLayer( |
541 gfx::Rect(100, 100, 150, 150))); | 648 gfx::Rect(100, 100, 150, 150))); |
542 | 649 |
543 scoped_ptr<Layer> child(CreateTextureLayer(gfx::Rect(50, 50, 100, 100))); | 650 scoped_ptr<Layer> child(CreateTextureLayer(gfx::Rect(50, 50, 100, 100))); |
544 parent->Add(child.get()); | 651 parent->Add(child.get()); |
545 | 652 |
546 EXPECT_EQ(gfx::Rect(50, 50, 100, 100), parent->hole_rect()); | 653 EXPECT_EQ(gfx::Rect(50, 50, 100, 100), parent->hole_rect()); |
547 } | 654 } |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
582 child->SetTransform(t); | 689 child->SetTransform(t); |
583 | 690 |
584 gfx::Rect target_rect(child->bounds().size()); | 691 gfx::Rect target_rect(child->bounds().size()); |
585 t.ConcatTranslate(child->bounds().x(), child->bounds().y()); | 692 t.ConcatTranslate(child->bounds().x(), child->bounds().y()); |
586 t.TransformRect(&target_rect); | 693 t.TransformRect(&target_rect); |
587 | 694 |
588 EXPECT_EQ(target_rect, parent->hole_rect()); | 695 EXPECT_EQ(target_rect, parent->hole_rect()); |
589 } | 696 } |
590 } | 697 } |
591 | 698 |
699 // Verifies that a layer which doesn't have a texture cannot punch a | |
700 // hole. However its children should still be able to punch a hole. | |
701 TEST_F(LayerWithNullDelegateTest, HoleWithRelativeNinetyDegreeTransforms) { | |
702 // Layer tree looks like: | |
703 // node 1 | |
704 // |_ node 11 | |
705 // |_ node 12 | |
706 | |
707 scoped_ptr<Layer> node1(CreateTextureRootLayer(gfx::Rect(0, 0, 400, 400))); | |
708 | |
709 scoped_ptr<Layer> node11(CreateTextureLayer(gfx::Rect(50, 50, 50, 50))); | |
710 node1->Add(node11.get()); | |
711 | |
712 scoped_ptr<Layer> node12(CreateTextureLayer(gfx::Rect(50, 50, 50, 50))); | |
713 node1->Add(node12.get()); | |
714 | |
715 EXPECT_EQ(gfx::Rect(0, 0, 50, 50), node11->hole_rect()); | |
716 EXPECT_TRUE(node12->hole_rect().IsEmpty()); | |
717 | |
718 ui::Transform t1; | |
719 // Need to rotate in local coordinates. | |
720 t1.SetTranslate(-25, -25); | |
721 t1.ConcatRotate(45.0f); | |
722 t1.ConcatTranslate(25, 25); | |
723 node11->SetTransform(t1); | |
724 | |
725 EXPECT_TRUE(node12->hole_rect().IsEmpty()); | |
726 EXPECT_TRUE(node11->hole_rect().IsEmpty()); | |
727 | |
728 ui::Transform t2; | |
729 // Need to rotate in local coordinates. | |
730 t2.SetTranslate(-25, -25); | |
731 t2.ConcatRotate(-135.0f); | |
732 t2.ConcatTranslate(25, 25); | |
733 node12->SetTransform(t2); | |
734 | |
735 // Do translation of target rect in order to account for inprecision of | |
736 // using floating point matrices vs integer rects. | |
737 ui::Transform t3; | |
738 gfx::Rect target_rect = gfx::Rect(node11->bounds().size()); | |
739 t3.ConcatTransform(t2); | |
740 t1.Invert(); | |
741 t3.ConcatTransform(t1); | |
742 t3.TransformRect(&target_rect); | |
743 | |
744 EXPECT_TRUE(node12->hole_rect().IsEmpty()); | |
745 EXPECT_EQ(target_rect, node11->hole_rect()); | |
746 } | |
747 | |
592 // Create this hierarchy: | 748 // Create this hierarchy: |
593 // L1 (no texture) | 749 // L1 (no texture) |
594 // +- L11 (texture) | 750 // +- L11 (texture) |
595 // +- L12 (no texture) (added after L1 is already set as root-layer) | 751 // +- L12 (no texture) (added after L1 is already set as root-layer) |
596 // +- L121 (texture) | 752 // +- L121 (texture) |
597 // +- L122 (texture) | 753 // +- L122 (texture) |
598 TEST_F(LayerWithNullDelegateTest, NoCompositor) { | 754 TEST_F(LayerWithNullDelegateTest, NoCompositor) { |
599 scoped_ptr<Layer> l1(CreateLayer(Layer::LAYER_HAS_NO_TEXTURE)); | 755 scoped_ptr<Layer> l1(CreateLayer(Layer::LAYER_HAS_NO_TEXTURE)); |
600 scoped_ptr<Layer> l11(CreateLayer(Layer::LAYER_HAS_TEXTURE)); | 756 scoped_ptr<Layer> l11(CreateLayer(Layer::LAYER_HAS_TEXTURE)); |
601 scoped_ptr<Layer> l12(CreateLayer(Layer::LAYER_HAS_NO_TEXTURE)); | 757 scoped_ptr<Layer> l12(CreateLayer(Layer::LAYER_HAS_NO_TEXTURE)); |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
681 EXPECT_FALSE(l2->IsDrawn()); | 837 EXPECT_FALSE(l2->IsDrawn()); |
682 EXPECT_FALSE(l3->IsDrawn()); | 838 EXPECT_FALSE(l3->IsDrawn()); |
683 | 839 |
684 l1->SetVisible(true); | 840 l1->SetVisible(true); |
685 EXPECT_TRUE(l1->IsDrawn()); | 841 EXPECT_TRUE(l1->IsDrawn()); |
686 EXPECT_TRUE(l2->IsDrawn()); | 842 EXPECT_TRUE(l2->IsDrawn()); |
687 EXPECT_FALSE(l3->IsDrawn()); | 843 EXPECT_FALSE(l3->IsDrawn()); |
688 } | 844 } |
689 | 845 |
690 } // namespace ui | 846 } // namespace ui |
OLD | NEW |