| 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/layer_tree_host_common.h" | 5 #include "cc/layer_tree_host_common.h" |
| 6 | 6 |
| 7 #include "cc/content_layer.h" | 7 #include "cc/content_layer.h" |
| 8 #include "cc/content_layer_client.h" | 8 #include "cc/content_layer_client.h" |
| 9 #include "cc/layer.h" | 9 #include "cc/layer.h" |
| 10 #include "cc/layer_animation_controller.h" | 10 #include "cc/layer_animation_controller.h" |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 70 int dummyMaxTextureSize = 512; | 70 int dummyMaxTextureSize = 512; |
| 71 gfx::Size deviceViewportSize = gfx::Size(rootLayer->bounds().width() * devic
eScaleFactor, rootLayer->bounds().height() * deviceScaleFactor); | 71 gfx::Size deviceViewportSize = gfx::Size(rootLayer->bounds().width() * devic
eScaleFactor, rootLayer->bounds().height() * deviceScaleFactor); |
| 72 | 72 |
| 73 // We are probably not testing what is intended if the rootLayer bounds are
empty. | 73 // We are probably not testing what is intended if the rootLayer bounds are
empty. |
| 74 DCHECK(!rootLayer->bounds().IsEmpty()); | 74 DCHECK(!rootLayer->bounds().IsEmpty()); |
| 75 LayerTreeHostCommon::calculateDrawProperties(rootLayer, deviceViewportSize,
deviceScaleFactor, pageScaleFactor, dummyMaxTextureSize, dummyRenderSurfaceLayer
List); | 75 LayerTreeHostCommon::calculateDrawProperties(rootLayer, deviceViewportSize,
deviceScaleFactor, pageScaleFactor, dummyMaxTextureSize, dummyRenderSurfaceLayer
List); |
| 76 } | 76 } |
| 77 | 77 |
| 78 scoped_ptr<LayerImpl> createTreeForFixedPositionTests(LayerTreeHostImpl* hostImp
l) | 78 scoped_ptr<LayerImpl> createTreeForFixedPositionTests(LayerTreeHostImpl* hostImp
l) |
| 79 { | 79 { |
| 80 scoped_ptr<LayerImpl> root = LayerImpl::create(hostImpl, 1); | 80 scoped_ptr<LayerImpl> root = LayerImpl::create(hostImpl->activeTree(), 1); |
| 81 scoped_ptr<LayerImpl> child = LayerImpl::create(hostImpl, 2); | 81 scoped_ptr<LayerImpl> child = LayerImpl::create(hostImpl->activeTree(), 2); |
| 82 scoped_ptr<LayerImpl> grandChild = LayerImpl::create(hostImpl, 3); | 82 scoped_ptr<LayerImpl> grandChild = LayerImpl::create(hostImpl->activeTree(),
3); |
| 83 scoped_ptr<LayerImpl> greatGrandChild = LayerImpl::create(hostImpl, 4); | 83 scoped_ptr<LayerImpl> greatGrandChild = LayerImpl::create(hostImpl->activeTr
ee(), 4); |
| 84 | 84 |
| 85 gfx::Transform IdentityMatrix; | 85 gfx::Transform IdentityMatrix; |
| 86 gfx::PointF anchor(0, 0); | 86 gfx::PointF anchor(0, 0); |
| 87 gfx::PointF position(0, 0); | 87 gfx::PointF position(0, 0); |
| 88 gfx::Size bounds(100, 100); | 88 gfx::Size bounds(100, 100); |
| 89 setLayerPropertiesForTesting(root.get(), IdentityMatrix, IdentityMatrix, anc
hor, position, bounds, false); | 89 setLayerPropertiesForTesting(root.get(), IdentityMatrix, IdentityMatrix, anc
hor, position, bounds, false); |
| 90 setLayerPropertiesForTesting(child.get(), IdentityMatrix, IdentityMatrix, an
chor, position, bounds, false); | 90 setLayerPropertiesForTesting(child.get(), IdentityMatrix, IdentityMatrix, an
chor, position, bounds, false); |
| 91 setLayerPropertiesForTesting(grandChild.get(), IdentityMatrix, IdentityMatri
x, anchor, position, bounds, false); | 91 setLayerPropertiesForTesting(grandChild.get(), IdentityMatrix, IdentityMatri
x, anchor, position, bounds, false); |
| 92 setLayerPropertiesForTesting(greatGrandChild.get(), IdentityMatrix, Identity
Matrix, anchor, position, bounds, false); | 92 setLayerPropertiesForTesting(greatGrandChild.get(), IdentityMatrix, Identity
Matrix, anchor, position, bounds, false); |
| 93 | 93 |
| (...skipping 1011 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1105 FakeImplProxy proxy; | 1105 FakeImplProxy proxy; |
| 1106 FakeLayerTreeHostImpl hostImpl(&proxy); | 1106 FakeLayerTreeHostImpl hostImpl(&proxy); |
| 1107 scoped_ptr<LayerImpl> root = createTreeForFixedPositionTests(&hostImpl); | 1107 scoped_ptr<LayerImpl> root = createTreeForFixedPositionTests(&hostImpl); |
| 1108 LayerImpl* child = root->children()[0]; | 1108 LayerImpl* child = root->children()[0]; |
| 1109 LayerImpl* grandChild = child->children()[0]; | 1109 LayerImpl* grandChild = child->children()[0]; |
| 1110 LayerImpl* greatGrandChild = grandChild->children()[0]; | 1110 LayerImpl* greatGrandChild = grandChild->children()[0]; |
| 1111 | 1111 |
| 1112 // Add one more layer to the test tree for this scenario. | 1112 // Add one more layer to the test tree for this scenario. |
| 1113 { | 1113 { |
| 1114 gfx::Transform identity; | 1114 gfx::Transform identity; |
| 1115 scoped_ptr<LayerImpl> fixedPositionChild = LayerImpl::create(&hostImpl,
5); | 1115 scoped_ptr<LayerImpl> fixedPositionChild = LayerImpl::create(hostImpl.ac
tiveTree(), 5); |
| 1116 setLayerPropertiesForTesting(fixedPositionChild.get(), identity, identit
y, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), false); | 1116 setLayerPropertiesForTesting(fixedPositionChild.get(), identity, identit
y, gfx::PointF(0, 0), gfx::PointF(0, 0), gfx::Size(100, 100), false); |
| 1117 greatGrandChild->addChild(fixedPositionChild.Pass()); | 1117 greatGrandChild->addChild(fixedPositionChild.Pass()); |
| 1118 } | 1118 } |
| 1119 LayerImpl* fixedPositionChild = greatGrandChild->children()[0]; | 1119 LayerImpl* fixedPositionChild = greatGrandChild->children()[0]; |
| 1120 | 1120 |
| 1121 // Actually set up the scenario here. | 1121 // Actually set up the scenario here. |
| 1122 child->setIsContainerForFixedPositionLayers(true); | 1122 child->setIsContainerForFixedPositionLayers(true); |
| 1123 grandChild->setPosition(gfx::PointF(8, 6)); | 1123 grandChild->setPosition(gfx::PointF(8, 6)); |
| 1124 grandChild->setForceRenderSurface(true); | 1124 grandChild->setForceRenderSurface(true); |
| 1125 greatGrandChild->setPosition(gfx::PointF(40, 60)); | 1125 greatGrandChild->setPosition(gfx::PointF(40, 60)); |
| (...skipping 1660 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2786 | 2786 |
| 2787 testPoint = gfx::Point(10, 20); | 2787 testPoint = gfx::Point(10, 20); |
| 2788 resultLayer = LayerTreeHostCommon::findLayerThatIsHitByPoint(testPoint, rend
erSurfaceLayerList); | 2788 resultLayer = LayerTreeHostCommon::findLayerThatIsHitByPoint(testPoint, rend
erSurfaceLayerList); |
| 2789 EXPECT_FALSE(resultLayer); | 2789 EXPECT_FALSE(resultLayer); |
| 2790 } | 2790 } |
| 2791 | 2791 |
| 2792 TEST(LayerTreeHostCommonTest, verifyHitTestingForSingleLayer) | 2792 TEST(LayerTreeHostCommonTest, verifyHitTestingForSingleLayer) |
| 2793 { | 2793 { |
| 2794 FakeImplProxy proxy; | 2794 FakeImplProxy proxy; |
| 2795 FakeLayerTreeHostImpl hostImpl(&proxy); | 2795 FakeLayerTreeHostImpl hostImpl(&proxy); |
| 2796 scoped_ptr<LayerImpl> root = LayerImpl::create(&hostImpl, 12345); | 2796 scoped_ptr<LayerImpl> root = LayerImpl::create(hostImpl.activeTree(), 12345)
; |
| 2797 | 2797 |
| 2798 gfx::Transform identityMatrix; | 2798 gfx::Transform identityMatrix; |
| 2799 gfx::PointF anchor(0, 0); | 2799 gfx::PointF anchor(0, 0); |
| 2800 gfx::PointF position(0, 0); | 2800 gfx::PointF position(0, 0); |
| 2801 gfx::Size bounds(100, 100); | 2801 gfx::Size bounds(100, 100); |
| 2802 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, position, bounds, false); | 2802 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, position, bounds, false); |
| 2803 root->setDrawsContent(true); | 2803 root->setDrawsContent(true); |
| 2804 | 2804 |
| 2805 std::vector<LayerImpl*> renderSurfaceLayerList; | 2805 std::vector<LayerImpl*> renderSurfaceLayerList; |
| 2806 int dummyMaxTextureSize = 512; | 2806 int dummyMaxTextureSize = 512; |
| (...skipping 21 matching lines...) Expand all Loading... |
| 2828 testPoint = gfx::Point(99, 99); | 2828 testPoint = gfx::Point(99, 99); |
| 2829 resultLayer = LayerTreeHostCommon::findLayerThatIsHitByPoint(testPoint, rend
erSurfaceLayerList); | 2829 resultLayer = LayerTreeHostCommon::findLayerThatIsHitByPoint(testPoint, rend
erSurfaceLayerList); |
| 2830 ASSERT_TRUE(resultLayer); | 2830 ASSERT_TRUE(resultLayer); |
| 2831 EXPECT_EQ(12345, resultLayer->id()); | 2831 EXPECT_EQ(12345, resultLayer->id()); |
| 2832 } | 2832 } |
| 2833 | 2833 |
| 2834 TEST(LayerTreeHostCommonTest, verifyHitTestingForUninvertibleTransform) | 2834 TEST(LayerTreeHostCommonTest, verifyHitTestingForUninvertibleTransform) |
| 2835 { | 2835 { |
| 2836 FakeImplProxy proxy; | 2836 FakeImplProxy proxy; |
| 2837 FakeLayerTreeHostImpl hostImpl(&proxy); | 2837 FakeLayerTreeHostImpl hostImpl(&proxy); |
| 2838 scoped_ptr<LayerImpl> root = LayerImpl::create(&hostImpl, 12345); | 2838 scoped_ptr<LayerImpl> root = LayerImpl::create(hostImpl.activeTree(), 12345)
; |
| 2839 | 2839 |
| 2840 gfx::Transform uninvertibleTransform; | 2840 gfx::Transform uninvertibleTransform; |
| 2841 uninvertibleTransform.matrix().setDouble(0, 0, 0); | 2841 uninvertibleTransform.matrix().setDouble(0, 0, 0); |
| 2842 uninvertibleTransform.matrix().setDouble(1, 1, 0); | 2842 uninvertibleTransform.matrix().setDouble(1, 1, 0); |
| 2843 uninvertibleTransform.matrix().setDouble(2, 2, 0); | 2843 uninvertibleTransform.matrix().setDouble(2, 2, 0); |
| 2844 uninvertibleTransform.matrix().setDouble(3, 3, 0); | 2844 uninvertibleTransform.matrix().setDouble(3, 3, 0); |
| 2845 ASSERT_FALSE(uninvertibleTransform.IsInvertible()); | 2845 ASSERT_FALSE(uninvertibleTransform.IsInvertible()); |
| 2846 | 2846 |
| 2847 gfx::Transform identityMatrix; | 2847 gfx::Transform identityMatrix; |
| 2848 gfx::PointF anchor(0, 0); | 2848 gfx::PointF anchor(0, 0); |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2889 | 2889 |
| 2890 testPoint = gfx::Point(-1, -1); | 2890 testPoint = gfx::Point(-1, -1); |
| 2891 resultLayer = LayerTreeHostCommon::findLayerThatIsHitByPoint(testPoint, rend
erSurfaceLayerList); | 2891 resultLayer = LayerTreeHostCommon::findLayerThatIsHitByPoint(testPoint, rend
erSurfaceLayerList); |
| 2892 EXPECT_FALSE(resultLayer); | 2892 EXPECT_FALSE(resultLayer); |
| 2893 } | 2893 } |
| 2894 | 2894 |
| 2895 TEST(LayerTreeHostCommonTest, verifyHitTestingForSinglePositionedLayer) | 2895 TEST(LayerTreeHostCommonTest, verifyHitTestingForSinglePositionedLayer) |
| 2896 { | 2896 { |
| 2897 FakeImplProxy proxy; | 2897 FakeImplProxy proxy; |
| 2898 FakeLayerTreeHostImpl hostImpl(&proxy); | 2898 FakeLayerTreeHostImpl hostImpl(&proxy); |
| 2899 scoped_ptr<LayerImpl> root = LayerImpl::create(&hostImpl, 12345); | 2899 scoped_ptr<LayerImpl> root = LayerImpl::create(hostImpl.activeTree(), 12345)
; |
| 2900 | 2900 |
| 2901 gfx::Transform identityMatrix; | 2901 gfx::Transform identityMatrix; |
| 2902 gfx::PointF anchor(0, 0); | 2902 gfx::PointF anchor(0, 0); |
| 2903 gfx::PointF position(50, 50); // this layer is positioned, and hit testing s
hould correctly know where the layer is located. | 2903 gfx::PointF position(50, 50); // this layer is positioned, and hit testing s
hould correctly know where the layer is located. |
| 2904 gfx::Size bounds(100, 100); | 2904 gfx::Size bounds(100, 100); |
| 2905 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, position, bounds, false); | 2905 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, position, bounds, false); |
| 2906 root->setDrawsContent(true); | 2906 root->setDrawsContent(true); |
| 2907 | 2907 |
| 2908 std::vector<LayerImpl*> renderSurfaceLayerList; | 2908 std::vector<LayerImpl*> renderSurfaceLayerList; |
| 2909 int dummyMaxTextureSize = 512; | 2909 int dummyMaxTextureSize = 512; |
| (...skipping 22 matching lines...) Expand all Loading... |
| 2932 testPoint = gfx::Point(99, 99); | 2932 testPoint = gfx::Point(99, 99); |
| 2933 resultLayer = LayerTreeHostCommon::findLayerThatIsHitByPoint(testPoint, rend
erSurfaceLayerList); | 2933 resultLayer = LayerTreeHostCommon::findLayerThatIsHitByPoint(testPoint, rend
erSurfaceLayerList); |
| 2934 ASSERT_TRUE(resultLayer); | 2934 ASSERT_TRUE(resultLayer); |
| 2935 EXPECT_EQ(12345, resultLayer->id()); | 2935 EXPECT_EQ(12345, resultLayer->id()); |
| 2936 } | 2936 } |
| 2937 | 2937 |
| 2938 TEST(LayerTreeHostCommonTest, verifyHitTestingForSingleRotatedLayer) | 2938 TEST(LayerTreeHostCommonTest, verifyHitTestingForSingleRotatedLayer) |
| 2939 { | 2939 { |
| 2940 FakeImplProxy proxy; | 2940 FakeImplProxy proxy; |
| 2941 FakeLayerTreeHostImpl hostImpl(&proxy); | 2941 FakeLayerTreeHostImpl hostImpl(&proxy); |
| 2942 scoped_ptr<LayerImpl> root = LayerImpl::create(&hostImpl, 12345); | 2942 scoped_ptr<LayerImpl> root = LayerImpl::create(hostImpl.activeTree(), 12345)
; |
| 2943 | 2943 |
| 2944 gfx::Transform identityMatrix; | 2944 gfx::Transform identityMatrix; |
| 2945 gfx::Transform rotation45DegreesAboutCenter; | 2945 gfx::Transform rotation45DegreesAboutCenter; |
| 2946 rotation45DegreesAboutCenter.Translate(50, 50); | 2946 rotation45DegreesAboutCenter.Translate(50, 50); |
| 2947 MathUtil::rotateEulerAngles(&rotation45DegreesAboutCenter, 0, 0, 45); | 2947 MathUtil::rotateEulerAngles(&rotation45DegreesAboutCenter, 0, 0, 45); |
| 2948 rotation45DegreesAboutCenter.Translate(-50, -50); | 2948 rotation45DegreesAboutCenter.Translate(-50, -50); |
| 2949 gfx::PointF anchor(0, 0); | 2949 gfx::PointF anchor(0, 0); |
| 2950 gfx::PointF position(0, 0); | 2950 gfx::PointF position(0, 0); |
| 2951 gfx::Size bounds(100, 100); | 2951 gfx::Size bounds(100, 100); |
| 2952 setLayerPropertiesForTesting(root.get(), rotation45DegreesAboutCenter, ident
ityMatrix, anchor, position, bounds, false); | 2952 setLayerPropertiesForTesting(root.get(), rotation45DegreesAboutCenter, ident
ityMatrix, anchor, position, bounds, false); |
| (...skipping 30 matching lines...) Expand all Loading... |
| 2983 | 2983 |
| 2984 testPoint = gfx::Point(-1, 50); | 2984 testPoint = gfx::Point(-1, 50); |
| 2985 resultLayer = LayerTreeHostCommon::findLayerThatIsHitByPoint(testPoint, rend
erSurfaceLayerList); | 2985 resultLayer = LayerTreeHostCommon::findLayerThatIsHitByPoint(testPoint, rend
erSurfaceLayerList); |
| 2986 ASSERT_FALSE(resultLayer); | 2986 ASSERT_FALSE(resultLayer); |
| 2987 } | 2987 } |
| 2988 | 2988 |
| 2989 TEST(LayerTreeHostCommonTest, verifyHitTestingForSinglePerspectiveLayer) | 2989 TEST(LayerTreeHostCommonTest, verifyHitTestingForSinglePerspectiveLayer) |
| 2990 { | 2990 { |
| 2991 FakeImplProxy proxy; | 2991 FakeImplProxy proxy; |
| 2992 FakeLayerTreeHostImpl hostImpl(&proxy); | 2992 FakeLayerTreeHostImpl hostImpl(&proxy); |
| 2993 scoped_ptr<LayerImpl> root = LayerImpl::create(&hostImpl, 12345); | 2993 scoped_ptr<LayerImpl> root = LayerImpl::create(hostImpl.activeTree(), 12345)
; |
| 2994 | 2994 |
| 2995 gfx::Transform identityMatrix; | 2995 gfx::Transform identityMatrix; |
| 2996 | 2996 |
| 2997 // perspectiveProjectionAboutCenter * translationByZ is designed so that the
100 x 100 layer becomes 50 x 50, and remains centered at (50, 50). | 2997 // perspectiveProjectionAboutCenter * translationByZ is designed so that the
100 x 100 layer becomes 50 x 50, and remains centered at (50, 50). |
| 2998 gfx::Transform perspectiveProjectionAboutCenter; | 2998 gfx::Transform perspectiveProjectionAboutCenter; |
| 2999 perspectiveProjectionAboutCenter.Translate(50, 50); | 2999 perspectiveProjectionAboutCenter.Translate(50, 50); |
| 3000 perspectiveProjectionAboutCenter.ApplyPerspectiveDepth(1); | 3000 perspectiveProjectionAboutCenter.ApplyPerspectiveDepth(1); |
| 3001 perspectiveProjectionAboutCenter.Translate(-50, -50); | 3001 perspectiveProjectionAboutCenter.Translate(-50, -50); |
| 3002 gfx::Transform translationByZ; | 3002 gfx::Transform translationByZ; |
| 3003 translationByZ.Translate3d(0, 0, -1); | 3003 translationByZ.Translate3d(0, 0, -1); |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3045 // test makes sure that hit testing works correctly accounts for the content
s scale. | 3045 // test makes sure that hit testing works correctly accounts for the content
s scale. |
| 3046 // A contentsScale that is not 1 effectively forces a non-identity transform
between | 3046 // A contentsScale that is not 1 effectively forces a non-identity transform
between |
| 3047 // layer's content space and layer's origin space. The hit testing code must
take this into account. | 3047 // layer's content space and layer's origin space. The hit testing code must
take this into account. |
| 3048 // | 3048 // |
| 3049 // To test this, the layer is positioned at (25, 25), and is size (50, 50).
If | 3049 // To test this, the layer is positioned at (25, 25), and is size (50, 50).
If |
| 3050 // contentsScale is ignored, then hit testing will mis-interpret the visible
ContentRect | 3050 // contentsScale is ignored, then hit testing will mis-interpret the visible
ContentRect |
| 3051 // as being larger than the actual bounds of the layer. | 3051 // as being larger than the actual bounds of the layer. |
| 3052 // | 3052 // |
| 3053 FakeImplProxy proxy; | 3053 FakeImplProxy proxy; |
| 3054 FakeLayerTreeHostImpl hostImpl(&proxy); | 3054 FakeLayerTreeHostImpl hostImpl(&proxy); |
| 3055 scoped_ptr<LayerImpl> root = LayerImpl::create(&hostImpl, 1); | 3055 scoped_ptr<LayerImpl> root = LayerImpl::create(hostImpl.activeTree(), 1); |
| 3056 | 3056 |
| 3057 gfx::Transform identityMatrix; | 3057 gfx::Transform identityMatrix; |
| 3058 gfx::PointF anchor(0, 0); | 3058 gfx::PointF anchor(0, 0); |
| 3059 | 3059 |
| 3060 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, gfx::PointF(0, 0), gfx::Size(100, 100), false); | 3060 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, gfx::PointF(0, 0), gfx::Size(100, 100), false); |
| 3061 | 3061 |
| 3062 { | 3062 { |
| 3063 gfx::PointF position(25, 25); | 3063 gfx::PointF position(25, 25); |
| 3064 gfx::Size bounds(50, 50); | 3064 gfx::Size bounds(50, 50); |
| 3065 scoped_ptr<LayerImpl> testLayer = LayerImpl::create(&hostImpl, 12345); | 3065 scoped_ptr<LayerImpl> testLayer = LayerImpl::create(hostImpl.activeTree(
), 12345); |
| 3066 setLayerPropertiesForTesting(testLayer.get(), identityMatrix, identityMa
trix, anchor, position, bounds, false); | 3066 setLayerPropertiesForTesting(testLayer.get(), identityMatrix, identityMa
trix, anchor, position, bounds, false); |
| 3067 | 3067 |
| 3068 // override contentBounds and contentsScale | 3068 // override contentBounds and contentsScale |
| 3069 testLayer->setContentBounds(gfx::Size(100, 100)); | 3069 testLayer->setContentBounds(gfx::Size(100, 100)); |
| 3070 testLayer->setContentsScale(2, 2); | 3070 testLayer->setContentsScale(2, 2); |
| 3071 | 3071 |
| 3072 testLayer->setDrawsContent(true); | 3072 testLayer->setDrawsContent(true); |
| 3073 root->addChild(testLayer.Pass()); | 3073 root->addChild(testLayer.Pass()); |
| 3074 } | 3074 } |
| 3075 | 3075 |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3111 | 3111 |
| 3112 TEST(LayerTreeHostCommonTest, verifyHitTestingForSimpleClippedLayer) | 3112 TEST(LayerTreeHostCommonTest, verifyHitTestingForSimpleClippedLayer) |
| 3113 { | 3113 { |
| 3114 // Test that hit-testing will only work for the visible portion of a layer,
and not | 3114 // Test that hit-testing will only work for the visible portion of a layer,
and not |
| 3115 // the entire layer bounds. Here we just test the simple axis-aligned case. | 3115 // the entire layer bounds. Here we just test the simple axis-aligned case. |
| 3116 gfx::Transform identityMatrix; | 3116 gfx::Transform identityMatrix; |
| 3117 gfx::PointF anchor(0, 0); | 3117 gfx::PointF anchor(0, 0); |
| 3118 | 3118 |
| 3119 FakeImplProxy proxy; | 3119 FakeImplProxy proxy; |
| 3120 FakeLayerTreeHostImpl hostImpl(&proxy); | 3120 FakeLayerTreeHostImpl hostImpl(&proxy); |
| 3121 scoped_ptr<LayerImpl> root = LayerImpl::create(&hostImpl, 1); | 3121 scoped_ptr<LayerImpl> root = LayerImpl::create(hostImpl.activeTree(), 1); |
| 3122 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, gfx::PointF(0, 0), gfx::Size(100, 100), false); | 3122 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, gfx::PointF(0, 0), gfx::Size(100, 100), false); |
| 3123 | 3123 |
| 3124 { | 3124 { |
| 3125 scoped_ptr<LayerImpl> clippingLayer = LayerImpl::create(&hostImpl, 123); | 3125 scoped_ptr<LayerImpl> clippingLayer = LayerImpl::create(hostImpl.activeT
ree(), 123); |
| 3126 gfx::PointF position(25, 25); // this layer is positioned, and hit testi
ng should correctly know where the layer is located. | 3126 gfx::PointF position(25, 25); // this layer is positioned, and hit testi
ng should correctly know where the layer is located. |
| 3127 gfx::Size bounds(50, 50); | 3127 gfx::Size bounds(50, 50); |
| 3128 setLayerPropertiesForTesting(clippingLayer.get(), identityMatrix, identi
tyMatrix, anchor, position, bounds, false); | 3128 setLayerPropertiesForTesting(clippingLayer.get(), identityMatrix, identi
tyMatrix, anchor, position, bounds, false); |
| 3129 clippingLayer->setMasksToBounds(true); | 3129 clippingLayer->setMasksToBounds(true); |
| 3130 | 3130 |
| 3131 scoped_ptr<LayerImpl> child = LayerImpl::create(&hostImpl, 456); | 3131 scoped_ptr<LayerImpl> child = LayerImpl::create(hostImpl.activeTree(), 4
56); |
| 3132 position = gfx::PointF(-50, -50); | 3132 position = gfx::PointF(-50, -50); |
| 3133 bounds = gfx::Size(300, 300); | 3133 bounds = gfx::Size(300, 300); |
| 3134 setLayerPropertiesForTesting(child.get(), identityMatrix, identityMatrix
, anchor, position, bounds, false); | 3134 setLayerPropertiesForTesting(child.get(), identityMatrix, identityMatrix
, anchor, position, bounds, false); |
| 3135 child->setDrawsContent(true); | 3135 child->setDrawsContent(true); |
| 3136 clippingLayer->addChild(child.Pass()); | 3136 clippingLayer->addChild(child.Pass()); |
| 3137 root->addChild(clippingLayer.Pass()); | 3137 root->addChild(clippingLayer.Pass()); |
| 3138 } | 3138 } |
| 3139 | 3139 |
| 3140 std::vector<LayerImpl*> renderSurfaceLayerList; | 3140 std::vector<LayerImpl*> renderSurfaceLayerList; |
| 3141 int dummyMaxTextureSize = 512; | 3141 int dummyMaxTextureSize = 512; |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3176 // algorithm needs to recognize that multiple parent layers may clip the lay
er, and | 3176 // algorithm needs to recognize that multiple parent layers may clip the lay
er, and |
| 3177 // should not actually hit those clipped areas. | 3177 // should not actually hit those clipped areas. |
| 3178 // | 3178 // |
| 3179 // The child and grandChild layers are both initialized to clip the rotatedL
eaf. The | 3179 // The child and grandChild layers are both initialized to clip the rotatedL
eaf. The |
| 3180 // child layer is rotated about the top-left corner, so that the root + chil
d clips | 3180 // child layer is rotated about the top-left corner, so that the root + chil
d clips |
| 3181 // combined create a triangle. The rotatedLeaf will only be visible where it
overlaps | 3181 // combined create a triangle. The rotatedLeaf will only be visible where it
overlaps |
| 3182 // this triangle. | 3182 // this triangle. |
| 3183 // | 3183 // |
| 3184 FakeImplProxy proxy; | 3184 FakeImplProxy proxy; |
| 3185 FakeLayerTreeHostImpl hostImpl(&proxy); | 3185 FakeLayerTreeHostImpl hostImpl(&proxy); |
| 3186 scoped_ptr<LayerImpl> root = LayerImpl::create(&hostImpl, 123); | 3186 scoped_ptr<LayerImpl> root = LayerImpl::create(hostImpl.activeTree(), 123); |
| 3187 | 3187 |
| 3188 gfx::Transform identityMatrix; | 3188 gfx::Transform identityMatrix; |
| 3189 gfx::PointF anchor(0, 0); | 3189 gfx::PointF anchor(0, 0); |
| 3190 gfx::PointF position(0, 0); | 3190 gfx::PointF position(0, 0); |
| 3191 gfx::Size bounds(100, 100); | 3191 gfx::Size bounds(100, 100); |
| 3192 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, position, bounds, false); | 3192 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, position, bounds, false); |
| 3193 root->setMasksToBounds(true); | 3193 root->setMasksToBounds(true); |
| 3194 | 3194 |
| 3195 { | 3195 { |
| 3196 scoped_ptr<LayerImpl> child = LayerImpl::create(&hostImpl, 456); | 3196 scoped_ptr<LayerImpl> child = LayerImpl::create(hostImpl.activeTree(), 4
56); |
| 3197 scoped_ptr<LayerImpl> grandChild = LayerImpl::create(&hostImpl, 789); | 3197 scoped_ptr<LayerImpl> grandChild = LayerImpl::create(hostImpl.activeTree
(), 789); |
| 3198 scoped_ptr<LayerImpl> rotatedLeaf = LayerImpl::create(&hostImpl, 2468); | 3198 scoped_ptr<LayerImpl> rotatedLeaf = LayerImpl::create(hostImpl.activeTre
e(), 2468); |
| 3199 | 3199 |
| 3200 position = gfx::PointF(10, 10); | 3200 position = gfx::PointF(10, 10); |
| 3201 bounds = gfx::Size(80, 80); | 3201 bounds = gfx::Size(80, 80); |
| 3202 setLayerPropertiesForTesting(child.get(), identityMatrix, identityMatrix
, anchor, position, bounds, false); | 3202 setLayerPropertiesForTesting(child.get(), identityMatrix, identityMatrix
, anchor, position, bounds, false); |
| 3203 child->setMasksToBounds(true); | 3203 child->setMasksToBounds(true); |
| 3204 | 3204 |
| 3205 gfx::Transform rotation45DegreesAboutCorner; | 3205 gfx::Transform rotation45DegreesAboutCorner; |
| 3206 MathUtil::rotateEulerAngles(&rotation45DegreesAboutCorner, 0, 0, 45); | 3206 MathUtil::rotateEulerAngles(&rotation45DegreesAboutCorner, 0, 0, 45); |
| 3207 | 3207 |
| 3208 position = gfx::PointF(0, 0); // remember, positioned with respect to it
s parent which is already at 10, 10 | 3208 position = gfx::PointF(0, 0); // remember, positioned with respect to it
s parent which is already at 10, 10 |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3279 | 3279 |
| 3280 TEST(LayerTreeHostCommonTest, verifyHitTestingForNonClippingIntermediateLayer) | 3280 TEST(LayerTreeHostCommonTest, verifyHitTestingForNonClippingIntermediateLayer) |
| 3281 { | 3281 { |
| 3282 // This test checks that hit testing code does not accidentally clip to laye
r | 3282 // This test checks that hit testing code does not accidentally clip to laye
r |
| 3283 // bounds for a layer that actually does not clip. | 3283 // bounds for a layer that actually does not clip. |
| 3284 gfx::Transform identityMatrix; | 3284 gfx::Transform identityMatrix; |
| 3285 gfx::PointF anchor(0, 0); | 3285 gfx::PointF anchor(0, 0); |
| 3286 | 3286 |
| 3287 FakeImplProxy proxy; | 3287 FakeImplProxy proxy; |
| 3288 FakeLayerTreeHostImpl hostImpl(&proxy); | 3288 FakeLayerTreeHostImpl hostImpl(&proxy); |
| 3289 scoped_ptr<LayerImpl> root = LayerImpl::create(&hostImpl, 1); | 3289 scoped_ptr<LayerImpl> root = LayerImpl::create(hostImpl.activeTree(), 1); |
| 3290 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, gfx::PointF(0, 0), gfx::Size(100, 100), false); | 3290 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, gfx::PointF(0, 0), gfx::Size(100, 100), false); |
| 3291 | 3291 |
| 3292 { | 3292 { |
| 3293 scoped_ptr<LayerImpl> intermediateLayer = LayerImpl::create(&hostImpl, 1
23); | 3293 scoped_ptr<LayerImpl> intermediateLayer = LayerImpl::create(hostImpl.act
iveTree(), 123); |
| 3294 gfx::PointF position(10, 10); // this layer is positioned, and hit testi
ng should correctly know where the layer is located. | 3294 gfx::PointF position(10, 10); // this layer is positioned, and hit testi
ng should correctly know where the layer is located. |
| 3295 gfx::Size bounds(50, 50); | 3295 gfx::Size bounds(50, 50); |
| 3296 setLayerPropertiesForTesting(intermediateLayer.get(), identityMatrix, id
entityMatrix, anchor, position, bounds, false); | 3296 setLayerPropertiesForTesting(intermediateLayer.get(), identityMatrix, id
entityMatrix, anchor, position, bounds, false); |
| 3297 // Sanity check the intermediate layer should not clip. | 3297 // Sanity check the intermediate layer should not clip. |
| 3298 ASSERT_FALSE(intermediateLayer->masksToBounds()); | 3298 ASSERT_FALSE(intermediateLayer->masksToBounds()); |
| 3299 ASSERT_FALSE(intermediateLayer->maskLayer()); | 3299 ASSERT_FALSE(intermediateLayer->maskLayer()); |
| 3300 | 3300 |
| 3301 // The child of the intermediateLayer is translated so that it does not
overlap intermediateLayer at all. | 3301 // The child of the intermediateLayer is translated so that it does not
overlap intermediateLayer at all. |
| 3302 // If child is incorrectly clipped, we would not be able to hit it succe
ssfully. | 3302 // If child is incorrectly clipped, we would not be able to hit it succe
ssfully. |
| 3303 scoped_ptr<LayerImpl> child = LayerImpl::create(&hostImpl, 456); | 3303 scoped_ptr<LayerImpl> child = LayerImpl::create(hostImpl.activeTree(), 4
56); |
| 3304 position = gfx::PointF(60, 60); // 70, 70 in screen space | 3304 position = gfx::PointF(60, 60); // 70, 70 in screen space |
| 3305 bounds = gfx::Size(20, 20); | 3305 bounds = gfx::Size(20, 20); |
| 3306 setLayerPropertiesForTesting(child.get(), identityMatrix, identityMatrix
, anchor, position, bounds, false); | 3306 setLayerPropertiesForTesting(child.get(), identityMatrix, identityMatrix
, anchor, position, bounds, false); |
| 3307 child->setDrawsContent(true); | 3307 child->setDrawsContent(true); |
| 3308 intermediateLayer->addChild(child.Pass()); | 3308 intermediateLayer->addChild(child.Pass()); |
| 3309 root->addChild(intermediateLayer.Pass()); | 3309 root->addChild(intermediateLayer.Pass()); |
| 3310 } | 3310 } |
| 3311 | 3311 |
| 3312 std::vector<LayerImpl*> renderSurfaceLayerList; | 3312 std::vector<LayerImpl*> renderSurfaceLayerList; |
| 3313 int dummyMaxTextureSize = 512; | 3313 int dummyMaxTextureSize = 512; |
| (...skipping 23 matching lines...) Expand all Loading... |
| 3337 resultLayer = LayerTreeHostCommon::findLayerThatIsHitByPoint(testPoint, rend
erSurfaceLayerList); | 3337 resultLayer = LayerTreeHostCommon::findLayerThatIsHitByPoint(testPoint, rend
erSurfaceLayerList); |
| 3338 ASSERT_TRUE(resultLayer); | 3338 ASSERT_TRUE(resultLayer); |
| 3339 EXPECT_EQ(456, resultLayer->id()); | 3339 EXPECT_EQ(456, resultLayer->id()); |
| 3340 } | 3340 } |
| 3341 | 3341 |
| 3342 | 3342 |
| 3343 TEST(LayerTreeHostCommonTest, verifyHitTestingForMultipleLayers) | 3343 TEST(LayerTreeHostCommonTest, verifyHitTestingForMultipleLayers) |
| 3344 { | 3344 { |
| 3345 FakeImplProxy proxy; | 3345 FakeImplProxy proxy; |
| 3346 FakeLayerTreeHostImpl hostImpl(&proxy); | 3346 FakeLayerTreeHostImpl hostImpl(&proxy); |
| 3347 scoped_ptr<LayerImpl> root = LayerImpl::create(&hostImpl, 1); | 3347 scoped_ptr<LayerImpl> root = LayerImpl::create(hostImpl.activeTree(), 1); |
| 3348 | 3348 |
| 3349 gfx::Transform identityMatrix; | 3349 gfx::Transform identityMatrix; |
| 3350 gfx::PointF anchor(0, 0); | 3350 gfx::PointF anchor(0, 0); |
| 3351 gfx::PointF position(0, 0); | 3351 gfx::PointF position(0, 0); |
| 3352 gfx::Size bounds(100, 100); | 3352 gfx::Size bounds(100, 100); |
| 3353 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, position, bounds, false); | 3353 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, position, bounds, false); |
| 3354 root->setDrawsContent(true); | 3354 root->setDrawsContent(true); |
| 3355 | 3355 |
| 3356 { | 3356 { |
| 3357 // child 1 and child2 are initialized to overlap between x=50 and x=60. | 3357 // child 1 and child2 are initialized to overlap between x=50 and x=60. |
| 3358 // grandChild is set to overlap both child1 and child2 between y=50 and
y=60. | 3358 // grandChild is set to overlap both child1 and child2 between y=50 and
y=60. |
| 3359 // The expected stacking order is: | 3359 // The expected stacking order is: |
| 3360 // (front) child2, (second) grandChild, (third) child1, and (back) the
root layer behind all other layers. | 3360 // (front) child2, (second) grandChild, (third) child1, and (back) the
root layer behind all other layers. |
| 3361 | 3361 |
| 3362 scoped_ptr<LayerImpl> child1 = LayerImpl::create(&hostImpl, 2); | 3362 scoped_ptr<LayerImpl> child1 = LayerImpl::create(hostImpl.activeTree(),
2); |
| 3363 scoped_ptr<LayerImpl> child2 = LayerImpl::create(&hostImpl, 3); | 3363 scoped_ptr<LayerImpl> child2 = LayerImpl::create(hostImpl.activeTree(),
3); |
| 3364 scoped_ptr<LayerImpl> grandChild1 = LayerImpl::create(&hostImpl, 4); | 3364 scoped_ptr<LayerImpl> grandChild1 = LayerImpl::create(hostImpl.activeTre
e(), 4); |
| 3365 | 3365 |
| 3366 position = gfx::PointF(10, 10); | 3366 position = gfx::PointF(10, 10); |
| 3367 bounds = gfx::Size(50, 50); | 3367 bounds = gfx::Size(50, 50); |
| 3368 setLayerPropertiesForTesting(child1.get(), identityMatrix, identityMatri
x, anchor, position, bounds, false); | 3368 setLayerPropertiesForTesting(child1.get(), identityMatrix, identityMatri
x, anchor, position, bounds, false); |
| 3369 child1->setDrawsContent(true); | 3369 child1->setDrawsContent(true); |
| 3370 | 3370 |
| 3371 position = gfx::PointF(50, 10); | 3371 position = gfx::PointF(50, 10); |
| 3372 bounds = gfx::Size(50, 50); | 3372 bounds = gfx::Size(50, 50); |
| 3373 setLayerPropertiesForTesting(child2.get(), identityMatrix, identityMatri
x, anchor, position, bounds, false); | 3373 setLayerPropertiesForTesting(child2.get(), identityMatrix, identityMatri
x, anchor, position, bounds, false); |
| 3374 child2->setDrawsContent(true); | 3374 child2->setDrawsContent(true); |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3442 } | 3442 } |
| 3443 | 3443 |
| 3444 TEST(LayerTreeHostCommonTest, verifyHitTestingForMultipleLayerLists) | 3444 TEST(LayerTreeHostCommonTest, verifyHitTestingForMultipleLayerLists) |
| 3445 { | 3445 { |
| 3446 // | 3446 // |
| 3447 // The geometry is set up similarly to the previous case, but | 3447 // The geometry is set up similarly to the previous case, but |
| 3448 // all layers are forced to be renderSurfaces now. | 3448 // all layers are forced to be renderSurfaces now. |
| 3449 // | 3449 // |
| 3450 FakeImplProxy proxy; | 3450 FakeImplProxy proxy; |
| 3451 FakeLayerTreeHostImpl hostImpl(&proxy); | 3451 FakeLayerTreeHostImpl hostImpl(&proxy); |
| 3452 scoped_ptr<LayerImpl> root = LayerImpl::create(&hostImpl, 1); | 3452 scoped_ptr<LayerImpl> root = LayerImpl::create(hostImpl.activeTree(), 1); |
| 3453 | 3453 |
| 3454 gfx::Transform identityMatrix; | 3454 gfx::Transform identityMatrix; |
| 3455 gfx::PointF anchor(0, 0); | 3455 gfx::PointF anchor(0, 0); |
| 3456 gfx::PointF position(0, 0); | 3456 gfx::PointF position(0, 0); |
| 3457 gfx::Size bounds(100, 100); | 3457 gfx::Size bounds(100, 100); |
| 3458 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, position, bounds, false); | 3458 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, position, bounds, false); |
| 3459 root->setDrawsContent(true); | 3459 root->setDrawsContent(true); |
| 3460 | 3460 |
| 3461 { | 3461 { |
| 3462 // child 1 and child2 are initialized to overlap between x=50 and x=60. | 3462 // child 1 and child2 are initialized to overlap between x=50 and x=60. |
| 3463 // grandChild is set to overlap both child1 and child2 between y=50 and
y=60. | 3463 // grandChild is set to overlap both child1 and child2 between y=50 and
y=60. |
| 3464 // The expected stacking order is: | 3464 // The expected stacking order is: |
| 3465 // (front) child2, (second) grandChild, (third) child1, and (back) the
root layer behind all other layers. | 3465 // (front) child2, (second) grandChild, (third) child1, and (back) the
root layer behind all other layers. |
| 3466 | 3466 |
| 3467 scoped_ptr<LayerImpl> child1 = LayerImpl::create(&hostImpl, 2); | 3467 scoped_ptr<LayerImpl> child1 = LayerImpl::create(hostImpl.activeTree(),
2); |
| 3468 scoped_ptr<LayerImpl> child2 = LayerImpl::create(&hostImpl, 3); | 3468 scoped_ptr<LayerImpl> child2 = LayerImpl::create(hostImpl.activeTree(),
3); |
| 3469 scoped_ptr<LayerImpl> grandChild1 = LayerImpl::create(&hostImpl, 4); | 3469 scoped_ptr<LayerImpl> grandChild1 = LayerImpl::create(hostImpl.activeTre
e(), 4); |
| 3470 | 3470 |
| 3471 position = gfx::PointF(10, 10); | 3471 position = gfx::PointF(10, 10); |
| 3472 bounds = gfx::Size(50, 50); | 3472 bounds = gfx::Size(50, 50); |
| 3473 setLayerPropertiesForTesting(child1.get(), identityMatrix, identityMatri
x, anchor, position, bounds, false); | 3473 setLayerPropertiesForTesting(child1.get(), identityMatrix, identityMatri
x, anchor, position, bounds, false); |
| 3474 child1->setDrawsContent(true); | 3474 child1->setDrawsContent(true); |
| 3475 child1->setForceRenderSurface(true); | 3475 child1->setForceRenderSurface(true); |
| 3476 | 3476 |
| 3477 position = gfx::PointF(50, 10); | 3477 position = gfx::PointF(50, 10); |
| 3478 bounds = gfx::Size(50, 50); | 3478 bounds = gfx::Size(50, 50); |
| 3479 setLayerPropertiesForTesting(child2.get(), identityMatrix, identityMatri
x, anchor, position, bounds, false); | 3479 setLayerPropertiesForTesting(child2.get(), identityMatrix, identityMatri
x, anchor, position, bounds, false); |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3566 | 3566 |
| 3567 testPoint = gfx::Point(10, 20); | 3567 testPoint = gfx::Point(10, 20); |
| 3568 resultLayer = LayerTreeHostCommon::findLayerThatIsHitByPointInTouchHandlerRe
gion(testPoint, renderSurfaceLayerList); | 3568 resultLayer = LayerTreeHostCommon::findLayerThatIsHitByPointInTouchHandlerRe
gion(testPoint, renderSurfaceLayerList); |
| 3569 EXPECT_FALSE(resultLayer); | 3569 EXPECT_FALSE(resultLayer); |
| 3570 } | 3570 } |
| 3571 | 3571 |
| 3572 TEST(LayerTreeHostCommonTest, verifyHitCheckingTouchHandlerRegionsForSingleLayer
) | 3572 TEST(LayerTreeHostCommonTest, verifyHitCheckingTouchHandlerRegionsForSingleLayer
) |
| 3573 { | 3573 { |
| 3574 FakeImplProxy proxy; | 3574 FakeImplProxy proxy; |
| 3575 FakeLayerTreeHostImpl hostImpl(&proxy); | 3575 FakeLayerTreeHostImpl hostImpl(&proxy); |
| 3576 scoped_ptr<LayerImpl> root = LayerImpl::create(&hostImpl, 12345); | 3576 scoped_ptr<LayerImpl> root = LayerImpl::create(hostImpl.activeTree(), 12345)
; |
| 3577 | 3577 |
| 3578 gfx::Transform identityMatrix; | 3578 gfx::Transform identityMatrix; |
| 3579 Region touchHandlerRegion(gfx::Rect(10, 10, 50, 50)); | 3579 Region touchHandlerRegion(gfx::Rect(10, 10, 50, 50)); |
| 3580 gfx::PointF anchor(0, 0); | 3580 gfx::PointF anchor(0, 0); |
| 3581 gfx::PointF position(0, 0); | 3581 gfx::PointF position(0, 0); |
| 3582 gfx::Size bounds(100, 100); | 3582 gfx::Size bounds(100, 100); |
| 3583 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, position, bounds, false); | 3583 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, position, bounds, false); |
| 3584 root->setDrawsContent(true); | 3584 root->setDrawsContent(true); |
| 3585 | 3585 |
| 3586 std::vector<LayerImpl*> renderSurfaceLayerList; | 3586 std::vector<LayerImpl*> renderSurfaceLayerList; |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3624 testPoint = gfx::Point(59, 59); | 3624 testPoint = gfx::Point(59, 59); |
| 3625 resultLayer = LayerTreeHostCommon::findLayerThatIsHitByPointInTouchHandlerRe
gion(testPoint, renderSurfaceLayerList); | 3625 resultLayer = LayerTreeHostCommon::findLayerThatIsHitByPointInTouchHandlerRe
gion(testPoint, renderSurfaceLayerList); |
| 3626 ASSERT_TRUE(resultLayer); | 3626 ASSERT_TRUE(resultLayer); |
| 3627 EXPECT_EQ(12345, resultLayer->id()); | 3627 EXPECT_EQ(12345, resultLayer->id()); |
| 3628 } | 3628 } |
| 3629 | 3629 |
| 3630 TEST(LayerTreeHostCommonTest, verifyHitCheckingTouchHandlerRegionsForUninvertibl
eTransform) | 3630 TEST(LayerTreeHostCommonTest, verifyHitCheckingTouchHandlerRegionsForUninvertibl
eTransform) |
| 3631 { | 3631 { |
| 3632 FakeImplProxy proxy; | 3632 FakeImplProxy proxy; |
| 3633 FakeLayerTreeHostImpl hostImpl(&proxy); | 3633 FakeLayerTreeHostImpl hostImpl(&proxy); |
| 3634 scoped_ptr<LayerImpl> root = LayerImpl::create(&hostImpl, 12345); | 3634 scoped_ptr<LayerImpl> root = LayerImpl::create(hostImpl.activeTree(), 12345)
; |
| 3635 | 3635 |
| 3636 gfx::Transform uninvertibleTransform; | 3636 gfx::Transform uninvertibleTransform; |
| 3637 uninvertibleTransform.matrix().setDouble(0, 0, 0); | 3637 uninvertibleTransform.matrix().setDouble(0, 0, 0); |
| 3638 uninvertibleTransform.matrix().setDouble(1, 1, 0); | 3638 uninvertibleTransform.matrix().setDouble(1, 1, 0); |
| 3639 uninvertibleTransform.matrix().setDouble(2, 2, 0); | 3639 uninvertibleTransform.matrix().setDouble(2, 2, 0); |
| 3640 uninvertibleTransform.matrix().setDouble(3, 3, 0); | 3640 uninvertibleTransform.matrix().setDouble(3, 3, 0); |
| 3641 ASSERT_FALSE(uninvertibleTransform.IsInvertible()); | 3641 ASSERT_FALSE(uninvertibleTransform.IsInvertible()); |
| 3642 | 3642 |
| 3643 gfx::Transform identityMatrix; | 3643 gfx::Transform identityMatrix; |
| 3644 Region touchHandlerRegion(gfx::Rect(10, 10, 50, 50)); | 3644 Region touchHandlerRegion(gfx::Rect(10, 10, 50, 50)); |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3687 | 3687 |
| 3688 testPoint = gfx::Point(-1, -1); | 3688 testPoint = gfx::Point(-1, -1); |
| 3689 resultLayer = LayerTreeHostCommon::findLayerThatIsHitByPointInTouchHandlerRe
gion(testPoint, renderSurfaceLayerList); | 3689 resultLayer = LayerTreeHostCommon::findLayerThatIsHitByPointInTouchHandlerRe
gion(testPoint, renderSurfaceLayerList); |
| 3690 EXPECT_FALSE(resultLayer); | 3690 EXPECT_FALSE(resultLayer); |
| 3691 } | 3691 } |
| 3692 | 3692 |
| 3693 TEST(LayerTreeHostCommonTest, verifyHitCheckingTouchHandlerRegionsForSinglePosit
ionedLayer) | 3693 TEST(LayerTreeHostCommonTest, verifyHitCheckingTouchHandlerRegionsForSinglePosit
ionedLayer) |
| 3694 { | 3694 { |
| 3695 FakeImplProxy proxy; | 3695 FakeImplProxy proxy; |
| 3696 FakeLayerTreeHostImpl hostImpl(&proxy); | 3696 FakeLayerTreeHostImpl hostImpl(&proxy); |
| 3697 scoped_ptr<LayerImpl> root = LayerImpl::create(&hostImpl, 12345); | 3697 scoped_ptr<LayerImpl> root = LayerImpl::create(hostImpl.activeTree(), 12345)
; |
| 3698 | 3698 |
| 3699 gfx::Transform identityMatrix; | 3699 gfx::Transform identityMatrix; |
| 3700 Region touchHandlerRegion(gfx::Rect(10, 10, 50, 50)); | 3700 Region touchHandlerRegion(gfx::Rect(10, 10, 50, 50)); |
| 3701 gfx::PointF anchor(0, 0); | 3701 gfx::PointF anchor(0, 0); |
| 3702 gfx::PointF position(50, 50); // this layer is positioned, and hit testing s
hould correctly know where the layer is located. | 3702 gfx::PointF position(50, 50); // this layer is positioned, and hit testing s
hould correctly know where the layer is located. |
| 3703 gfx::Size bounds(100, 100); | 3703 gfx::Size bounds(100, 100); |
| 3704 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, position, bounds, false); | 3704 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, position, bounds, false); |
| 3705 root->setDrawsContent(true); | 3705 root->setDrawsContent(true); |
| 3706 root->setTouchEventHandlerRegion(touchHandlerRegion); | 3706 root->setTouchEventHandlerRegion(touchHandlerRegion); |
| 3707 | 3707 |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3747 // test makes sure that hit testing works correctly accounts for the content
s scale. | 3747 // test makes sure that hit testing works correctly accounts for the content
s scale. |
| 3748 // A contentsScale that is not 1 effectively forces a non-identity transform
between | 3748 // A contentsScale that is not 1 effectively forces a non-identity transform
between |
| 3749 // layer's content space and layer's origin space. The hit testing code must
take this into account. | 3749 // layer's content space and layer's origin space. The hit testing code must
take this into account. |
| 3750 // | 3750 // |
| 3751 // To test this, the layer is positioned at (25, 25), and is size (50, 50).
If | 3751 // To test this, the layer is positioned at (25, 25), and is size (50, 50).
If |
| 3752 // contentsScale is ignored, then hit checking will mis-interpret the visibl
eContentRect | 3752 // contentsScale is ignored, then hit checking will mis-interpret the visibl
eContentRect |
| 3753 // as being larger than the actual bounds of the layer. | 3753 // as being larger than the actual bounds of the layer. |
| 3754 // | 3754 // |
| 3755 FakeImplProxy proxy; | 3755 FakeImplProxy proxy; |
| 3756 FakeLayerTreeHostImpl hostImpl(&proxy); | 3756 FakeLayerTreeHostImpl hostImpl(&proxy); |
| 3757 scoped_ptr<LayerImpl> root = LayerImpl::create(&hostImpl, 1); | 3757 scoped_ptr<LayerImpl> root = LayerImpl::create(hostImpl.activeTree(), 1); |
| 3758 | 3758 |
| 3759 gfx::Transform identityMatrix; | 3759 gfx::Transform identityMatrix; |
| 3760 gfx::PointF anchor(0, 0); | 3760 gfx::PointF anchor(0, 0); |
| 3761 | 3761 |
| 3762 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, gfx::PointF(0, 0), gfx::Size(100, 100), false); | 3762 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, gfx::PointF(0, 0), gfx::Size(100, 100), false); |
| 3763 | 3763 |
| 3764 { | 3764 { |
| 3765 Region touchHandlerRegion(gfx::Rect(10, 10, 30, 30)); | 3765 Region touchHandlerRegion(gfx::Rect(10, 10, 30, 30)); |
| 3766 gfx::PointF position(25, 25); | 3766 gfx::PointF position(25, 25); |
| 3767 gfx::Size bounds(50, 50); | 3767 gfx::Size bounds(50, 50); |
| 3768 scoped_ptr<LayerImpl> testLayer = LayerImpl::create(&hostImpl, 12345); | 3768 scoped_ptr<LayerImpl> testLayer = LayerImpl::create(hostImpl.activeTree(
), 12345); |
| 3769 setLayerPropertiesForTesting(testLayer.get(), identityMatrix, identityMa
trix, anchor, position, bounds, false); | 3769 setLayerPropertiesForTesting(testLayer.get(), identityMatrix, identityMa
trix, anchor, position, bounds, false); |
| 3770 | 3770 |
| 3771 // override contentBounds and contentsScale | 3771 // override contentBounds and contentsScale |
| 3772 testLayer->setContentBounds(gfx::Size(100, 100)); | 3772 testLayer->setContentBounds(gfx::Size(100, 100)); |
| 3773 testLayer->setContentsScale(2, 2); | 3773 testLayer->setContentsScale(2, 2); |
| 3774 | 3774 |
| 3775 testLayer->setDrawsContent(true); | 3775 testLayer->setDrawsContent(true); |
| 3776 testLayer->setTouchEventHandlerRegion(touchHandlerRegion); | 3776 testLayer->setTouchEventHandlerRegion(touchHandlerRegion); |
| 3777 root->addChild(testLayer.Pass()); | 3777 root->addChild(testLayer.Pass()); |
| 3778 } | 3778 } |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3821 ASSERT_TRUE(resultLayer); | 3821 ASSERT_TRUE(resultLayer); |
| 3822 EXPECT_EQ(12345, resultLayer->id()); | 3822 EXPECT_EQ(12345, resultLayer->id()); |
| 3823 } | 3823 } |
| 3824 | 3824 |
| 3825 TEST(LayerTreeHostCommonTest, verifyHitCheckingTouchHandlerRegionsForSingleLayer
WithDeviceScale) | 3825 TEST(LayerTreeHostCommonTest, verifyHitCheckingTouchHandlerRegionsForSingleLayer
WithDeviceScale) |
| 3826 { | 3826 { |
| 3827 // The layer's deviceScalefactor and pageScaleFactor should scale the conten
tRect and we should | 3827 // The layer's deviceScalefactor and pageScaleFactor should scale the conten
tRect and we should |
| 3828 // be able to hit the touch handler region by scaling the points accordingly
. | 3828 // be able to hit the touch handler region by scaling the points accordingly
. |
| 3829 FakeImplProxy proxy; | 3829 FakeImplProxy proxy; |
| 3830 FakeLayerTreeHostImpl hostImpl(&proxy); | 3830 FakeLayerTreeHostImpl hostImpl(&proxy); |
| 3831 scoped_ptr<LayerImpl> root = LayerImpl::create(&hostImpl, 1); | 3831 scoped_ptr<LayerImpl> root = LayerImpl::create(hostImpl.activeTree(), 1); |
| 3832 | 3832 |
| 3833 gfx::Transform identityMatrix; | 3833 gfx::Transform identityMatrix; |
| 3834 gfx::PointF anchor(0, 0); | 3834 gfx::PointF anchor(0, 0); |
| 3835 // Set the bounds of the root layer big enough to fit the child when scaled. | 3835 // Set the bounds of the root layer big enough to fit the child when scaled. |
| 3836 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, gfx::PointF(0, 0), gfx::Size(100, 100), false); | 3836 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, gfx::PointF(0, 0), gfx::Size(100, 100), false); |
| 3837 | 3837 |
| 3838 { | 3838 { |
| 3839 Region touchHandlerRegion(gfx::Rect(10, 10, 30, 30)); | 3839 Region touchHandlerRegion(gfx::Rect(10, 10, 30, 30)); |
| 3840 gfx::PointF position(25, 25); | 3840 gfx::PointF position(25, 25); |
| 3841 gfx::Size bounds(50, 50); | 3841 gfx::Size bounds(50, 50); |
| 3842 scoped_ptr<LayerImpl> testLayer = LayerImpl::create(&hostImpl, 12345); | 3842 scoped_ptr<LayerImpl> testLayer = LayerImpl::create(hostImpl.activeTree(
), 12345); |
| 3843 setLayerPropertiesForTesting(testLayer.get(), identityMatrix, identityMa
trix, anchor, position, bounds, false); | 3843 setLayerPropertiesForTesting(testLayer.get(), identityMatrix, identityMa
trix, anchor, position, bounds, false); |
| 3844 | 3844 |
| 3845 testLayer->setDrawsContent(true); | 3845 testLayer->setDrawsContent(true); |
| 3846 testLayer->setTouchEventHandlerRegion(touchHandlerRegion); | 3846 testLayer->setTouchEventHandlerRegion(touchHandlerRegion); |
| 3847 root->addChild(testLayer.Pass()); | 3847 root->addChild(testLayer.Pass()); |
| 3848 } | 3848 } |
| 3849 | 3849 |
| 3850 std::vector<LayerImpl*> renderSurfaceLayerList; | 3850 std::vector<LayerImpl*> renderSurfaceLayerList; |
| 3851 int dummyMaxTextureSize = 512; | 3851 int dummyMaxTextureSize = 512; |
| 3852 float deviceScaleFactor = 3.0f; | 3852 float deviceScaleFactor = 3.0f; |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3909 | 3909 |
| 3910 TEST(LayerTreeHostCommonTest, verifyHitCheckingTouchHandlerRegionsForSimpleClipp
edLayer) | 3910 TEST(LayerTreeHostCommonTest, verifyHitCheckingTouchHandlerRegionsForSimpleClipp
edLayer) |
| 3911 { | 3911 { |
| 3912 // Test that hit-checking will only work for the visible portion of a layer,
and not | 3912 // Test that hit-checking will only work for the visible portion of a layer,
and not |
| 3913 // the entire layer bounds. Here we just test the simple axis-aligned case. | 3913 // the entire layer bounds. Here we just test the simple axis-aligned case. |
| 3914 gfx::Transform identityMatrix; | 3914 gfx::Transform identityMatrix; |
| 3915 gfx::PointF anchor(0, 0); | 3915 gfx::PointF anchor(0, 0); |
| 3916 | 3916 |
| 3917 FakeImplProxy proxy; | 3917 FakeImplProxy proxy; |
| 3918 FakeLayerTreeHostImpl hostImpl(&proxy); | 3918 FakeLayerTreeHostImpl hostImpl(&proxy); |
| 3919 scoped_ptr<LayerImpl> root = LayerImpl::create(&hostImpl, 1); | 3919 scoped_ptr<LayerImpl> root = LayerImpl::create(hostImpl.activeTree(), 1); |
| 3920 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, gfx::PointF(0, 0), gfx::Size(100, 100), false); | 3920 setLayerPropertiesForTesting(root.get(), identityMatrix, identityMatrix, anc
hor, gfx::PointF(0, 0), gfx::Size(100, 100), false); |
| 3921 | 3921 |
| 3922 { | 3922 { |
| 3923 scoped_ptr<LayerImpl> clippingLayer = LayerImpl::create(&hostImpl, 123); | 3923 scoped_ptr<LayerImpl> clippingLayer = LayerImpl::create(hostImpl.activeT
ree(), 123); |
| 3924 gfx::PointF position(25, 25); // this layer is positioned, and hit testi
ng should correctly know where the layer is located. | 3924 gfx::PointF position(25, 25); // this layer is positioned, and hit testi
ng should correctly know where the layer is located. |
| 3925 gfx::Size bounds(50, 50); | 3925 gfx::Size bounds(50, 50); |
| 3926 setLayerPropertiesForTesting(clippingLayer.get(), identityMatrix, identi
tyMatrix, anchor, position, bounds, false); | 3926 setLayerPropertiesForTesting(clippingLayer.get(), identityMatrix, identi
tyMatrix, anchor, position, bounds, false); |
| 3927 clippingLayer->setMasksToBounds(true); | 3927 clippingLayer->setMasksToBounds(true); |
| 3928 | 3928 |
| 3929 scoped_ptr<LayerImpl> child = LayerImpl::create(&hostImpl, 456); | 3929 scoped_ptr<LayerImpl> child = LayerImpl::create(hostImpl.activeTree(), 4
56); |
| 3930 Region touchHandlerRegion(gfx::Rect(10, 10, 50, 50)); | 3930 Region touchHandlerRegion(gfx::Rect(10, 10, 50, 50)); |
| 3931 position = gfx::PointF(-50, -50); | 3931 position = gfx::PointF(-50, -50); |
| 3932 bounds = gfx::Size(300, 300); | 3932 bounds = gfx::Size(300, 300); |
| 3933 setLayerPropertiesForTesting(child.get(), identityMatrix, identityMatrix
, anchor, position, bounds, false); | 3933 setLayerPropertiesForTesting(child.get(), identityMatrix, identityMatrix
, anchor, position, bounds, false); |
| 3934 child->setDrawsContent(true); | 3934 child->setDrawsContent(true); |
| 3935 child->setTouchEventHandlerRegion(touchHandlerRegion); | 3935 child->setTouchEventHandlerRegion(touchHandlerRegion); |
| 3936 clippingLayer->addChild(child.Pass()); | 3936 clippingLayer->addChild(child.Pass()); |
| 3937 root->addChild(clippingLayer.Pass()); | 3937 root->addChild(clippingLayer.Pass()); |
| 3938 } | 3938 } |
| 3939 | 3939 |
| (...skipping 749 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4689 child->addChild(grandChild); | 4689 child->addChild(grandChild); |
| 4690 child->setOpacity(0.5f); | 4690 child->setOpacity(0.5f); |
| 4691 | 4691 |
| 4692 executeCalculateDrawProperties(root.get()); | 4692 executeCalculateDrawProperties(root.get()); |
| 4693 | 4693 |
| 4694 EXPECT_FALSE(child->renderSurface()); | 4694 EXPECT_FALSE(child->renderSurface()); |
| 4695 } | 4695 } |
| 4696 | 4696 |
| 4697 } // namespace | 4697 } // namespace |
| 4698 } // namespace cc | 4698 } // namespace cc |
| OLD | NEW |