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

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

Issue 2733633002: Handle nested position:sticky elements correctly (compositor) (Closed)
Patch Set: Revert float changes to unittests too 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 740 matching lines...) Expand 10 before | Expand all | Expand 10 after
751 // viewport bounds change, but do not unconditionally move by that delta 751 // viewport bounds change, but do not unconditionally move by that delta
752 // like fixed position nodes. 752 // like fixed position nodes.
753 if (scroll_ancestor->scrolls_inner_viewport) { 753 if (scroll_ancestor->scrolls_inner_viewport) {
754 data_for_children->property_trees->transform_tree 754 data_for_children->property_trees->transform_tree
755 .AddNodeAffectedByInnerViewportBoundsDelta(node->id); 755 .AddNodeAffectedByInnerViewportBoundsDelta(node->id);
756 } else if (scroll_ancestor->scrolls_outer_viewport) { 756 } else if (scroll_ancestor->scrolls_outer_viewport) {
757 data_for_children->property_trees->transform_tree 757 data_for_children->property_trees->transform_tree
758 .AddNodeAffectedByOuterViewportBoundsDelta(node->id); 758 .AddNodeAffectedByOuterViewportBoundsDelta(node->id);
759 } 759 }
760 } 760 }
761 // TODO(smcgruer): Pass main thread sticky-shifting offsets of
762 // non-promoted ancestors, or promote all ancestor sticky elements.
763 // See http://crbug.com/702229
761 sticky_data->main_thread_offset = 764 sticky_data->main_thread_offset =
762 layer->position().OffsetFromOrigin() - 765 layer->position().OffsetFromOrigin() -
763 sticky_data->constraints.parent_relative_sticky_box_offset 766 sticky_data->constraints.parent_relative_sticky_box_offset
764 .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 shifting_sticky_box_layer_id =
773 sticky_data->constraints.nearest_layer_shifting_sticky_box;
774 if (shifting_sticky_box_layer_id != Layer::INVALID_ID) {
775 sticky_data->nearest_node_shifting_sticky_box =
776 data_for_children->property_trees->transform_tree
777 .FindNodeIndexFromOwningLayerId(shifting_sticky_box_layer_id);
778 DCHECK(sticky_data->nearest_node_shifting_sticky_box !=
779 TransformTree::kInvalidNodeId);
780 }
781 int shifting_containing_block_layer_id =
782 sticky_data->constraints.nearest_layer_shifting_containing_block;
783 if (shifting_containing_block_layer_id != Layer::INVALID_ID) {
784 sticky_data->nearest_node_shifting_containing_block =
785 data_for_children->property_trees->transform_tree
786 .FindNodeIndexFromOwningLayerId(
787 shifting_containing_block_layer_id);
788 DCHECK(sticky_data->nearest_node_shifting_containing_block !=
789 TransformTree::kInvalidNodeId);
790 }
765 } 791 }
766 792
767 node->needs_local_transform_update = true; 793 node->needs_local_transform_update = true;
768 data_from_ancestor.property_trees->transform_tree.UpdateTransforms(node->id); 794 data_from_ancestor.property_trees->transform_tree.UpdateTransforms(node->id);
769 795
770 layer->set_offset_to_transform_parent(gfx::Vector2dF()); 796 layer->set_offset_to_transform_parent(gfx::Vector2dF());
771 797
772 // Flattening (if needed) will be handled by |node|. 798 // Flattening (if needed) will be handled by |node|.
773 layer->set_should_flatten_transform_from_property_tree(false); 799 layer->set_should_flatten_transform_from_property_tree(false);
774 800
(...skipping 771 matching lines...) Expand 10 before | Expand all | Expand 10 after
1546 root_layer, page_scale_layer, inner_viewport_scroll_layer, 1572 root_layer, page_scale_layer, inner_viewport_scroll_layer,
1547 outer_viewport_scroll_layer, overscroll_elasticity_layer, 1573 outer_viewport_scroll_layer, overscroll_elasticity_layer,
1548 elastic_overscroll, page_scale_factor, device_scale_factor, viewport, 1574 elastic_overscroll, page_scale_factor, device_scale_factor, viewport,
1549 device_transform, property_trees, color); 1575 device_transform, property_trees, color);
1550 property_trees->effect_tree.CreateOrReuseRenderSurfaces( 1576 property_trees->effect_tree.CreateOrReuseRenderSurfaces(
1551 &render_surfaces, root_layer->layer_tree_impl()); 1577 &render_surfaces, root_layer->layer_tree_impl());
1552 property_trees->ResetCachedData(); 1578 property_trees->ResetCachedData();
1553 } 1579 }
1554 1580
1555 } // namespace cc 1581 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698