| 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 <set> | 5 #include <set> |
| 6 #include <vector> | 6 #include <vector> |
| 7 | 7 |
| 8 #include "base/logging.h" | 8 #include "base/logging.h" |
| 9 #include "cc/base/math_util.h" | 9 #include "cc/base/math_util.h" |
| 10 #include "cc/trees/property_tree.h" | 10 #include "cc/trees/property_tree.h" |
| (...skipping 30 matching lines...) Expand all Loading... |
| 41 back()->parent_id = -1; | 41 back()->parent_id = -1; |
| 42 } | 42 } |
| 43 | 43 |
| 44 template class PropertyTree<TransformNode>; | 44 template class PropertyTree<TransformNode>; |
| 45 template class PropertyTree<ClipNode>; | 45 template class PropertyTree<ClipNode>; |
| 46 template class PropertyTree<OpacityNode>; | 46 template class PropertyTree<OpacityNode>; |
| 47 | 47 |
| 48 TransformNodeData::TransformNodeData() | 48 TransformNodeData::TransformNodeData() |
| 49 : target_id(-1), | 49 : target_id(-1), |
| 50 content_target_id(-1), | 50 content_target_id(-1), |
| 51 source_node_id(-1), |
| 51 needs_local_transform_update(true), | 52 needs_local_transform_update(true), |
| 52 is_invertible(true), | 53 is_invertible(true), |
| 53 ancestors_are_invertible(true), | 54 ancestors_are_invertible(true), |
| 54 is_animated(false), | 55 is_animated(false), |
| 55 to_screen_is_animated(false), | 56 to_screen_is_animated(false), |
| 56 flattens_inherited_transform(false), | 57 flattens_inherited_transform(false), |
| 57 node_and_ancestors_are_flat(true), | 58 node_and_ancestors_are_flat(true), |
| 58 scrolls(false), | 59 scrolls(false), |
| 59 needs_sublayer_scale(false), | 60 needs_sublayer_scale(false), |
| 60 layer_scale_factor(1.0f) { | 61 layer_scale_factor(1.0f) { |
| 61 } | 62 } |
| 62 | 63 |
| 63 TransformNodeData::~TransformNodeData() { | 64 TransformNodeData::~TransformNodeData() { |
| 64 } | 65 } |
| 65 | 66 |
| 66 void TransformNodeData::update_pre_local_transform( | 67 void TransformNodeData::update_pre_local_transform( |
| 67 const gfx::Point3F& transform_origin) { | 68 const gfx::Point3F& transform_origin) { |
| 68 pre_local.MakeIdentity(); | 69 pre_local.MakeIdentity(); |
| 69 pre_local.Translate3d(-transform_origin.x(), -transform_origin.y(), | 70 pre_local.Translate3d(-transform_origin.x(), -transform_origin.y(), |
| 70 -transform_origin.z()); | 71 -transform_origin.z()); |
| 71 } | 72 } |
| 72 | 73 |
| 73 void TransformNodeData::update_post_local_transform( | 74 void TransformNodeData::update_post_local_transform( |
| 74 const gfx::PointF& position, | 75 const gfx::PointF& position, |
| 75 const gfx::Point3F& transform_origin) { | 76 const gfx::Point3F& transform_origin) { |
| 76 post_local.MakeIdentity(); | 77 post_local.MakeIdentity(); |
| 77 post_local.Scale(post_local_scale_factor, post_local_scale_factor); | 78 post_local.Scale(post_local_scale_factor, post_local_scale_factor); |
| 78 post_local.Translate3d( | 79 post_local.Translate3d( |
| 79 position.x() + parent_offset.x() + transform_origin.x(), | 80 position.x() + source_offset.x() + transform_origin.x(), |
| 80 position.y() + parent_offset.y() + transform_origin.y(), | 81 position.y() + source_offset.y() + transform_origin.y(), |
| 81 transform_origin.z()); | 82 transform_origin.z()); |
| 82 } | 83 } |
| 83 | 84 |
| 84 ClipNodeData::ClipNodeData() : transform_id(-1), target_id(-1) { | 85 ClipNodeData::ClipNodeData() : transform_id(-1), target_id(-1) { |
| 85 } | 86 } |
| 86 | 87 |
| 87 bool TransformTree::ComputeTransform(int source_id, | 88 bool TransformTree::ComputeTransform(int source_id, |
| 88 int dest_id, | 89 int dest_id, |
| 89 gfx::Transform* transform) const { | 90 gfx::Transform* transform) const { |
| 90 transform->MakeIdentity(); | 91 transform->MakeIdentity(); |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 134 bool TransformTree::Are2DAxisAligned(int source_id, int dest_id) const { | 135 bool TransformTree::Are2DAxisAligned(int source_id, int dest_id) const { |
| 135 gfx::Transform transform; | 136 gfx::Transform transform; |
| 136 return ComputeTransform(source_id, dest_id, &transform) && | 137 return ComputeTransform(source_id, dest_id, &transform) && |
| 137 transform.Preserves2dAxisAlignment(); | 138 transform.Preserves2dAxisAlignment(); |
| 138 } | 139 } |
| 139 | 140 |
| 140 void TransformTree::UpdateTransforms(int id) { | 141 void TransformTree::UpdateTransforms(int id) { |
| 141 TransformNode* node = Node(id); | 142 TransformNode* node = Node(id); |
| 142 TransformNode* parent_node = parent(node); | 143 TransformNode* parent_node = parent(node); |
| 143 TransformNode* target_node = Node(node->data.target_id); | 144 TransformNode* target_node = Node(node->data.target_id); |
| 144 if (node->data.needs_local_transform_update) | 145 if (node->data.needs_local_transform_update || |
| 146 node->parent_id != node->data.source_node_id) |
| 145 UpdateLocalTransform(node); | 147 UpdateLocalTransform(node); |
| 146 UpdateScreenSpaceTransform(node, parent_node, target_node); | 148 UpdateScreenSpaceTransform(node, parent_node, target_node); |
| 147 UpdateSublayerScale(node); | 149 UpdateSublayerScale(node); |
| 148 UpdateTargetSpaceTransform(node, target_node); | 150 UpdateTargetSpaceTransform(node, target_node); |
| 149 UpdateIsAnimated(node, parent_node); | 151 UpdateIsAnimated(node, parent_node); |
| 150 UpdateSnapping(node); | 152 UpdateSnapping(node); |
| 151 } | 153 } |
| 152 | 154 |
| 153 bool TransformTree::IsDescendant(int desc_id, int source_id) const { | 155 bool TransformTree::IsDescendant(int desc_id, int source_id) const { |
| 154 while (desc_id != source_id) { | 156 while (desc_id != source_id) { |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 242 gfx::Transform dest_to_source; | 244 gfx::Transform dest_to_source; |
| 243 CombineTransformsBetween(dest_id, source_id, &dest_to_source); | 245 CombineTransformsBetween(dest_id, source_id, &dest_to_source); |
| 244 gfx::Transform source_to_dest; | 246 gfx::Transform source_to_dest; |
| 245 bool all_are_invertible = dest_to_source.GetInverse(&source_to_dest); | 247 bool all_are_invertible = dest_to_source.GetInverse(&source_to_dest); |
| 246 transform->PreconcatTransform(source_to_dest); | 248 transform->PreconcatTransform(source_to_dest); |
| 247 return all_are_invertible; | 249 return all_are_invertible; |
| 248 } | 250 } |
| 249 | 251 |
| 250 void TransformTree::UpdateLocalTransform(TransformNode* node) { | 252 void TransformTree::UpdateLocalTransform(TransformNode* node) { |
| 251 gfx::Transform transform = node->data.post_local; | 253 gfx::Transform transform = node->data.post_local; |
| 252 transform.Translate(-node->data.scroll_offset.x(), | 254 gfx::Vector2dF source_to_parent; |
| 253 -node->data.scroll_offset.y()); | 255 if (node->parent_id != node->data.source_node_id) { |
| 256 gfx::Transform to_parent; |
| 257 ComputeTransform(node->data.source_node_id, node->parent_id, &to_parent); |
| 258 source_to_parent = to_parent.To2dTranslation(); |
| 259 } |
| 260 transform.Translate(source_to_parent.x() - node->data.scroll_offset.x(), |
| 261 source_to_parent.y() - node->data.scroll_offset.y()); |
| 254 transform.PreconcatTransform(node->data.local); | 262 transform.PreconcatTransform(node->data.local); |
| 255 transform.PreconcatTransform(node->data.pre_local); | 263 transform.PreconcatTransform(node->data.pre_local); |
| 256 node->data.set_to_parent(transform); | 264 node->data.set_to_parent(transform); |
| 257 node->data.needs_local_transform_update = false; | 265 node->data.needs_local_transform_update = false; |
| 258 } | 266 } |
| 259 | 267 |
| 260 void TransformTree::UpdateScreenSpaceTransform(TransformNode* node, | 268 void TransformTree::UpdateScreenSpaceTransform(TransformNode* node, |
| 261 TransformNode* parent_node, | 269 TransformNode* parent_node, |
| 262 TransformNode* target_node) { | 270 TransformNode* target_node) { |
| 263 if (!parent_node) { | 271 if (!parent_node) { |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 349 node->data.from_screen.matrix().postTranslate(-translation.x(), | 357 node->data.from_screen.matrix().postTranslate(-translation.x(), |
| 350 -translation.y(), 0); | 358 -translation.y(), 0); |
| 351 | 359 |
| 352 node->data.scroll_snap = translation; | 360 node->data.scroll_snap = translation; |
| 353 } | 361 } |
| 354 | 362 |
| 355 PropertyTrees::PropertyTrees() : needs_rebuild(true) { | 363 PropertyTrees::PropertyTrees() : needs_rebuild(true) { |
| 356 } | 364 } |
| 357 | 365 |
| 358 } // namespace cc | 366 } // namespace cc |
| OLD | NEW |