[webkit-changes] [WebKit/WebKit] b56add: Overflow:hidden fails on a transformed element ins...
Simon Fraser
noreply at github.com
Tue Oct 8 23:24:34 PDT 2024
Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: b56addc7fbfd92f4d7f2ac43380703d589829fdb
https://github.com/WebKit/WebKit/commit/b56addc7fbfd92f4d7f2ac43380703d589829fdb
Author: Simon Fraser <simon.fraser at apple.com>
Date: 2024-10-08 (Tue, 08 Oct 2024)
Changed paths:
A LayoutTests/compositing/scrolling/transformed-clipping-inside-scroller-expected.html
A LayoutTests/compositing/scrolling/transformed-clipping-inside-scroller.html
M LayoutTests/compositing/transforms/3d-transformed-fixed.html
M Source/WebCore/rendering/RenderLayer.cpp
M Source/WebCore/rendering/RenderLayer.h
Log Message:
-----------
Overflow:hidden fails on a transformed element inside overflow scroll (affects motionpictures.org, www.bogleheads.org)
https://bugs.webkit.org/show_bug.cgi?id=281073
rdar://66751438
Reviewed by Alan Baradlay.
When `paintLayerByApplyingTransform()` paints a layer with a transform, that layer becomes a painting
root, which means that clip rects are computed relative to it. However, `RenderLayer::calculateRects()`
has logic that is conditional on a layer being the painting root and `clipRectsContext.respectOverflowClip()`
being unset, resulting in the clip being ignored. `clipRectsContext.respectOverflowClip()` is false for all descendants
of content being painted into an overflow scroller (see `clipRectOptionsForPaintingOverflowContents`).
So a transformed and clipped element inside an overflow scroller would fail to apply the clipping.
Fix this in `paintLayerByApplyingTransform`, since that's the only place we reset the painting root,
by clearing the `PaintLayerFlag::PaintingOverflowContents` painting flag.
Also rename `clipRectOptionsForPaintingOverflowControls`, since it's about painting content inside
overflow, not about overflow controls.
* LayoutTests/compositing/scrolling/transformed-clipping-inside-scroller-expected.html: Added.
* LayoutTests/compositing/scrolling/transformed-clipping-inside-scroller.html: Added.
* LayoutTests/compositing/transforms/3d-transformed-fixed.html: Just add some pixel tolerance so it passes on my machine.
* Source/WebCore/rendering/RenderLayer.cpp:
(WebCore::RenderLayer::paintLayerWithEffects):
(WebCore::RenderLayer::paintLayerContents):
(WebCore::RenderLayer::paintLayerByApplyingTransform):
(WebCore::RenderLayer::paintTransformedLayerIntoFragments):
* Source/WebCore/rendering/RenderLayer.h:
Canonical link: https://commits.webkit.org/284872@main
To unsubscribe from these emails, change your notification settings at https://github.com/WebKit/WebKit/settings/notifications
More information about the webkit-changes
mailing list