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 <stddef.h> | 5 #include <stddef.h> |
6 | 6 |
7 #include <set> | 7 #include <set> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
330 bool all_are_invertible = dest_to_source.GetInverse(&source_to_dest); | 330 bool all_are_invertible = dest_to_source.GetInverse(&source_to_dest); |
331 transform->PreconcatTransform(source_to_dest); | 331 transform->PreconcatTransform(source_to_dest); |
332 return all_are_invertible; | 332 return all_are_invertible; |
333 } | 333 } |
334 | 334 |
335 void TransformTree::UpdateLocalTransform(TransformNode* node) { | 335 void TransformTree::UpdateLocalTransform(TransformNode* node) { |
336 gfx::Transform transform = node->post_local; | 336 gfx::Transform transform = node->post_local; |
337 if (NeedsSourceToParentUpdate(node)) { | 337 if (NeedsSourceToParentUpdate(node)) { |
338 gfx::Transform to_parent; | 338 gfx::Transform to_parent; |
339 ComputeTranslation(node->source_node_id, node->parent_id, &to_parent); | 339 ComputeTranslation(node->source_node_id, node->parent_id, &to_parent); |
| 340 gfx::Vector2dF unsnapping; |
| 341 TransformNode* current; |
| 342 TransformNode* parent_node; |
| 343 for (current = Node(node->source_node_id); current->id > node->parent_id; |
| 344 current = parent(current)) { |
| 345 unsnapping.Subtract(current->scroll_snap); |
| 346 } |
| 347 for (parent_node = Node(node->parent_id); |
| 348 parent_node->id > node->source_node_id; |
| 349 parent_node = parent(parent_node)) { |
| 350 unsnapping.Add(parent_node->scroll_snap); |
| 351 } |
| 352 // If a node NeedsSourceToParentUpdate, the node is either a fixed position |
| 353 // node or a scroll child. |
| 354 // If the node has a fixed position, the parent of the node is an ancestor |
| 355 // of source node, current->id should be equal to node->parent_id. |
| 356 // Otherwise, the node's source node is always an ancestor of the node owned |
| 357 // by the scroll parent, so parent_node->id should be equal to |
| 358 // node->source_node_id. |
| 359 DCHECK(current->id == node->parent_id || |
| 360 parent_node->id == node->source_node_id); |
| 361 to_parent.Translate(unsnapping.x(), unsnapping.y()); |
340 node->source_to_parent = to_parent.To2dTranslation(); | 362 node->source_to_parent = to_parent.To2dTranslation(); |
341 } | 363 } |
342 | 364 |
343 gfx::Vector2dF fixed_position_adjustment; | 365 gfx::Vector2dF fixed_position_adjustment; |
344 gfx::Vector2dF inner_viewport_bounds_delta = | 366 gfx::Vector2dF inner_viewport_bounds_delta = |
345 property_trees()->inner_viewport_container_bounds_delta(); | 367 property_trees()->inner_viewport_container_bounds_delta(); |
346 gfx::Vector2dF outer_viewport_bounds_delta = | 368 gfx::Vector2dF outer_viewport_bounds_delta = |
347 property_trees()->outer_viewport_container_bounds_delta(); | 369 property_trees()->outer_viewport_container_bounds_delta(); |
348 if (node->affected_by_inner_viewport_bounds_delta_x) | 370 if (node->affected_by_inner_viewport_bounds_delta_x) |
349 fixed_position_adjustment.set_x(inner_viewport_bounds_delta.x()); | 371 fixed_position_adjustment.set_x(inner_viewport_bounds_delta.x()); |
(...skipping 1654 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2004 DCHECK(effect_node->has_render_surface || | 2026 DCHECK(effect_node->has_render_surface || |
2005 effect_node->id == EffectTree::kRootNodeId); | 2027 effect_node->id == EffectTree::kRootNodeId); |
2006 target_transform_id = effect_node->transform_id; | 2028 target_transform_id = effect_node->transform_id; |
2007 } | 2029 } |
2008 | 2030 |
2009 return transform_tree.ComputeTransform(target_transform_id, transform_id, | 2031 return transform_tree.ComputeTransform(target_transform_id, transform_id, |
2010 transform); | 2032 transform); |
2011 } | 2033 } |
2012 | 2034 |
2013 } // namespace cc | 2035 } // namespace cc |
OLD | NEW |