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

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

Issue 2636253002: Handle nested position:sticky elements (Closed)
Patch Set: Rebase Created 3 years, 10 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();
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->is_inner_viewport_scroll_layer) { 767 if (scroll_ancestor->is_inner_viewport_scroll_layer) {
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->is_outer_viewport_scroll_layer) { 770 } else if (scroll_ancestor->is_outer_viewport_scroll_layer) {
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
763 layer->position().OffsetFromOrigin() - 776 // The sticky box offset calculated in CompositedLayerMapping must be
764 sticky_data->constraints.parent_relative_sticky_box_offset 777 // adjusted for the enclosing layer's scroll position and sticky offset.
765 .OffsetFromOrigin(); 778 // TODO(smcgruer): Maybe rename parent_relative_sticky_box_offset ?
779 gfx::Point sticky_box_offset(
780 sticky_data->constraints.parent_relative_sticky_box_offset);
781 if (Parent(layer)->id() != scroll_ancestor->owning_layer_id) {
782 sticky_box_offset -= gfx::ScrollOffsetToFlooredVector2d(
783 data_for_children->property_trees->scroll_tree.current_scroll_offset(
784 scroll_ancestor->owning_layer_id));
785 sticky_box_offset +=
786 gfx::ToFlooredVector2d(CalculateTotalStickyOffsetToScroller(
787 Parent(layer), scroll_ancestor->owning_layer_id));
788 }
789 sticky_data->main_thread_offset = layer->position().OffsetFromOrigin() -
790 sticky_box_offset.OffsetFromOrigin();
791 if (Layer* layer =
792 sticky_data->constraints.nearest_layer_shifting_sticky_box) {
793 sticky_data->nearest_node_shifting_sticky_box =
794 layer->transform_tree_index();
795 }
796 if (Layer* layer =
797 sticky_data->constraints.nearest_layer_shifting_containing_block) {
798 sticky_data->nearest_node_shifting_containing_block =
799 layer->transform_tree_index();
800 }
766 } 801 }
767 802
768 node->needs_local_transform_update = true; 803 node->needs_local_transform_update = true;
769 data_from_ancestor.property_trees->transform_tree.UpdateTransforms(node->id); 804 data_from_ancestor.property_trees->transform_tree.UpdateTransforms(node->id);
770 805
771 layer->set_offset_to_transform_parent(gfx::Vector2dF()); 806 layer->set_offset_to_transform_parent(gfx::Vector2dF());
772 807
773 // Flattening (if needed) will be handled by |node|. 808 // Flattening (if needed) will be handled by |node|.
774 layer->set_should_flatten_transform_from_property_tree(false); 809 layer->set_should_flatten_transform_from_property_tree(false);
775 810
(...skipping 767 matching lines...) Expand 10 before | Expand all | Expand 10 after
1543 color = SkColorSetA(color, 255); 1578 color = SkColorSetA(color, 255);
1544 BuildPropertyTreesTopLevelInternal( 1579 BuildPropertyTreesTopLevelInternal(
1545 root_layer, page_scale_layer, inner_viewport_scroll_layer, 1580 root_layer, page_scale_layer, inner_viewport_scroll_layer,
1546 outer_viewport_scroll_layer, overscroll_elasticity_layer, 1581 outer_viewport_scroll_layer, overscroll_elasticity_layer,
1547 elastic_overscroll, page_scale_factor, device_scale_factor, viewport, 1582 elastic_overscroll, page_scale_factor, device_scale_factor, viewport,
1548 device_transform, property_trees, color); 1583 device_transform, property_trees, color);
1549 property_trees->ResetCachedData(); 1584 property_trees->ResetCachedData();
1550 } 1585 }
1551 1586
1552 } // namespace cc 1587 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/property_tree.cc ('k') | third_party/WebKit/LayoutTests/compositing/overflow/composited-nested-sticky-deep.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698