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/draw_property_utils.h" | 5 #include "cc/trees/draw_property_utils.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 1482 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1493 elastic_overscroll); | 1493 elastic_overscroll); |
1494 } | 1494 } |
1495 | 1495 |
1496 void UpdateElasticOverscroll(PropertyTrees* property_trees, | 1496 void UpdateElasticOverscroll(PropertyTrees* property_trees, |
1497 const Layer* overscroll_elasticity_layer, | 1497 const Layer* overscroll_elasticity_layer, |
1498 const gfx::Vector2dF& elastic_overscroll) { | 1498 const gfx::Vector2dF& elastic_overscroll) { |
1499 UpdateElasticOverscrollInternal(property_trees, overscroll_elasticity_layer, | 1499 UpdateElasticOverscrollInternal(property_trees, overscroll_elasticity_layer, |
1500 elastic_overscroll); | 1500 elastic_overscroll); |
1501 } | 1501 } |
1502 | 1502 |
1503 gfx::Vector2dF CalculateTotalStickyOffsetToScroller( | |
1504 Layer* layer, | |
1505 int scroll_ancestor_layer_id) { | |
1506 // Find nearest ancestor which is sticky, up to the scroller. | |
flackr
2017/03/09 20:22:08
Isn't this ancestor part of the constraints passed
smcgruer
2017/03/10 16:37:10
|layer| might not be sticky.
smcgruer
2017/03/10 16:38:38
Oh I think I just realized what you meant. We only
smcgruer
2017/03/14 22:04:06
Done.
| |
1507 while (layer && !layer->sticky_position_constraint().is_sticky) { | |
1508 layer = layer->parent(); | |
flackr
2017/03/09 20:22:08
Can you verify whether this chain is correct in th
smcgruer
2017/03/14 22:04:05
No longer relevant, we don't do this walk.
| |
1509 if (!layer || layer->id() == scroll_ancestor_layer_id) | |
1510 return gfx::Vector2dF(); | |
1511 } | |
1512 | |
1513 // Walk all sticky layers from the current layer to the ancestor scroller | |
1514 // layer. We achieve this by walking the |nearest_layer_shifting_sticky_box| | |
1515 // when available (which is the nearest sticky element between us and our | |
1516 // containing block), and |nearest_layer_shifting_containing_block| otherwise | |
1517 // (which is the nearest sticky element between our containing block and the | |
1518 // ancestor scroller). | |
1519 // | |
1520 // Once both of these are null, we have no more sticky ancestors to our scroll | |
1521 // ancestor layer. | |
1522 LayerStickyPositionConstraint constraints = | |
1523 layer->sticky_position_constraint(); | |
1524 gfx::Vector2dF sticky_to_remove(constraints.local_sticky_offset); | |
1525 Layer* nextSticky = constraints.nearest_layer_shifting_sticky_box | |
1526 ? constraints.nearest_layer_shifting_sticky_box | |
1527 : constraints.nearest_layer_shifting_containing_block; | |
1528 while (nextSticky) { | |
flackr
2017/03/09 20:22:08
Can we cache the accumulated offset like we do on
smcgruer
2017/03/14 22:04:06
No longer relevant, this code is gone.
| |
1529 constraints = nextSticky->sticky_position_constraint(); | |
1530 sticky_to_remove += constraints.local_sticky_offset; | |
1531 nextSticky = constraints.nearest_layer_shifting_sticky_box | |
1532 ? constraints.nearest_layer_shifting_sticky_box | |
1533 : constraints.nearest_layer_shifting_containing_block; | |
1534 } | |
1535 return sticky_to_remove; | |
1536 } | |
1537 | |
1503 } // namespace draw_property_utils | 1538 } // namespace draw_property_utils |
1504 | 1539 |
1505 } // namespace cc | 1540 } // namespace cc |
OLD | NEW |