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_builder.h" | 5 #include "cc/trees/property_tree_builder.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <map> | 9 #include <map> |
10 #include <set> | 10 #include <set> |
(...skipping 741 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
752 // viewport bounds change, but do not unconditionally move by that delta | 752 // viewport bounds change, but do not unconditionally move by that delta |
753 // like fixed position nodes. | 753 // like fixed position nodes. |
754 if (scroll_ancestor->scrolls_inner_viewport) { | 754 if (scroll_ancestor->scrolls_inner_viewport) { |
755 data_for_children->property_trees->transform_tree | 755 data_for_children->property_trees->transform_tree |
756 .AddNodeAffectedByInnerViewportBoundsDelta(node->id); | 756 .AddNodeAffectedByInnerViewportBoundsDelta(node->id); |
757 } else if (scroll_ancestor->scrolls_outer_viewport) { | 757 } else if (scroll_ancestor->scrolls_outer_viewport) { |
758 data_for_children->property_trees->transform_tree | 758 data_for_children->property_trees->transform_tree |
759 .AddNodeAffectedByOuterViewportBoundsDelta(node->id); | 759 .AddNodeAffectedByOuterViewportBoundsDelta(node->id); |
760 } | 760 } |
761 } | 761 } |
| 762 // This calculation will be incorrect if we have an ancestor sticky element |
| 763 // that is not composited: http://crbug.com/702229 |
762 sticky_data->main_thread_offset = | 764 sticky_data->main_thread_offset = |
763 layer->position().OffsetFromOrigin() - | 765 layer->position().OffsetFromOrigin() - |
764 sticky_data->constraints.parent_relative_sticky_box_offset | 766 sticky_data->constraints.parent_relative_sticky_box_offset |
765 .OffsetFromOrigin(); | 767 .OffsetFromOrigin(); |
| 768 |
| 769 // Copy the ancestor nodes for later use. These layers are guaranteed to |
| 770 // have transform nodes at this point because they are our ancestors (so |
| 771 // have already been processed) and are sticky (so have transform nodes). |
| 772 int x = sticky_data->constraints.nearest_layer_shifting_sticky_box; |
| 773 if (x >= 0) { |
| 774 DCHECK(data_for_children->property_trees->IsInIdToIndexMap( |
| 775 PropertyTrees::TreeType::TRANSFORM, x)); |
| 776 sticky_data->nearest_node_shifting_sticky_box = |
| 777 data_for_children->property_trees |
| 778 ->layer_id_to_transform_node_index[x]; |
| 779 } |
| 780 int y = sticky_data->constraints.nearest_layer_shifting_containing_block; |
| 781 if (y >= 0) { |
| 782 DCHECK(data_for_children->property_trees->IsInIdToIndexMap( |
| 783 PropertyTrees::TreeType::TRANSFORM, y)); |
| 784 sticky_data->nearest_node_shifting_containing_block = |
| 785 data_for_children->property_trees |
| 786 ->layer_id_to_transform_node_index[y]; |
| 787 } |
766 } | 788 } |
767 | 789 |
768 node->needs_local_transform_update = true; | 790 node->needs_local_transform_update = true; |
769 data_from_ancestor.property_trees->transform_tree.UpdateTransforms(node->id); | 791 data_from_ancestor.property_trees->transform_tree.UpdateTransforms(node->id); |
770 | 792 |
771 layer->set_offset_to_transform_parent(gfx::Vector2dF()); | 793 layer->set_offset_to_transform_parent(gfx::Vector2dF()); |
772 | 794 |
773 // Flattening (if needed) will be handled by |node|. | 795 // Flattening (if needed) will be handled by |node|. |
774 layer->set_should_flatten_transform_from_property_tree(false); | 796 layer->set_should_flatten_transform_from_property_tree(false); |
775 | 797 |
(...skipping 771 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1547 root_layer, page_scale_layer, inner_viewport_scroll_layer, | 1569 root_layer, page_scale_layer, inner_viewport_scroll_layer, |
1548 outer_viewport_scroll_layer, overscroll_elasticity_layer, | 1570 outer_viewport_scroll_layer, overscroll_elasticity_layer, |
1549 elastic_overscroll, page_scale_factor, device_scale_factor, viewport, | 1571 elastic_overscroll, page_scale_factor, device_scale_factor, viewport, |
1550 device_transform, property_trees, color); | 1572 device_transform, property_trees, color); |
1551 property_trees->effect_tree.CreateOrReuseRenderSurfaces( | 1573 property_trees->effect_tree.CreateOrReuseRenderSurfaces( |
1552 &render_surfaces, root_layer->layer_tree_impl()); | 1574 &render_surfaces, root_layer->layer_tree_impl()); |
1553 property_trees->ResetCachedData(); | 1575 property_trees->ResetCachedData(); |
1554 } | 1576 } |
1555 | 1577 |
1556 } // namespace cc | 1578 } // namespace cc |
OLD | NEW |