| 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 651 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 662 if (is_overscroll_elasticity_layer) { | 662 if (is_overscroll_elasticity_layer) { |
| 663 DCHECK(!is_scrollable); | 663 DCHECK(!is_scrollable); |
| 664 node->scroll_offset = | 664 node->scroll_offset = |
| 665 gfx::ScrollOffset(data_from_ancestor.elastic_overscroll); | 665 gfx::ScrollOffset(data_from_ancestor.elastic_overscroll); |
| 666 } else if (!ScrollParent(layer)) { | 666 } else if (!ScrollParent(layer)) { |
| 667 node->scroll_offset = layer->CurrentScrollOffset(); | 667 node->scroll_offset = layer->CurrentScrollOffset(); |
| 668 } | 668 } |
| 669 | 669 |
| 670 if (is_fixed) { | 670 if (is_fixed) { |
| 671 if (data_from_ancestor.affected_by_inner_viewport_bounds_delta) { | 671 if (data_from_ancestor.affected_by_inner_viewport_bounds_delta) { |
| 672 node->affected_by_inner_viewport_bounds_delta_x = | 672 node->moved_by_inner_viewport_bounds_delta_x = |
| 673 PositionConstraint(layer).is_fixed_to_right_edge(); | 673 PositionConstraint(layer).is_fixed_to_right_edge(); |
| 674 node->affected_by_inner_viewport_bounds_delta_y = | 674 node->moved_by_inner_viewport_bounds_delta_y = |
| 675 PositionConstraint(layer).is_fixed_to_bottom_edge(); | 675 PositionConstraint(layer).is_fixed_to_bottom_edge(); |
| 676 if (node->affected_by_inner_viewport_bounds_delta_x || | 676 if (node->moved_by_inner_viewport_bounds_delta_x || |
| 677 node->affected_by_inner_viewport_bounds_delta_y) { | 677 node->moved_by_inner_viewport_bounds_delta_y) { |
| 678 data_for_children->property_trees->transform_tree | 678 data_for_children->property_trees->transform_tree |
| 679 .AddNodeAffectedByInnerViewportBoundsDelta(node->id); | 679 .AddNodeAffectedByInnerViewportBoundsDelta(node->id); |
| 680 } | 680 } |
| 681 } else if (data_from_ancestor.affected_by_outer_viewport_bounds_delta) { | 681 } else if (data_from_ancestor.affected_by_outer_viewport_bounds_delta) { |
| 682 node->affected_by_outer_viewport_bounds_delta_x = | 682 node->moved_by_outer_viewport_bounds_delta_x = |
| 683 PositionConstraint(layer).is_fixed_to_right_edge(); | 683 PositionConstraint(layer).is_fixed_to_right_edge(); |
| 684 node->affected_by_outer_viewport_bounds_delta_y = | 684 node->moved_by_outer_viewport_bounds_delta_y = |
| 685 PositionConstraint(layer).is_fixed_to_bottom_edge(); | 685 PositionConstraint(layer).is_fixed_to_bottom_edge(); |
| 686 if (node->affected_by_outer_viewport_bounds_delta_x || | 686 if (node->moved_by_outer_viewport_bounds_delta_x || |
| 687 node->affected_by_outer_viewport_bounds_delta_y) { | 687 node->moved_by_outer_viewport_bounds_delta_y) { |
| 688 data_for_children->property_trees->transform_tree | 688 data_for_children->property_trees->transform_tree |
| 689 .AddNodeAffectedByOuterViewportBoundsDelta(node->id); | 689 .AddNodeAffectedByOuterViewportBoundsDelta(node->id); |
| 690 } | 690 } |
| 691 } | 691 } |
| 692 } | 692 } |
| 693 | 693 |
| 694 node->local = Transform(layer); | 694 node->local = Transform(layer); |
| 695 node->update_pre_local_transform(TransformOrigin(layer)); | 695 node->update_pre_local_transform(TransformOrigin(layer)); |
| 696 | 696 |
| 697 if (StickyPositionConstraint(layer).is_sticky) { | 697 if (StickyPositionConstraint(layer).is_sticky) { |
| 698 StickyPositionNodeData* sticky_data = | 698 StickyPositionNodeData* sticky_data = |
| 699 data_for_children->property_trees->transform_tree.StickyPositionData( | 699 data_for_children->property_trees->transform_tree.StickyPositionData( |
| 700 node->id); | 700 node->id); |
| 701 sticky_data->constraints = StickyPositionConstraint(layer); | 701 sticky_data->constraints = StickyPositionConstraint(layer); |
| 702 sticky_data->scroll_ancestor = GetScrollParentId(data_from_ancestor, layer); | 702 sticky_data->scroll_ancestor = GetScrollParentId(data_from_ancestor, layer); |
| 703 ScrollNode* scroll_ancestor = | 703 ScrollNode* scroll_ancestor = |
| 704 data_for_children->property_trees->scroll_tree.Node( | 704 data_for_children->property_trees->scroll_tree.Node( |
| 705 sticky_data->scroll_ancestor); | 705 sticky_data->scroll_ancestor); |
| 706 if (scroll_ancestor->is_inner_viewport_scroll_layer) { | 706 if (sticky_data->constraints.is_anchored_right || |
| 707 data_for_children->property_trees->transform_tree | 707 sticky_data->constraints.is_anchored_bottom) { |
| 708 .AddNodeAffectedByInnerViewportBoundsDelta(node->id); | 708 // Sticky nodes whose ancestor scroller is the inner / outer viewport |
| 709 // need to have their local transform updated when the inner / outer |
| 710 // viewport bounds change, but do not unconditionally move by that delta |
| 711 // like fixed position nodes. |
| 712 if (scroll_ancestor->is_inner_viewport_scroll_layer) { |
| 713 data_for_children->property_trees->transform_tree |
| 714 .AddNodeAffectedByInnerViewportBoundsDelta(node->id); |
| 715 } else if (scroll_ancestor->is_outer_viewport_scroll_layer) { |
| 716 data_for_children->property_trees->transform_tree |
| 717 .AddNodeAffectedByOuterViewportBoundsDelta(node->id); |
| 718 } |
| 709 } | 719 } |
| 710 sticky_data->main_thread_offset = | 720 sticky_data->main_thread_offset = |
| 711 layer->position().OffsetFromOrigin() - | 721 layer->position().OffsetFromOrigin() - |
| 712 sticky_data->constraints.parent_relative_sticky_box_offset | 722 sticky_data->constraints.parent_relative_sticky_box_offset |
| 713 .OffsetFromOrigin(); | 723 .OffsetFromOrigin(); |
| 714 } | 724 } |
| 715 | 725 |
| 716 node->needs_local_transform_update = true; | 726 node->needs_local_transform_update = true; |
| 717 data_from_ancestor.property_trees->transform_tree.UpdateTransforms(node->id); | 727 data_from_ancestor.property_trees->transform_tree.UpdateTransforms(node->id); |
| 718 | 728 |
| (...skipping 762 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1481 color = SkColorSetA(color, 255); | 1491 color = SkColorSetA(color, 255); |
| 1482 BuildPropertyTreesTopLevelInternal( | 1492 BuildPropertyTreesTopLevelInternal( |
| 1483 root_layer, page_scale_layer, inner_viewport_scroll_layer, | 1493 root_layer, page_scale_layer, inner_viewport_scroll_layer, |
| 1484 outer_viewport_scroll_layer, overscroll_elasticity_layer, | 1494 outer_viewport_scroll_layer, overscroll_elasticity_layer, |
| 1485 elastic_overscroll, page_scale_factor, device_scale_factor, viewport, | 1495 elastic_overscroll, page_scale_factor, device_scale_factor, viewport, |
| 1486 device_transform, property_trees, color); | 1496 device_transform, property_trees, color); |
| 1487 property_trees->ResetCachedData(); | 1497 property_trees->ResetCachedData(); |
| 1488 } | 1498 } |
| 1489 | 1499 |
| 1490 } // namespace cc | 1500 } // namespace cc |
| OLD | NEW |