Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 4e88d3e73dff505ed6f3e9607b5c956c8e535626
      
https://github.com/WebKit/WebKit/commit/4e88d3e73dff505ed6f3e9607b5c956c8e535626
  Author: Alan Baradlay <[email protected]>
  Date:   2026-08-10 (Mon, 10 Aug 2026)

  Changed paths:
    A 
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filtered-inline-is-container-with-block-content-expected.html
    A 
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filtered-inline-is-container-with-block-content-ref.html
    A 
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filtered-inline-is-container-with-block-content.html
    M Source/WebCore/rendering/RenderBox.cpp
    M Source/WebCore/rendering/RenderInline.cpp
    M Source/WebCore/rendering/RenderLayer.cpp
    M Source/WebCore/rendering/RenderLayoutState.cpp

  Log Message:
  -----------
  [block-in-inline] Only a relatively positioned inline offsets its out-of-flow 
children by the position of its line
https://bugs.webkit.org/show_bug.cgi?id=321397

Reviewed by Antti Koivisto.

An out-of-flow box whose containing block is an inline box is laid out against 
the nearest non-anonymous
block, so the distance from that block to the inline's own first fragment has 
to be added back.
RenderInline::offsetForInFlowPositionedInline is what returns it, taking the 
inline box's logicalTop, and
all four of its callers ask for it only when the inline is in-flow positioned. 
An inline is the containing
block for other reasons too, a filter among them, and in those cases the offset 
was dropped.

An anonymous block around the inline hid this. The wrapper is a RenderBox, so 
its own topLeftLocationOffset
carries the distance up the box chain in offsetFromContainer, and the inline 
sits at the top of the
wrapper's first line, which leaves the half-leading at most to add. With a 
block level box on a line there
is no wrapper: the inline's parent is the container itself, a RenderInline 
contributes no location offset
of its own, and the whole distance down to the line is left to 
offsetForInFlowPositionedInline.

Ask whether the inline is the containing block rather than whether it is 
in-flow positioned. For a
RenderInline canContainAbsolutelyPositionedObjects covers the fixed position 
case as well, since the
willChange term of each only applies to a RenderBlock, leaving 
mayContainOutOfFlowPositionedObjects and a
non-static position.

* 
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filtered-inline-is-container-with-block-content.html:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filtered-inline-is-container-with-block-content-ref.html:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/css/filter-effects/filtered-inline-is-container-with-block-content-expected.html:
 Added.
* Source/WebCore/rendering/RenderBox.cpp:
(WebCore::RenderBox::offsetFromContainer):
(WebCore::RenderBox::computeVisibleRectsInContainer):
* Source/WebCore/rendering/RenderInline.cpp:
(WebCore::RenderInline::offsetForInFlowPositionedInline):
* Source/WebCore/rendering/RenderLayer.cpp:
(WebCore::RenderLayer::updateLayerPosition):
* Source/WebCore/rendering/RenderLayoutState.cpp:
(WebCore::RenderLayoutState::computeOffsets):

Canonical link: https://commits.webkit.org/318897@main



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications

Reply via email to