OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2009, 2010, 2011 Apple Inc. All rights reserved. | 2 * Copyright (C) 2009, 2010, 2011 Apple Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are met: |
7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
166 layoutObject.isVideo(); | 166 layoutObject.isVideo(); |
167 } | 167 } |
168 | 168 |
169 // Get the scrolling coordinator in a way that works inside | 169 // Get the scrolling coordinator in a way that works inside |
170 // CompositedLayerMapping's destructor. | 170 // CompositedLayerMapping's destructor. |
171 static ScrollingCoordinator* scrollingCoordinatorFromLayer(PaintLayer& layer) { | 171 static ScrollingCoordinator* scrollingCoordinatorFromLayer(PaintLayer& layer) { |
172 Page* page = layer.layoutObject().frame()->page(); | 172 Page* page = layer.layoutObject().frame()->page(); |
173 return (!page) ? nullptr : page->scrollingCoordinator(); | 173 return (!page) ? nullptr : page->scrollingCoordinator(); |
174 } | 174 } |
175 | 175 |
| 176 static WebLayer* nearestCompositedStickyLayer( |
| 177 const StickyConstraintsMap& constraintsMap, |
| 178 LayoutBoxModelObject* obj) { |
| 179 while (obj && !obj->layer()->compositedLayerMapping()) { |
| 180 DCHECK(constraintsMap.contains(obj->layer())); |
| 181 const StickyPositionScrollingConstraints constraints = |
| 182 constraintsMap.at(obj->layer()); |
| 183 obj = constraints.nearestStickyBoxShiftingStickyBox() |
| 184 ? constraints.nearestStickyBoxShiftingStickyBox() |
| 185 : constraints.nearestStickyBoxShiftingContainingBlock(); |
| 186 } |
| 187 |
| 188 if (!obj) |
| 189 return nullptr; |
| 190 |
| 191 return obj->layer() |
| 192 ->compositedLayerMapping() |
| 193 ->mainGraphicsLayer() |
| 194 ->platformLayer(); |
| 195 } |
| 196 |
176 CompositedLayerMapping::CompositedLayerMapping(PaintLayer& layer) | 197 CompositedLayerMapping::CompositedLayerMapping(PaintLayer& layer) |
177 : m_owningLayer(layer), | 198 : m_owningLayer(layer), |
178 m_contentOffsetInCompositingLayerDirty(false), | 199 m_contentOffsetInCompositingLayerDirty(false), |
179 m_pendingUpdateScope(GraphicsLayerUpdateNone), | 200 m_pendingUpdateScope(GraphicsLayerUpdateNone), |
180 m_isMainFrameLayoutViewLayer(false), | 201 m_isMainFrameLayoutViewLayer(false), |
181 m_backgroundLayerPaintsFixedRootBackground(false), | 202 m_backgroundLayerPaintsFixedRootBackground(false), |
182 m_scrollingContentsAreEmpty(false), | 203 m_scrollingContentsAreEmpty(false), |
183 m_backgroundPaintsOntoScrollingContentsLayer(false), | 204 m_backgroundPaintsOntoScrollingContentsLayer(false), |
184 m_backgroundPaintsOntoGraphicsLayer(false), | 205 m_backgroundPaintsOntoGraphicsLayer(false), |
185 m_drawsBackgroundOntoContentLayer(false) { | 206 m_drawsBackgroundOntoContentLayer(false) { |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
301 if (sticky) { | 322 if (sticky) { |
302 if (!ancestorOverflowLayer->isRootLayer()) { | 323 if (!ancestorOverflowLayer->isRootLayer()) { |
303 sticky = ancestorOverflowLayer->needsCompositedScrolling(); | 324 sticky = ancestorOverflowLayer->needsCompositedScrolling(); |
304 } else { | 325 } else { |
305 sticky = layoutObject().view()->frameView()->isScrollable(); | 326 sticky = layoutObject().view()->frameView()->isScrollable(); |
306 } | 327 } |
307 } | 328 } |
308 | 329 |
309 WebLayerStickyPositionConstraint webConstraint; | 330 WebLayerStickyPositionConstraint webConstraint; |
310 if (sticky) { | 331 if (sticky) { |
| 332 const StickyConstraintsMap& constraintsMap = |
| 333 ancestorOverflowLayer->getScrollableArea()->stickyConstraintsMap(); |
311 const StickyPositionScrollingConstraints& constraints = | 334 const StickyPositionScrollingConstraints& constraints = |
312 ancestorOverflowLayer->getScrollableArea()->stickyConstraintsMap().at( | 335 constraintsMap.at(&m_owningLayer); |
313 &m_owningLayer); | |
314 | 336 |
315 // Find the layout offset of the unshifted sticky box within its | 337 // Find the layout offset of the unshifted sticky box within its |
316 // compositingContainer. If the enclosing layer is not the scroller, then | 338 // compositingContainer. If the enclosing layer is not the scroller, then |
317 // the offset must be adjusted to include the scroll offset to keep it | 339 // the offset must be adjusted to include the scroll offset to keep it |
318 // relative to compositingContainer. | 340 // relative to compositingContainer. |
319 LayoutPoint enclosingLayerOffset; | 341 LayoutPoint enclosingLayerOffset; |
320 compositingContainer->convertToLayerCoords(ancestorOverflowLayer, | 342 compositingContainer->convertToLayerCoords(ancestorOverflowLayer, |
321 enclosingLayerOffset); | 343 enclosingLayerOffset); |
322 if (compositingContainer != ancestorOverflowLayer) { | 344 if (compositingContainer != ancestorOverflowLayer) { |
323 enclosingLayerOffset += LayoutSize( | 345 enclosingLayerOffset += LayoutSize( |
(...skipping 22 matching lines...) Expand all Loading... |
346 webConstraint.leftOffset = constraints.leftOffset(); | 368 webConstraint.leftOffset = constraints.leftOffset(); |
347 webConstraint.rightOffset = constraints.rightOffset(); | 369 webConstraint.rightOffset = constraints.rightOffset(); |
348 webConstraint.topOffset = constraints.topOffset(); | 370 webConstraint.topOffset = constraints.topOffset(); |
349 webConstraint.bottomOffset = constraints.bottomOffset(); | 371 webConstraint.bottomOffset = constraints.bottomOffset(); |
350 webConstraint.parentRelativeStickyBoxOffset = | 372 webConstraint.parentRelativeStickyBoxOffset = |
351 roundedIntPoint(stickyBoxOffset); | 373 roundedIntPoint(stickyBoxOffset); |
352 webConstraint.scrollContainerRelativeStickyBoxRect = | 374 webConstraint.scrollContainerRelativeStickyBoxRect = |
353 enclosingIntRect(constraints.scrollContainerRelativeStickyBoxRect()); | 375 enclosingIntRect(constraints.scrollContainerRelativeStickyBoxRect()); |
354 webConstraint.scrollContainerRelativeContainingBlockRect = enclosingIntRect( | 376 webConstraint.scrollContainerRelativeContainingBlockRect = enclosingIntRect( |
355 constraints.scrollContainerRelativeContainingBlockRect()); | 377 constraints.scrollContainerRelativeContainingBlockRect()); |
356 // TODO(smcgruer): Copy fields for nested sticky in cc (crbug.com/672710) | 378 webConstraint.nearestLayerShiftingStickyBox = nearestCompositedStickyLayer( |
| 379 constraintsMap, constraints.nearestStickyBoxShiftingStickyBox()); |
| 380 webConstraint.nearestLayerShiftingContainingBlock = |
| 381 nearestCompositedStickyLayer( |
| 382 constraintsMap, |
| 383 constraints.nearestStickyBoxShiftingContainingBlock()); |
| 384 webConstraint.localStickyOffset = constraints.getLocalStickyOffset(); |
357 } | 385 } |
358 | 386 |
359 m_graphicsLayer->setStickyPositionConstraint(webConstraint); | 387 m_graphicsLayer->setStickyPositionConstraint(webConstraint); |
360 } | 388 } |
361 | 389 |
362 void CompositedLayerMapping::updateLayerBlendMode(const ComputedStyle& style) { | 390 void CompositedLayerMapping::updateLayerBlendMode(const ComputedStyle& style) { |
363 setBlendMode(style.blendMode()); | 391 setBlendMode(style.blendMode()); |
364 } | 392 } |
365 | 393 |
366 void CompositedLayerMapping::updateIsRootForIsolatedGroup() { | 394 void CompositedLayerMapping::updateIsRootForIsolatedGroup() { |
(...skipping 3145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3512 } else if (graphicsLayer == m_decorationOutlineLayer.get()) { | 3540 } else if (graphicsLayer == m_decorationOutlineLayer.get()) { |
3513 name = "Decoration Layer"; | 3541 name = "Decoration Layer"; |
3514 } else { | 3542 } else { |
3515 ASSERT_NOT_REACHED(); | 3543 ASSERT_NOT_REACHED(); |
3516 } | 3544 } |
3517 | 3545 |
3518 return name; | 3546 return name; |
3519 } | 3547 } |
3520 | 3548 |
3521 } // namespace blink | 3549 } // namespace blink |
OLD | NEW |