Branch: refs/heads/main Home: https://github.com/WebKit/WebKit Commit: 2775f5bf7c3e8aeb9b44090c7a277aedcdb7d0e4 https://github.com/WebKit/WebKit/commit/2775f5bf7c3e8aeb9b44090c7a277aedcdb7d0e4 Author: Etienne Segonzac <s...@apple.com> Date: 2024-05-04 (Sat, 04 May 2024)
Changed paths: M LayoutTests/interaction-region/clip-path-expected.txt M LayoutTests/interaction-region/clip-path.html M LayoutTests/interaction-region/icon-masking-expected.txt M LayoutTests/interaction-region/icon-masking.html M LayoutTests/interaction-region/svg-expected.txt M LayoutTests/interaction-region/svg.html M Source/WebCore/page/InteractionRegion.cpp M Source/WebCore/page/InteractionRegion.h M Source/WebCore/rendering/EventRegion.cpp M Source/WebCore/rendering/EventRegion.h Log Message: ----------- [InteractionRegions] Generated clip paths are sometimes offset from their element https://bugs.webkit.org/show_bug.cgi?id=273428 <rdar://126865156> Reviewed by Simon Fraser. When generating Interaction Regions, the paths we build to match shapes are complete and relative to the element's bounds. But the Interaction Region's bounds respect clipping. Provide the offset between the two to `interactionRegionForRenderedRegion` so we can adjust the paths location if needed. (Effectively moving the path in the mask layer on the UI-side.) Also provide the current transform to skip shape generation for rotations / skew (unsupported) and also to avoid having to go through `absoluteQuads` just to get a bounding size. This applies to SVG elements, icons and CSS clip-paths. For SVG icons (using image tags), always use the image from the SVGImageCache to match what was just painted. * Source/WebCore/page/InteractionRegion.h: * Source/WebCore/page/InteractionRegion.cpp: (WebCore::boundingSize): (WebCore::absoluteBoundingRect): Deleted. Don't use `absoluteQuads` to get the bounding size. (WebCore::findIconImage): Use `imageForRenderer` to make sure icon masking is based on what was just painted (and potentially cached in the SVGImageCache). (WebCore::interactionRegionForRenderedRegion): For icons, generate the raster shape at 0x0 directly instead of doing an extra translation. For SVG elements, use the full viewBoxTransform instead of just the scale. Use the new `clipOffset`. * Source/WebCore/rendering/EventRegion.h: * Source/WebCore/rendering/EventRegion.cpp: (WebCore::EventRegionContext::unite): (WebCore::EventRegionContext::uniteInteractionRegions): Pass an optional transform and the clip offset to `interactionRegionForRenderedRegion`. * LayoutTests/interaction-region/icon-masking.html: Add test cases clipping on the top left corner (bitmap and SVG). Add test cases with nested transforms (with and without compositing layers). Add a test case with rotation (no clip-path). * LayoutTests/interaction-region/icon-masking-expected.txt: New interaction regions, new guards on the SVG logo now matching the "is complex shape" check, and floating point diff. * LayoutTests/interaction-region/svg.html: Add a test case clipping on the top left corner. * LayoutTests/interaction-region/svg-expected.txt: New interaction regions and floating point diff. * LayoutTests/interaction-region/clip-path-expected.txt: Add a test case clipping on the left and right edge. Add test cases with rotation / skew (no clip-path). * LayoutTests/interaction-region/clip-path.html: New interaction regions. Canonical link: https://commits.webkit.org/278371@main To unsubscribe from these emails, change your notification settings at https://github.com/WebKit/WebKit/settings/notifications _______________________________________________ webkit-changes mailing list webkit-changes@lists.webkit.org https://lists.webkit.org/mailman/listinfo/webkit-changes