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 472 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
483 const DataForRecursion<LayerType>& data_from_ancestor, | 483 const DataForRecursion<LayerType>& data_from_ancestor, |
484 LayerType* layer, | 484 LayerType* layer, |
485 bool created_render_surface, | 485 bool created_render_surface, |
486 DataForRecursion<LayerType>* data_for_children) { | 486 DataForRecursion<LayerType>* data_for_children) { |
487 const bool is_root = !Parent(layer); | 487 const bool is_root = !Parent(layer); |
488 const bool is_page_scale_layer = layer == data_from_ancestor.page_scale_layer; | 488 const bool is_page_scale_layer = layer == data_from_ancestor.page_scale_layer; |
489 const bool is_overscroll_elasticity_layer = | 489 const bool is_overscroll_elasticity_layer = |
490 layer == data_from_ancestor.overscroll_elasticity_layer; | 490 layer == data_from_ancestor.overscroll_elasticity_layer; |
491 const bool is_scrollable = layer->scrollable(); | 491 const bool is_scrollable = layer->scrollable(); |
492 const bool is_fixed = PositionConstraint(layer).is_fixed_position(); | 492 const bool is_fixed = PositionConstraint(layer).is_fixed_position(); |
| 493 const bool is_sticky = layer->sticky_position_constraint().is_sticky; |
493 | 494 |
494 const bool has_significant_transform = | 495 const bool has_significant_transform = |
495 !Transform(layer).IsIdentityOr2DTranslation(); | 496 !Transform(layer).IsIdentityOr2DTranslation(); |
496 | 497 |
497 const bool has_potentially_animated_transform = | 498 const bool has_potentially_animated_transform = |
498 HasPotentiallyRunningTransformAnimation(layer); | 499 HasPotentiallyRunningTransformAnimation(layer); |
499 | 500 |
500 // A transform node is needed even for a finished animation, since differences | 501 // A transform node is needed even for a finished animation, since differences |
501 // in the timing of animation state updates can mean that an animation that's | 502 // in the timing of animation state updates can mean that an animation that's |
502 // in the Finished state at tree-building time on the main thread is still in | 503 // in the Finished state at tree-building time on the main thread is still in |
(...skipping 14 matching lines...) Expand all Loading... |
517 Parent(layer)->effect_tree_index() != | 518 Parent(layer)->effect_tree_index() != |
518 ScrollParent(layer)->effect_tree_index(); | 519 ScrollParent(layer)->effect_tree_index(); |
519 | 520 |
520 const bool is_at_boundary_of_3d_rendering_context = | 521 const bool is_at_boundary_of_3d_rendering_context = |
521 IsAtBoundaryOf3dRenderingContext(layer); | 522 IsAtBoundaryOf3dRenderingContext(layer); |
522 | 523 |
523 bool requires_node = is_root || is_scrollable || has_significant_transform || | 524 bool requires_node = is_root || is_scrollable || has_significant_transform || |
524 has_any_transform_animation || has_surface || is_fixed || | 525 has_any_transform_animation || has_surface || is_fixed || |
525 is_page_scale_layer || is_overscroll_elasticity_layer || | 526 is_page_scale_layer || is_overscroll_elasticity_layer || |
526 has_proxied_transform_related_property || | 527 has_proxied_transform_related_property || |
527 scroll_child_has_different_target || | 528 scroll_child_has_different_target || is_sticky || |
528 is_at_boundary_of_3d_rendering_context; | 529 is_at_boundary_of_3d_rendering_context; |
529 | 530 |
530 LayerType* transform_parent = GetTransformParent(data_from_ancestor, layer); | 531 LayerType* transform_parent = GetTransformParent(data_from_ancestor, layer); |
531 DCHECK(is_root || transform_parent); | 532 DCHECK(is_root || transform_parent); |
532 | 533 |
533 int parent_index = kRootPropertyTreeNodeId; | 534 int parent_index = kRootPropertyTreeNodeId; |
534 if (transform_parent) | 535 if (transform_parent) |
535 parent_index = transform_parent->transform_tree_index(); | 536 parent_index = transform_parent->transform_tree_index(); |
536 | 537 |
537 int source_index = parent_index; | 538 int source_index = parent_index; |
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
684 node->affected_by_outer_viewport_bounds_delta_y) { | 685 node->affected_by_outer_viewport_bounds_delta_y) { |
685 data_for_children->property_trees->transform_tree | 686 data_for_children->property_trees->transform_tree |
686 .AddNodeAffectedByOuterViewportBoundsDelta(node->id); | 687 .AddNodeAffectedByOuterViewportBoundsDelta(node->id); |
687 } | 688 } |
688 } | 689 } |
689 } | 690 } |
690 | 691 |
691 node->local = Transform(layer); | 692 node->local = Transform(layer); |
692 node->update_pre_local_transform(TransformOrigin(layer)); | 693 node->update_pre_local_transform(TransformOrigin(layer)); |
693 | 694 |
| 695 if (layer->sticky_position_constraint().is_sticky) { |
| 696 StickyPositionNodeData* sticky_data = |
| 697 data_for_children->property_trees->transform_tree.StickyPositionData( |
| 698 node->id); |
| 699 sticky_data->constraints = layer->sticky_position_constraint(); |
| 700 sticky_data->scroll_ancestor = GetScrollParentId(data_from_ancestor, layer); |
| 701 sticky_data->main_thread_offset = |
| 702 layer->position().OffsetFromOrigin() - |
| 703 sticky_data->constraints.absolute_sticky_box_rect.OffsetFromOrigin(); |
| 704 } else { |
| 705 data_for_children->property_trees->transform_tree.SetNotSticky(node->id); |
| 706 } |
| 707 |
694 node->needs_local_transform_update = true; | 708 node->needs_local_transform_update = true; |
695 data_from_ancestor.property_trees->transform_tree.UpdateTransforms(node->id); | 709 data_from_ancestor.property_trees->transform_tree.UpdateTransforms(node->id); |
696 | 710 |
697 layer->set_offset_to_transform_parent(gfx::Vector2dF()); | 711 layer->set_offset_to_transform_parent(gfx::Vector2dF()); |
698 | 712 |
699 // Flattening (if needed) will be handled by |node|. | 713 // Flattening (if needed) will be handled by |node|. |
700 layer->set_should_flatten_transform_from_property_tree(false); | 714 layer->set_should_flatten_transform_from_property_tree(false); |
701 | 715 |
702 node->owner_id = layer->id(); | 716 node->owner_id = layer->id(); |
703 | 717 |
(...skipping 774 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1478 color = SkColorSetA(color, 255); | 1492 color = SkColorSetA(color, 255); |
1479 BuildPropertyTreesTopLevelInternal( | 1493 BuildPropertyTreesTopLevelInternal( |
1480 root_layer, page_scale_layer, inner_viewport_scroll_layer, | 1494 root_layer, page_scale_layer, inner_viewport_scroll_layer, |
1481 outer_viewport_scroll_layer, overscroll_elasticity_layer, | 1495 outer_viewport_scroll_layer, overscroll_elasticity_layer, |
1482 elastic_overscroll, page_scale_factor, device_scale_factor, viewport, | 1496 elastic_overscroll, page_scale_factor, device_scale_factor, viewport, |
1483 device_transform, property_trees, color); | 1497 device_transform, property_trees, color); |
1484 property_trees->ResetCachedData(); | 1498 property_trees->ResetCachedData(); |
1485 } | 1499 } |
1486 | 1500 |
1487 } // namespace cc | 1501 } // namespace cc |
OLD | NEW |