Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(300)

Side by Side Diff: cc/trees/property_tree_builder.cc

Issue 2733633002: Handle nested position:sticky elements correctly (compositor) (Closed)
Patch Set: More layer id fixes Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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 // TODO(smcgruer): Pass main thread sticky-shifting offsets of
763 // non-promoted ancestors, or promote all ancestor sticky elements.
764 // See http://crbug.com/702229
762 sticky_data->main_thread_offset = 765 sticky_data->main_thread_offset =
763 layer->position().OffsetFromOrigin() - 766 layer->position().OffsetFromOrigin() -
764 sticky_data->constraints.parent_relative_sticky_box_offset 767 sticky_data->constraints.parent_relative_sticky_box_offset
765 .OffsetFromOrigin(); 768 .OffsetFromOrigin();
769
770 // Copy the ancestor nodes for later use. These layers are guaranteed to
771 // have transform nodes at this point because they are our ancestors (so
772 // have already been processed) and are sticky (so have transform nodes).
773 int shifting_sticky_box_layer_id =
774 sticky_data->constraints.nearest_layer_shifting_sticky_box;
775 if (shifting_sticky_box_layer_id != Layer::INVALID_ID) {
776 DCHECK(data_for_children->property_trees->IsInIdToIndexMap(
777 PropertyTrees::TreeType::TRANSFORM, shifting_sticky_box_layer_id));
778 sticky_data->nearest_node_shifting_sticky_box =
779 data_for_children->property_trees
780 ->layer_id_to_transform_node_index[shifting_sticky_box_layer_id];
ajuma 2017/03/17 23:59:52 This needs to use TransformTree::FindNodeIndexFrom
smcgruer 2017/03/20 13:36:30 Done.
781 }
782 int shifting_containing_block_layer_id =
783 sticky_data->constraints.nearest_layer_shifting_containing_block;
784 if (shifting_containing_block_layer_id != Layer::INVALID_ID) {
785 DCHECK(data_for_children->property_trees->IsInIdToIndexMap(
786 PropertyTrees::TreeType::TRANSFORM,
787 shifting_containing_block_layer_id));
788 sticky_data->nearest_node_shifting_containing_block =
789 data_for_children->property_trees->layer_id_to_transform_node_index
790 [shifting_containing_block_layer_id];
791 }
766 } 792 }
767 793
768 node->needs_local_transform_update = true; 794 node->needs_local_transform_update = true;
769 data_from_ancestor.property_trees->transform_tree.UpdateTransforms(node->id); 795 data_from_ancestor.property_trees->transform_tree.UpdateTransforms(node->id);
770 796
771 layer->set_offset_to_transform_parent(gfx::Vector2dF()); 797 layer->set_offset_to_transform_parent(gfx::Vector2dF());
772 798
773 // Flattening (if needed) will be handled by |node|. 799 // Flattening (if needed) will be handled by |node|.
774 layer->set_should_flatten_transform_from_property_tree(false); 800 layer->set_should_flatten_transform_from_property_tree(false);
775 801
(...skipping 771 matching lines...) Expand 10 before | Expand all | Expand 10 after
1547 root_layer, page_scale_layer, inner_viewport_scroll_layer, 1573 root_layer, page_scale_layer, inner_viewport_scroll_layer,
1548 outer_viewport_scroll_layer, overscroll_elasticity_layer, 1574 outer_viewport_scroll_layer, overscroll_elasticity_layer,
1549 elastic_overscroll, page_scale_factor, device_scale_factor, viewport, 1575 elastic_overscroll, page_scale_factor, device_scale_factor, viewport,
1550 device_transform, property_trees, color); 1576 device_transform, property_trees, color);
1551 property_trees->effect_tree.CreateOrReuseRenderSurfaces( 1577 property_trees->effect_tree.CreateOrReuseRenderSurfaces(
1552 &render_surfaces, root_layer->layer_tree_impl()); 1578 &render_surfaces, root_layer->layer_tree_impl());
1553 property_trees->ResetCachedData(); 1579 property_trees->ResetCachedData();
1554 } 1580 }
1555 1581
1556 } // namespace cc 1582 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698