OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/property_tree.h" | 5 #include "cc/trees/property_tree.h" |
6 | 6 |
7 #include "cc/test/geometry_test_utils.h" | 7 #include "cc/test/geometry_test_utils.h" |
| 8 #include "cc/trees/draw_property_utils.h" |
8 #include "testing/gtest/include/gtest/gtest.h" | 9 #include "testing/gtest/include/gtest/gtest.h" |
9 | 10 |
10 namespace cc { | 11 namespace cc { |
11 | 12 |
12 TEST(PropertyTreeTest, ComputeTransformRoot) { | 13 TEST(PropertyTreeTest, ComputeTransformRoot) { |
13 TransformTree tree; | 14 TransformTree tree; |
14 TransformNode& root = *tree.Node(0); | 15 TransformNode& root = *tree.Node(0); |
15 root.data.local.Translate(2, 2); | 16 root.data.local.Translate(2, 2); |
16 root.data.target_id = 0; | 17 root.data.target_id = 0; |
17 tree.UpdateTransforms(0); | 18 tree.UpdateTransforms(0); |
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
161 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); | 162 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); |
162 | 163 |
163 transform.MakeIdentity(); | 164 transform.MakeIdentity(); |
164 expected.MakeIdentity(); | 165 expected.MakeIdentity(); |
165 expected.Translate(-4, -4); | 166 expected.Translate(-4, -4); |
166 success = tree.ComputeTransform(2, 3, &transform); | 167 success = tree.ComputeTransform(2, 3, &transform); |
167 EXPECT_TRUE(success); | 168 EXPECT_TRUE(success); |
168 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); | 169 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); |
169 } | 170 } |
170 | 171 |
| 172 TEST(PropertyTreeTest, TransformsWithFlattening) { |
| 173 TransformTree tree; |
| 174 |
| 175 int grand_parent = tree.Insert(TransformNode(), 0); |
| 176 tree.Node(grand_parent)->data.content_target_id = grand_parent; |
| 177 tree.Node(grand_parent)->data.target_id = grand_parent; |
| 178 |
| 179 gfx::Transform rotation_about_x; |
| 180 rotation_about_x.RotateAboutXAxis(15); |
| 181 |
| 182 int parent = tree.Insert(TransformNode(), grand_parent); |
| 183 tree.Node(parent)->data.needs_sublayer_scale = true; |
| 184 tree.Node(parent)->data.target_id = grand_parent; |
| 185 tree.Node(parent)->data.content_target_id = parent; |
| 186 tree.Node(parent)->data.local = rotation_about_x; |
| 187 |
| 188 int child = tree.Insert(TransformNode(), parent); |
| 189 tree.Node(child)->data.target_id = parent; |
| 190 tree.Node(child)->data.content_target_id = parent; |
| 191 tree.Node(child)->data.flattens_inherited_transform = true; |
| 192 tree.Node(child)->data.local = rotation_about_x; |
| 193 |
| 194 int grand_child = tree.Insert(TransformNode(), child); |
| 195 tree.Node(grand_child)->data.target_id = parent; |
| 196 tree.Node(grand_child)->data.content_target_id = parent; |
| 197 tree.Node(grand_child)->data.flattens_inherited_transform = true; |
| 198 tree.Node(grand_child)->data.local = rotation_about_x; |
| 199 |
| 200 ComputeTransforms(&tree); |
| 201 |
| 202 gfx::Transform flattened_rotation_about_x = rotation_about_x; |
| 203 flattened_rotation_about_x.FlattenTo2d(); |
| 204 |
| 205 EXPECT_TRANSFORMATION_MATRIX_EQ(rotation_about_x, |
| 206 tree.Node(child)->data.to_target); |
| 207 |
| 208 EXPECT_TRANSFORMATION_MATRIX_EQ(flattened_rotation_about_x * rotation_about_x, |
| 209 tree.Node(child)->data.to_screen); |
| 210 |
| 211 EXPECT_TRANSFORMATION_MATRIX_EQ(flattened_rotation_about_x * rotation_about_x, |
| 212 tree.Node(grand_child)->data.to_target); |
| 213 |
| 214 EXPECT_TRANSFORMATION_MATRIX_EQ(flattened_rotation_about_x * |
| 215 flattened_rotation_about_x * |
| 216 rotation_about_x, |
| 217 tree.Node(grand_child)->data.to_screen); |
| 218 |
| 219 gfx::Transform grand_child_to_child; |
| 220 bool success = |
| 221 tree.ComputeTransform(grand_child, child, &grand_child_to_child); |
| 222 EXPECT_TRUE(success); |
| 223 EXPECT_TRANSFORMATION_MATRIX_EQ(rotation_about_x, grand_child_to_child); |
| 224 |
| 225 // Remove flattening at grand_child, and recompute transforms. |
| 226 tree.Node(grand_child)->data.flattens_inherited_transform = false; |
| 227 ComputeTransforms(&tree); |
| 228 |
| 229 EXPECT_TRANSFORMATION_MATRIX_EQ(rotation_about_x * rotation_about_x, |
| 230 tree.Node(grand_child)->data.to_target); |
| 231 |
| 232 EXPECT_TRANSFORMATION_MATRIX_EQ( |
| 233 flattened_rotation_about_x * rotation_about_x * rotation_about_x, |
| 234 tree.Node(grand_child)->data.to_screen); |
| 235 |
| 236 success = tree.ComputeTransform(grand_child, child, &grand_child_to_child); |
| 237 EXPECT_TRUE(success); |
| 238 EXPECT_TRANSFORMATION_MATRIX_EQ(rotation_about_x, grand_child_to_child); |
| 239 } |
| 240 |
171 TEST(PropertyTreeTest, MultiplicationOrder) { | 241 TEST(PropertyTreeTest, MultiplicationOrder) { |
172 TransformTree tree; | 242 TransformTree tree; |
173 TransformNode& root = *tree.Node(0); | 243 TransformNode& root = *tree.Node(0); |
174 root.data.local.Translate(2, 2); | 244 root.data.local.Translate(2, 2); |
175 root.data.target_id = 0; | 245 root.data.target_id = 0; |
176 tree.UpdateTransforms(0); | 246 tree.UpdateTransforms(0); |
177 | 247 |
178 TransformNode child; | 248 TransformNode child; |
179 child.data.local.Scale(2, 2); | 249 child.data.local.Scale(2, 2); |
180 child.data.target_id = 0; | 250 child.data.target_id = 0; |
(...skipping 14 matching lines...) Expand all Loading... |
195 | 265 |
196 success = tree.ComputeTransform(-1, 1, &inverse); | 266 success = tree.ComputeTransform(-1, 1, &inverse); |
197 EXPECT_TRUE(success); | 267 EXPECT_TRUE(success); |
198 | 268 |
199 transform = transform * inverse; | 269 transform = transform * inverse; |
200 expected.MakeIdentity(); | 270 expected.MakeIdentity(); |
201 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); | 271 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, transform); |
202 } | 272 } |
203 | 273 |
204 } // namespace cc | 274 } // namespace cc |
OLD | NEW |