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 495 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
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 Loading... | |
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 Loading... | |
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 |
OLD | NEW |