Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1186)

Unified Diff: Source/core/paint/DeprecatedPaintLayer.cpp

Issue 1313953006: Never include ancestorLayer transform when testing for overlap. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/core/paint/DeprecatedPaintLayer.cpp
diff --git a/Source/core/paint/DeprecatedPaintLayer.cpp b/Source/core/paint/DeprecatedPaintLayer.cpp
index 89259e5756a3a9737f6a8c3c9554e9f21fbe8b2e..c125e45b7c3ed8eb47fdf3badaf6aa8483811b1c 100644
--- a/Source/core/paint/DeprecatedPaintLayer.cpp
+++ b/Source/core/paint/DeprecatedPaintLayer.cpp
@@ -2123,10 +2123,12 @@ LayoutRect DeprecatedPaintLayer::fragmentsBoundingBox(const DeprecatedPaintLayer
LayoutRect DeprecatedPaintLayer::boundingBoxForCompositingOverlapTest() const
{
- return overlapBoundsIncludeChildren() ? boundingBoxForCompositing() : fragmentsBoundingBox(this);
+ // Apply NeverIncludeTransformForAncestorLayer, because the geometry map in CompositingInputsUpdater will take care of applying the
+ // transform of |this| (i.e. the ancestorLayer argument to boundingBoxForCompositing).
+ return overlapBoundsIncludeChildren() ? boundingBoxForCompositing(this, NeverIncludeTransformForAncestorLayer) : fragmentsBoundingBox(this);
}
-static void expandRectForReflectionAndStackingChildren(const DeprecatedPaintLayer* ancestorLayer, DeprecatedPaintLayer::CalculateBoundsOptions options, LayoutRect& result)
+static void expandRectForReflectionAndStackingChildren(const DeprecatedPaintLayer* ancestorLayer, LayoutRect& result)
{
if (ancestorLayer->reflectionInfo() && !ancestorLayer->reflectionInfo()->reflectionLayer()->hasCompositedDeprecatedPaintLayerMapping())
result.unite(ancestorLayer->reflectionInfo()->reflectionLayer()->boundingBoxForCompositing(ancestorLayer));
@@ -2140,13 +2142,13 @@ static void expandRectForReflectionAndStackingChildren(const DeprecatedPaintLaye
DeprecatedPaintLayerStackingNodeIterator iterator(*ancestorLayer->stackingNode(), AllChildren);
while (DeprecatedPaintLayerStackingNode* node = iterator.next()) {
// Here we exclude both directly composited layers and squashing layers
- // because those Layers don't paint into the graphics layer
+ // because those Layers don't paint into the graphics layer4
// for this Layer. For example, the bounds of squashed Layers
// will be included in the computation of the appropriate squashing
// GraphicsLayer.
- if (options != DeprecatedPaintLayer::ApplyBoundsChickenEggHacks && node->layer()->compositingState() != NotComposited)
+ if (node->layer()->compositingState() != NotComposited)
continue;
- result.unite(node->layer()->boundingBoxForCompositing(ancestorLayer, options));
+ result.unite(node->layer()->boundingBoxForCompositing(ancestorLayer));
}
}
@@ -2157,7 +2159,7 @@ LayoutRect DeprecatedPaintLayer::physicalBoundingBoxIncludingReflectionAndStacki
const_cast<DeprecatedPaintLayer*>(this)->stackingNode()->updateLayerListsIfNeeded();
- expandRectForReflectionAndStackingChildren(this, DoNotApplyBoundsChickenEggHacks, result);
+ expandRectForReflectionAndStackingChildren(this, result);
result.moveBy(offsetFromRoot);
return result;
@@ -2199,9 +2201,9 @@ LayoutRect DeprecatedPaintLayer::boundingBoxForCompositing(const DeprecatedPaint
// children of the parent, that need to be included in reflected composited bounds.
// Fix this by including composited bounds of stacking children of the reflected Layer.
if (hasCompositedDeprecatedPaintLayerMapping() && parent() && parent()->reflectionInfo() && parent()->reflectionInfo()->reflectionLayer() == this)
- expandRectForReflectionAndStackingChildren(parent(), options, result);
+ expandRectForReflectionAndStackingChildren(parent(), result);
else
- expandRectForReflectionAndStackingChildren(this, options, result);
+ expandRectForReflectionAndStackingChildren(this, result);
// FIXME: We can optimize the size of the composited layers, by not enlarging
// filtered areas with the outsets if we know that the filter is going to render in hardware.
@@ -2209,7 +2211,7 @@ LayoutRect DeprecatedPaintLayer::boundingBoxForCompositing(const DeprecatedPaint
result.expand(m_layoutObject->style()->filterOutsets());
}
- if (transform() && (paintsWithTransform(GlobalPaintNormalPhase) || options == ApplyBoundsChickenEggHacks))
+ if (transform() && paintsWithTransform(GlobalPaintNormalPhase) && (this != ancestorLayer || options == MaybeIncludeTransformForAncestorLayer))
result = transform()->mapRect(result);
if (enclosingPaginationLayer()) {

Powered by Google App Engine
This is Rietveld 408576698