RESOLVED FIXED 140536
Border-radius clipping on a stacking context causes descendants to not render
https://bugs.webkit.org/show_bug.cgi?id=140536
Summary Border-radius clipping on a stacking context causes descendants to not render
Simon Fraser (smfr)
Reported 2015-01-15 20:24:17 PST
Created attachment 244747 [details] Testcase Attached testcase shows a bug with border-radius clipping on a stacking context, with composited descendants.
Attachments
Testcase (622 bytes, text/html)
2015-01-15 20:24 PST, Simon Fraser (smfr)
no flags
Patch (27.32 KB, patch)
2015-01-17 11:14 PST, Simon Fraser (smfr)
no flags
test-result (31.89 KB, image/png)
2015-01-21 14:30 PST, Byungseon(Sun) Shin
no flags
test-result-expected (27.61 KB, image/png)
2015-01-21 14:30 PST, Byungseon(Sun) Shin
no flags
clip and border radius test (715 bytes, text/html)
2015-01-21 14:34 PST, Byungseon(Sun) Shin
no flags
Patch (27.32 KB, patch)
2015-01-26 20:27 PST, Simon Fraser (smfr)
no flags
Simon Fraser (smfr)
Comment 1 2015-01-15 22:03:58 PST
I have a fix for this.
Simon Fraser (smfr)
Comment 2 2015-01-17 11:14:40 PST
Byungseon(Sun) Shin
Comment 3 2015-01-19 10:41:04 PST
I have verified that this change resolve the issue clearly on Mac Platform. Thanks Simon.
Byungseon(Sun) Shin
Comment 4 2015-01-19 10:48:50 PST
I have found an issue on "Testcase that asserts on non-Mac" of https://bugs.webkit.org/show_bug.cgi?id=138551. It does not work on second test.
Byungseon(Sun) Shin
Comment 5 2015-01-21 08:17:01 PST
When container has border radius and clippingLayer with an offset value, it may need to apply border radius to container not to clippingLayer and then update offset value. I have created a patch for it. One issue is when I change the offset value of clip Layer using inspector, it does not work well. // The clipping strategy depends on whether the rounded rect has equal corner radii. void GraphicsLayerCA::updateClippingStrategy(PlatformCALayer& clippingLayer, RefPtr<PlatformCALayer>& shapeMaskLayer, const FloatRoundedRect& roundedRect ) { @@ -2085,7 +2072,15 @@ void GraphicsLayerCA::updateClippingStrategy(PlatformCALayer& clippingLayer, Ref clippingLayer.setCornerRadius(0); clippingLayer.setMask(shapeMaskLayer.get()); - FloatRoundedRect offsetRoundedRect(clippingLayer.bounds(), roundedRect.radii());+ + FloatRoundedRect offsetRoundedRect(roundedRect); + + FloatRect clipRect = clippingLayer.bounds(); + FloatPoint3D clipPos = clippingLayer.position(); + FloatSize clipOffset = FloatSize(-(clipPos.x() - clipRect.width()/2), -(clipPos.y() - clipRect.height()/2)); + + offsetRoundedRect.move(clipOffset); + shapeMaskLayer->setShapeRoundedRect(offsetRoundedRect); }
Byungseon(Sun) Shin
Comment 6 2015-01-21 14:30:10 PST
Created attachment 245090 [details] test-result
Byungseon(Sun) Shin
Comment 7 2015-01-21 14:30:53 PST
Created attachment 245091 [details] test-result-expected
Byungseon(Sun) Shin
Comment 8 2015-01-21 14:34:31 PST
Created attachment 245093 [details] clip and border radius test
Simon Fraser (smfr)
Comment 9 2015-01-26 20:27:45 PST
WebKit Commit Bot
Comment 10 2015-01-29 14:57:53 PST
Comment on attachment 245405 [details] Patch Clearing flags on attachment: 245405 Committed r179369: <http://trac.webkit.org/changeset/179369>
WebKit Commit Bot
Comment 11 2015-01-29 14:57:57 PST
All reviewed patches have been landed. Closing bug.
Note You need to log in before you can comment on or make changes to this bug.