Chromium Code Reviews| Index: third_party/WebKit/Source/core/layout/compositing/CompositedLayerMapping.cpp |
| diff --git a/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMapping.cpp b/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMapping.cpp |
| index 2b11d48670b148fad2330a31a67ba95c030d952d..49642c115df62dfa6cc209f3b10720cf048b84b2 100644 |
| --- a/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMapping.cpp |
| +++ b/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMapping.cpp |
| @@ -172,6 +172,27 @@ static ScrollingCoordinator* scrollingCoordinatorFromLayer(PaintLayer& layer) { |
| return (!page) ? nullptr : page->scrollingCoordinator(); |
| } |
| +static WebLayer* nearestCompositedStickyLayer( |
| + const StickyConstraintsMap& constraintsMap, |
| + LayoutBoxModelObject* obj) { |
| + while (obj && obj->compositingState() == NotComposited) { |
|
flackr
2017/03/09 20:22:09
I think technically you want to find compositingSt
smcgruer
2017/03/10 16:37:10
Done.
|
| + DCHECK(constraintsMap.contains(obj->layer())); |
| + const StickyPositionScrollingConstraints constraints = |
| + constraintsMap.at(obj->layer()); |
| + obj = constraints.nearestStickyBoxShiftingStickyBox() |
|
flackr
2017/03/09 20:22:08
This seems wrong, don't we need to follow the same
smcgruer
2017/03/14 22:04:06
I believe you're correct, done. Adding a test is w
|
| + ? constraints.nearestStickyBoxShiftingStickyBox() |
| + : constraints.nearestStickyBoxShiftingContainingBlock(); |
| + } |
| + |
| + if (!obj) |
| + return nullptr; |
| + |
| + return obj->layer() |
| + ->compositedLayerMapping() |
| + ->mainGraphicsLayer() |
| + ->platformLayer(); |
| +} |
| + |
| CompositedLayerMapping::CompositedLayerMapping(PaintLayer& layer) |
| : m_owningLayer(layer), |
| m_contentOffsetInCompositingLayerDirty(false), |
| @@ -307,9 +328,10 @@ void CompositedLayerMapping::updateStickyConstraints( |
| WebLayerStickyPositionConstraint webConstraint; |
| if (sticky) { |
| + const StickyConstraintsMap& constraintsMap = |
| + ancestorOverflowLayer->getScrollableArea()->stickyConstraintsMap(); |
| const StickyPositionScrollingConstraints& constraints = |
| - ancestorOverflowLayer->getScrollableArea()->stickyConstraintsMap().at( |
| - &m_owningLayer); |
| + constraintsMap.at(&m_owningLayer); |
| // Find the layout offset of the unshifted sticky box within its |
| // compositingContainer. If the enclosing layer is not the scroller, then |
| @@ -352,7 +374,13 @@ void CompositedLayerMapping::updateStickyConstraints( |
| enclosingIntRect(constraints.scrollContainerRelativeStickyBoxRect()); |
| webConstraint.scrollContainerRelativeContainingBlockRect = enclosingIntRect( |
| constraints.scrollContainerRelativeContainingBlockRect()); |
| - // TODO(smcgruer): Copy fields for nested sticky in cc (crbug.com/672710) |
| + webConstraint.nearestLayerShiftingStickyBox = nearestCompositedStickyLayer( |
| + constraintsMap, constraints.nearestStickyBoxShiftingStickyBox()); |
| + webConstraint.nearestLayerShiftingContainingBlock = |
| + nearestCompositedStickyLayer( |
| + constraintsMap, |
| + constraints.nearestStickyBoxShiftingContainingBlock()); |
| + webConstraint.localStickyOffset = constraints.getLocalStickyOffset(); |
|
flackr
2017/03/09 20:22:09
This seems to be passed in, but unused as far as I
smcgruer
2017/03/10 16:37:10
Its used in draw_property_utils::CalculateTotalSti
flackr
2017/03/13 19:49:45
As discussed, we should try to work out the local
smcgruer
2017/03/14 22:04:06
Done.
|
| } |
| m_graphicsLayer->setStickyPositionConstraint(webConstraint); |