OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights reserved. | 2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights reserved. |
3 * | 3 * |
4 * Portions are Copyright (C) 1998 Netscape Communications Corporation. | 4 * Portions are Copyright (C) 1998 Netscape Communications Corporation. |
5 * | 5 * |
6 * Other contributors: | 6 * Other contributors: |
7 * Robert O'Callahan <roc+@cs.cmu.edu> | 7 * Robert O'Callahan <roc+@cs.cmu.edu> |
8 * David Baron <dbaron@fas.harvard.edu> | 8 * David Baron <dbaron@fas.harvard.edu> |
9 * Christian Biesinger <cbiesinger@web.de> | 9 * Christian Biesinger <cbiesinger@web.de> |
10 * Randall Jesup <rjesup@wgate.com> | 10 * Randall Jesup <rjesup@wgate.com> |
(...skipping 3320 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3331 if (node->layer()->hasCompositedLayerMapping()) | 3331 if (node->layer()->hasCompositedLayerMapping()) |
3332 continue; | 3332 continue; |
3333 // FIXME: Can we call physicalBoundingBoxIncludingReflectionAndStackingC hildren instead of boundingBoxForCompositing? | 3333 // FIXME: Can we call physicalBoundingBoxIncludingReflectionAndStackingC hildren instead of boundingBoxForCompositing? |
3334 result.unite(node->layer()->boundingBoxForCompositing(this)); | 3334 result.unite(node->layer()->boundingBoxForCompositing(this)); |
3335 } | 3335 } |
3336 | 3336 |
3337 result.moveBy(offsetFromRoot); | 3337 result.moveBy(offsetFromRoot); |
3338 return result; | 3338 return result; |
3339 } | 3339 } |
3340 | 3340 |
3341 void expandCompositingRectForStackingChildren(const RenderLayer* ancestorLayer, RenderLayer::CalculateBoundsOptions options, LayoutRect& result) | |
ojan
2014/06/03 23:59:38
Did you mean this to be static?
chrishtr
2014/06/04 00:01:39
Static but not a member function.
| |
3342 { | |
3343 RenderLayerStackingNodeIterator iterator(*ancestorLayer->stackingNode(), All Children); | |
3344 while (RenderLayerStackingNode* node = iterator.next()) { | |
3345 // Here we exclude both directly composited layers and squashing layers | |
3346 // because those RenderLayers don't paint into the graphics layer | |
3347 // for this RenderLayer. For example, the bounds of squashed RenderLayer s | |
3348 // will be included in the computation of the appropriate squashing | |
3349 // GraphicsLayer. | |
3350 if (options != RenderLayer::ApplyBoundsChickenEggHacks && node->layer()- >compositingState() != NotComposited) | |
3351 continue; | |
3352 result.unite(node->layer()->boundingBoxForCompositing(ancestorLayer, opt ions)); | |
3353 } | |
3354 } | |
3355 | |
3341 LayoutRect RenderLayer::boundingBoxForCompositing(const RenderLayer* ancestorLay er, CalculateBoundsOptions options) const | 3356 LayoutRect RenderLayer::boundingBoxForCompositing(const RenderLayer* ancestorLay er, CalculateBoundsOptions options) const |
3342 { | 3357 { |
3343 if (!isSelfPaintingLayer()) | 3358 if (!isSelfPaintingLayer()) |
3344 return LayoutRect(); | 3359 return LayoutRect(); |
3345 | 3360 |
3346 if (!ancestorLayer) | 3361 if (!ancestorLayer) |
3347 ancestorLayer = this; | 3362 ancestorLayer = this; |
3348 | 3363 |
3349 // FIXME: This could be improved to do a check like hasVisibleNonCompositing DescendantLayers() (bug 92580). | 3364 // FIXME: This could be improved to do a check like hasVisibleNonCompositing DescendantLayers() (bug 92580). |
3350 if (this != ancestorLayer && !hasVisibleContent() && !hasVisibleDescendant() ) | 3365 if (this != ancestorLayer && !hasVisibleContent() && !hasVisibleDescendant() ) |
(...skipping 23 matching lines...) Expand all Loading... | |
3374 | 3389 |
3375 if (m_reflectionInfo && !m_reflectionInfo->reflectionLayer()->hasCompositedL ayerMapping()) | 3390 if (m_reflectionInfo && !m_reflectionInfo->reflectionLayer()->hasCompositedL ayerMapping()) |
3376 result.unite(m_reflectionInfo->reflectionLayer()->boundingBoxForComposit ing(this)); | 3391 result.unite(m_reflectionInfo->reflectionLayer()->boundingBoxForComposit ing(this)); |
3377 | 3392 |
3378 ASSERT(m_stackingNode->isStackingContext() || !m_stackingNode->hasPositiveZO rderList()); | 3393 ASSERT(m_stackingNode->isStackingContext() || !m_stackingNode->hasPositiveZO rderList()); |
3379 | 3394 |
3380 #if !ASSERT_DISABLED | 3395 #if !ASSERT_DISABLED |
3381 LayerListMutationDetector mutationChecker(const_cast<RenderLayer*>(this)->st ackingNode()); | 3396 LayerListMutationDetector mutationChecker(const_cast<RenderLayer*>(this)->st ackingNode()); |
3382 #endif | 3397 #endif |
3383 | 3398 |
3384 RenderLayerStackingNodeIterator iterator(*m_stackingNode.get(), AllChildren) ; | 3399 // Reflections are implemented with RenderLayers that hang off of the reflec ted layer. However, |
3385 while (RenderLayerStackingNode* node = iterator.next()) { | 3400 // the reflection layer subtree does not include the subtree of the parent R enderLayer, so |
3386 // Here we exclude both directly composited layers and squashing layers | 3401 // a recursive computation of stacking children yields no results. This brea ks cases when there are stacking |
3387 // because those RenderLayers don't paint into the graphics layer | 3402 // children of the parent, that need to be included in reflected composited bounds. |
3388 // for this RenderLayer. For example, the bounds of squashed RenderLayer s | 3403 // Fix this by including composited bounds of stacking children of the refle cted RenderLayer. |
3389 // will be included in the computation of the appropriate squashing | 3404 if (parent() && parent()->reflectionInfo() && parent()->reflectionInfo()->re flectionLayer() == this) |
3390 // GraphicsLayer. | 3405 expandCompositingRectForStackingChildren(parent(), options, result); |
3391 if (options != ApplyBoundsChickenEggHacks && node->layer()->compositingS tate() != NotComposited) | 3406 else |
3392 continue; | 3407 expandCompositingRectForStackingChildren(this, options, result); |
3393 result.unite(node->layer()->boundingBoxForCompositing(this, options)); | |
3394 } | |
3395 | 3408 |
3396 // FIXME: We can optimize the size of the composited layers, by not enlargin g | 3409 // FIXME: We can optimize the size of the composited layers, by not enlargin g |
3397 // filtered areas with the outsets if we know that the filter is going to re nder in hardware. | 3410 // filtered areas with the outsets if we know that the filter is going to re nder in hardware. |
3398 // https://bugs.webkit.org/show_bug.cgi?id=81239 | 3411 // https://bugs.webkit.org/show_bug.cgi?id=81239 |
3399 m_renderer->style()->filterOutsets().expandRect(result); | 3412 m_renderer->style()->filterOutsets().expandRect(result); |
3400 | 3413 |
3401 if (shouldIncludeTransform) | 3414 if (shouldIncludeTransform) |
3402 result = transform()->mapRect(result); | 3415 result = transform()->mapRect(result); |
3403 | 3416 |
3404 LayoutPoint delta; | 3417 LayoutPoint delta; |
(...skipping 522 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3927 } | 3940 } |
3928 } | 3941 } |
3929 | 3942 |
3930 void showLayerTree(const WebCore::RenderObject* renderer) | 3943 void showLayerTree(const WebCore::RenderObject* renderer) |
3931 { | 3944 { |
3932 if (!renderer) | 3945 if (!renderer) |
3933 return; | 3946 return; |
3934 showLayerTree(renderer->enclosingLayer()); | 3947 showLayerTree(renderer->enclosingLayer()); |
3935 } | 3948 } |
3936 #endif | 3949 #endif |
OLD | NEW |