Bug 219829

Summary: REGRESSION (r259137): Clip-path rendering regression when element contains transformed child
Product: WebKit Reporter: Simon Fraser (smfr) <simon.fraser>
Component: Layout and RenderingAssignee: Simon Fraser (smfr) <simon.fraser>
Status: RESOLVED FIXED    
Severity: Normal CC: bfulgham, changseok, esprehn+autocc, ews-watchlist, fred.wang, glenn, kondapallykalyan, pdr, sabouhallawa, simon.fraser, webkit-bug-importer, zalan
Priority: P2 Keywords: InRadar
Version: Safari Technology Preview   
Hardware: Unspecified   
OS: Unspecified   
Attachments:
Description Flags
Testcase
none
Patch sabouhallawa: review+

Description Simon Fraser (smfr) 2020-12-12 13:43:56 PST
Created attachment 416107 [details]
Testcase

r259137 broke clip-path rendering in some cases.
Comment 1 Simon Fraser (smfr) 2020-12-12 13:44:13 PST
<rdar://problem/66308088>
Comment 2 Simon Fraser (smfr) 2020-12-12 14:43:59 PST
Created attachment 416110 [details]
Patch
Comment 3 Alexey Proskuryakov 2020-12-12 17:00:31 PST
How is this different from bug 215458?
Comment 4 Simon Fraser (smfr) 2020-12-12 17:53:41 PST
*** Bug 215458 has been marked as a duplicate of this bug. ***
Comment 5 Said Abou-Hallawa 2020-12-14 12:03:48 PST
Comment on attachment 416110 [details]
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=416110&action=review

> Source/WebCore/rendering/RenderLayer.cpp:-4514
> -    if (!rootRelativeBounds)
> -        rootRelativeBounds = calculateLayerBounds(paintingInfo.rootLayer, offsetFromRoot, { });
> -

RenderLayer::setupFilters() has similar calculations. And it looks we used to call calculateLayerBounds() only once if both clip-path and filter are applied. Now we are going to call calculateLayerBounds() twice but with different arguments. Do we need to do the same changes in RenderLayer::setupFilters()? Do we need to remove the variable "Optional<LayoutRect> rootRelativeBounds;" from RenderLayer::paintLayerContents() since it won't be shared anymore between the clip-path and the filter.

> LayoutTests/css3/masking/clip-path-overflow-hidden-bounds-expected.html:22
> +			<path d="M0,0 L100,0 L100,100 L0,100 L0,0 z"/>

Weird indentation.

> LayoutTests/css3/masking/clip-path-overflow-hidden-bounds.html:29
> +			<path d="M0,0 L100,0 L100,100 L0,100 L0,0 z"/>

Ditto.
Comment 6 Simon Fraser (smfr) 2020-12-15 10:17:16 PST
https://trac.webkit.org/changeset/270850/webkit