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

Unified Diff: Source/core/rendering/CompositedLayerMapping.cpp

Issue 19954010: Clip accelerated descendants of an accelerated layer having border radius and clip overflow (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Adding back clipPath condition ommited when rebased Created 7 years, 1 month 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/rendering/CompositedLayerMapping.cpp
diff --git a/Source/core/rendering/CompositedLayerMapping.cpp b/Source/core/rendering/CompositedLayerMapping.cpp
index 19230421769bc1910db2d805c2c6347b81582ce2..d29bacca7a3f638a45da51c7c870530ddb405a81 100644
--- a/Source/core/rendering/CompositedLayerMapping.cpp
+++ b/Source/core/rendering/CompositedLayerMapping.cpp
@@ -470,9 +470,16 @@ bool CompositedLayerMapping::updateGraphicsLayerConfiguration()
if (updateMaskLayer(renderer->hasMask()))
m_graphicsLayer->setMaskLayer(m_maskLayer.get());
- bool needsChildClippingMask = (renderer->style()->hasBorderRadius() || renderer->style()->clipPath()) && isAcceleratedContents(renderer);
- if (updateClippingMaskLayers(needsChildClippingMask))
- m_graphicsLayer->setContentsClippingMaskLayer(m_childClippingMaskLayer.get());
+ bool hasChildClippingLayer = compositor->clipsCompositingDescendants(m_owningLayer) && (hasClippingLayer() || hasScrollingLayer());
+ bool needsChildClippingMask = (renderer->style()->clipPath() || renderer->style()->hasBorderRadius()) && (hasChildClippingLayer || isAcceleratedContents(renderer));
+ if (updateClippingMaskLayers(needsChildClippingMask)) {
+ if (hasClippingLayer())
+ clippingLayer()->setMaskLayer(m_childClippingMaskLayer.get());
+ else if (hasScrollingLayer())
+ scrollingLayer()->setMaskLayer(m_childClippingMaskLayer.get());
+ else if (isAcceleratedContents(renderer))
+ m_graphicsLayer->setContentsClippingMaskLayer(m_childClippingMaskLayer.get());
+ }
if (m_owningLayer->reflectionInfo()) {
if (m_owningLayer->reflectionInfo()->reflectionLayer()->hasCompositedLayerMapping()) {
@@ -643,6 +650,11 @@ void CompositedLayerMapping::updateGraphicsLayerGeometry()
clipLayer->setPosition(FloatPoint(clippingBox.location() - localCompositingBounds.location()));
clipLayer->setSize(clippingBox.size());
clipLayer->setOffsetFromRenderer(toIntSize(clippingBox.location()));
+ if (m_childClippingMaskLayer && !m_scrollingLayer) {
+ m_childClippingMaskLayer->setPosition(clipLayer->position());
+ m_childClippingMaskLayer->setSize(clipLayer->size());
+ m_childClippingMaskLayer->setOffsetFromRenderer(clipLayer->offsetFromRenderer());
+ }
}
if (m_maskLayer) {
@@ -749,6 +761,12 @@ void CompositedLayerMapping::updateGraphicsLayerGeometry()
IntSize oldScrollingLayerOffset = m_scrollingLayer->offsetFromRenderer();
m_scrollingLayer->setOffsetFromRenderer(-toIntSize(clientBox.location()));
+ if (m_childClippingMaskLayer) {
+ m_childClippingMaskLayer->setPosition(m_scrollingLayer->position());
+ m_childClippingMaskLayer->setSize(m_scrollingLayer->size());
+ m_childClippingMaskLayer->setOffsetFromRenderer(toIntSize(clientBox.location()));
+ }
+
bool clientBoxOffsetChanged = oldScrollingLayerOffset != m_scrollingLayer->offsetFromRenderer();
IntSize scrollSize(renderBox->scrollWidth(), renderBox->scrollHeight());
@@ -2002,6 +2020,8 @@ String CompositedLayerMapping::debugName(const GraphicsLayer* graphicsLayer)
name = "Child Containment Layer";
} else if (graphicsLayer == m_maskLayer.get()) {
name = "Mask Layer";
+ } else if (graphicsLayer == m_childClippingMaskLayer.get()) {
+ name = "Child Clipping Mask Layer";
} else if (graphicsLayer == m_layerForHorizontalScrollbar.get()) {
name = "Horizontal Scrollbar Layer";
} else if (graphicsLayer == m_layerForVerticalScrollbar.get()) {
« no previous file with comments | « LayoutTests/fast/clip/overflow-border-radius-composited-parent.html ('k') | Source/core/rendering/RenderBlock.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698