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

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

Issue 2733633002: Handle nested position:sticky elements correctly (compositor) (Closed)
Patch Set: Fix unittest 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 495 matching lines...) Expand 10 before | Expand all | Expand 10 after
506 } 506 }
507 507
508 static inline bool ShouldFlattenTransform(Layer* layer) { 508 static inline bool ShouldFlattenTransform(Layer* layer) {
509 return layer->should_flatten_transform(); 509 return layer->should_flatten_transform();
510 } 510 }
511 511
512 static inline bool ShouldFlattenTransform(LayerImpl* layer) { 512 static inline bool ShouldFlattenTransform(LayerImpl* layer) {
513 return layer->test_properties()->should_flatten_transform; 513 return layer->test_properties()->should_flatten_transform;
514 } 514 }
515 515
516 static inline gfx::Vector2dF CalculateTotalStickyOffsetToScroller(
517 LayerImpl* layer,
518 int scroll_ancestor_layer_id) {
519 return gfx::Vector2dF();
flackr 2017/03/09 20:22:08 Add NOTREACHED() or equivalent in this function.
smcgruer 2017/03/10 16:37:10 Done.
520 }
521
522 static inline gfx::Vector2dF CalculateTotalStickyOffsetToScroller(
523 Layer* layer,
524 int scroll_ancestor_layer_id) {
525 return draw_property_utils::CalculateTotalStickyOffsetToScroller(
526 layer, scroll_ancestor_layer_id);
527 }
528
516 template <typename LayerType> 529 template <typename LayerType>
517 bool AddTransformNodeIfNeeded( 530 bool AddTransformNodeIfNeeded(
518 const DataForRecursion<LayerType>& data_from_ancestor, 531 const DataForRecursion<LayerType>& data_from_ancestor,
519 LayerType* layer, 532 LayerType* layer,
520 bool created_render_surface, 533 bool created_render_surface,
521 DataForRecursion<LayerType>* data_for_children) { 534 DataForRecursion<LayerType>* data_for_children) {
522 const bool is_root = !Parent(layer); 535 const bool is_root = !Parent(layer);
523 const bool is_page_scale_layer = layer == data_from_ancestor.page_scale_layer; 536 const bool is_page_scale_layer = layer == data_from_ancestor.page_scale_layer;
524 const bool is_overscroll_elasticity_layer = 537 const bool is_overscroll_elasticity_layer =
525 layer == data_from_ancestor.overscroll_elasticity_layer; 538 layer == data_from_ancestor.overscroll_elasticity_layer;
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after
752 // viewport bounds change, but do not unconditionally move by that delta 765 // viewport bounds change, but do not unconditionally move by that delta
753 // like fixed position nodes. 766 // like fixed position nodes.
754 if (scroll_ancestor->scrolls_inner_viewport) { 767 if (scroll_ancestor->scrolls_inner_viewport) {
755 data_for_children->property_trees->transform_tree 768 data_for_children->property_trees->transform_tree
756 .AddNodeAffectedByInnerViewportBoundsDelta(node->id); 769 .AddNodeAffectedByInnerViewportBoundsDelta(node->id);
757 } else if (scroll_ancestor->scrolls_outer_viewport) { 770 } else if (scroll_ancestor->scrolls_outer_viewport) {
758 data_for_children->property_trees->transform_tree 771 data_for_children->property_trees->transform_tree
759 .AddNodeAffectedByOuterViewportBoundsDelta(node->id); 772 .AddNodeAffectedByOuterViewportBoundsDelta(node->id);
760 } 773 }
761 } 774 }
762 sticky_data->main_thread_offset = 775 // The sticky box offset calculated in CompositedLayerMapping must be
763 layer->position().OffsetFromOrigin() - 776 // adjusted for the enclosing layer's sticky offset.
764 sticky_data->constraints.parent_relative_sticky_box_offset 777 // TODO(smcgruer): Maybe do this blink side instead.
flackr 2017/03/09 20:22:08 Given that we may have to do this on the cc side f
smcgruer 2017/03/10 16:37:10 Acknowledged.
765 .OffsetFromOrigin(); 778 gfx::Point sticky_box_offset(
779 sticky_data->constraints.parent_relative_sticky_box_offset);
780 if (Parent(layer)->id() != scroll_ancestor->owning_layer_id) {
781 sticky_box_offset +=
782 gfx::ToFlooredVector2d(CalculateTotalStickyOffsetToScroller(
783 Parent(layer), scroll_ancestor->owning_layer_id));
784 }
785 sticky_data->main_thread_offset = layer->position().OffsetFromOrigin() -
786 sticky_box_offset.OffsetFromOrigin();
flackr 2017/03/09 20:22:08 It looks like you pass in the main thread offset i
smcgruer 2017/03/10 16:37:10 I don't quite follow this comment; can you clarify
flackr 2017/03/13 19:49:45 I think we chatted offline about this. There is a
smcgruer 2017/03/14 22:04:06 Done.
787 // Copy the ancestor nodes for later use.
flackr 2017/03/09 20:22:08 It's probably worth pointing out in the comment th
smcgruer 2017/03/10 16:37:10 Done.
788 if (Layer* layer =
789 sticky_data->constraints.nearest_layer_shifting_sticky_box) {
790 sticky_data->nearest_node_shifting_sticky_box =
791 layer->transform_tree_index();
792 }
793 if (Layer* layer =
794 sticky_data->constraints.nearest_layer_shifting_containing_block) {
795 sticky_data->nearest_node_shifting_containing_block =
796 layer->transform_tree_index();
797 }
766 } 798 }
767 799
768 node->needs_local_transform_update = true; 800 node->needs_local_transform_update = true;
769 data_from_ancestor.property_trees->transform_tree.UpdateTransforms(node->id); 801 data_from_ancestor.property_trees->transform_tree.UpdateTransforms(node->id);
770 802
771 layer->set_offset_to_transform_parent(gfx::Vector2dF()); 803 layer->set_offset_to_transform_parent(gfx::Vector2dF());
772 804
773 // Flattening (if needed) will be handled by |node|. 805 // Flattening (if needed) will be handled by |node|.
774 layer->set_should_flatten_transform_from_property_tree(false); 806 layer->set_should_flatten_transform_from_property_tree(false);
775 807
(...skipping 771 matching lines...) Expand 10 before | Expand all | Expand 10 after
1547 root_layer, page_scale_layer, inner_viewport_scroll_layer, 1579 root_layer, page_scale_layer, inner_viewport_scroll_layer,
1548 outer_viewport_scroll_layer, overscroll_elasticity_layer, 1580 outer_viewport_scroll_layer, overscroll_elasticity_layer,
1549 elastic_overscroll, page_scale_factor, device_scale_factor, viewport, 1581 elastic_overscroll, page_scale_factor, device_scale_factor, viewport,
1550 device_transform, property_trees, color); 1582 device_transform, property_trees, color);
1551 property_trees->effect_tree.CreateOrReuseRenderSurfaces( 1583 property_trees->effect_tree.CreateOrReuseRenderSurfaces(
1552 &render_surfaces, root_layer->layer_tree_impl()); 1584 &render_surfaces, root_layer->layer_tree_impl());
1553 property_trees->ResetCachedData(); 1585 property_trees->ResetCachedData();
1554 } 1586 }
1555 1587
1556 } // namespace cc 1588 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698