Skip to content
Permalink
Browse files
[css-contain] Support contain:paint
https://bugs.webkit.org/show_bug.cgi?id=224742

Patch by Rob Buis <rbuis@igalia.com> on 2021-11-10
Reviewed by Alan Bujtas.

LayoutTests/imported/w3c:

Adjust test expectation now that contain: strict is supported.

* web-platform-tests/css/css-flexbox/flex-item-contains-strict-expected.txt:

Source/WebCore:

This patch implements paint containment as specified[1].

It adds shouldApplyPaintContainment to check whether the element applies for paint containment. Is so, then:
- an independent formatting context is established.
- an absolute positioning and fixed positioning containing block is established.
- a stacking context is created.
- implements clipping on the overflow clip edge.

This patch also adds effectiveOverflowX/effectiveOverflowY on RenderElement to take
the effect of paint containment on overflow-x/y into account.

[1] https://drafts.csswg.org/css-contain-2/#paint-containment

* page/FrameView.cpp:
(WebCore::FrameView::applyOverflowToViewport):
(WebCore::FrameView::applyPaginationToViewport):
(WebCore::FrameView::calculateScrollbarModesForLayout):
* rendering/GridTrackSizingAlgorithm.cpp:
(WebCore::GridTrackSizingAlgorithmStrategy::minSizeForChild const):
* rendering/RenderBox.cpp:
(WebCore::RenderBox::updateFromStyle):
(WebCore::RenderBox::constrainLogicalWidthInFragmentByMinMax const):
(WebCore::RenderBox::constrainLogicalHeightByMinMax const):
(WebCore::RenderBox::createsNewFormattingContext const):
(WebCore::RenderBox::addOverflowFromChild):
* rendering/RenderBoxModelObject.cpp:
(WebCore::RenderBoxModelObject::updateFromStyle):
* rendering/RenderElement.cpp:
(WebCore::includeNonFixedHeight):
(WebCore::RenderElement::effectiveOverflowX const):
(WebCore::RenderElement::effectiveOverflowY const):
* rendering/RenderElement.h:
(WebCore::RenderElement::effectiveOverflowInlineDirection const):
(WebCore::RenderElement::effectiveOverflowBlockDirection const):
(WebCore::RenderElement::canContainFixedPositionObjects const):
(WebCore::RenderElement::canContainAbsolutelyPositionedObjects const):
* rendering/RenderFlexibleBox.cpp:
(WebCore::RenderFlexibleBox::mainAxisOverflowForChild const):
(WebCore::RenderFlexibleBox::crossAxisOverflowForChild const):
* rendering/RenderFragmentContainer.cpp:
(WebCore::RenderFragmentContainer::overflowRectForFragmentedFlowPortion):
* rendering/RenderInline.h:
* rendering/RenderLayer.cpp:
(WebCore::canCreateStackingContext):
(WebCore::RenderLayer::shouldBeCSSStackingContext const):
(WebCore::RenderLayer::setAncestorChainHasSelfPaintingLayerDescendant):
(WebCore::RenderLayer::setAncestorChainHasVisibleDescendant):
(WebCore::RenderLayer::calculateClipRects const):
* rendering/RenderObject.cpp:
(WebCore::RenderObject::setPaintContainmentApplies):
(WebCore::shouldApplyPaintContainment):
* rendering/RenderObject.h:
(WebCore::RenderObject::paintContainmentApplies const):
* rendering/style/RenderStyle.h:
(WebCore::RenderStyle::overflowY const):
(WebCore::RenderStyle::containsPaint const):
(WebCore::RenderStyle::overflowInlineDirection const): Deleted.
(WebCore::RenderStyle::overflowBlockDirection const): Deleted.
* rendering/svg/RenderSVGRoot.cpp:
(WebCore::RenderSVGRoot::shouldApplyViewportClip const):

LayoutTests:

Unskip tests that pass now.

* TestExpectations:


Canonical link: https://commits.webkit.org/244091@main
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@285583 268f45cc-cd09-0410-ab3c-d52691b4dbfc
  • Loading branch information
rwlbuis authored and webkit-commit-queue committed Nov 10, 2021
1 parent b8f1a76 commit 562f83af16204c3bdd83e7d453f55b10394734fd
Show file tree
Hide file tree
Showing 19 changed files with 174 additions and 69 deletions.
@@ -1,3 +1,14 @@
2021-11-10 Rob Buis <rbuis@igalia.com>

[css-contain] Support contain:paint
https://bugs.webkit.org/show_bug.cgi?id=224742

Reviewed by Alan Bujtas.

Unskip tests that pass now.

* TestExpectations:

2021-11-10 Enrique Ocaña González <eocanha@igalia.com>

[Media] Make currentTime compliant with the spec when readyState is HAVE_NOTHING
@@ -4739,6 +4739,10 @@ webanimations/translate-property-and-translate-animation-with-delay-on-forced-la
# CSS containment tests that fail
# webkit-ruby-text
imported/w3c/web-platform-tests/css/css-contain/contain-layout-017.html [ ImageOnlyFailure ]
imported/w3c/web-platform-tests/css/css-contain/contain-paint-005.html [ ImageOnlyFailure ]
imported/w3c/web-platform-tests/css/css-contain/contain-paint-006.html [ ImageOnlyFailure ]
imported/w3c/web-platform-tests/css/css-contain/contain-paint-008.html [ ImageOnlyFailure ]
imported/w3c/web-platform-tests/css/css-contain/contain-paint-021.html [ ImageOnlyFailure ]
imported/w3c/web-platform-tests/css/css-contain/content-visibility/content-visibility-001.html [ ImageOnlyFailure ]
imported/w3c/web-platform-tests/css/css-contain/content-visibility/content-visibility-003.html [ ImageOnlyFailure ]
imported/w3c/web-platform-tests/css/css-contain/content-visibility/content-visibility-004.html [ ImageOnlyFailure ]
@@ -4753,49 +4757,8 @@ imported/w3c/web-platform-tests/css/css-contain/content-visibility/content-visib
imported/w3c/web-platform-tests/css/css-contain/content-visibility/content-visibility-020.html [ ImageOnlyFailure ]
imported/w3c/web-platform-tests/css/css-contain/content-visibility/content-visibility-021.html [ ImageOnlyFailure ]
imported/w3c/web-platform-tests/css/css-contain/content-visibility/content-visibility-022.html [ ImageOnlyFailure ]
imported/w3c/web-platform-tests/css/css-contain/contain-paint-001.html [ ImageOnlyFailure ]
imported/w3c/web-platform-tests/css/css-contain/contain-paint-004.html [ ImageOnlyFailure ]
imported/w3c/web-platform-tests/css/css-contain/contain-paint-005.html [ ImageOnlyFailure ]
imported/w3c/web-platform-tests/css/css-contain/contain-paint-006.html [ ImageOnlyFailure ]
imported/w3c/web-platform-tests/css/css-contain/contain-paint-008.html [ ImageOnlyFailure ]
imported/w3c/web-platform-tests/css/css-contain/contain-paint-009.html [ ImageOnlyFailure ]
imported/w3c/web-platform-tests/css/css-contain/contain-paint-010.html [ ImageOnlyFailure ]
imported/w3c/web-platform-tests/css/css-contain/contain-paint-014.html [ ImageOnlyFailure ]
imported/w3c/web-platform-tests/css/css-contain/contain-paint-019.html [ ImageOnlyFailure ]
imported/w3c/web-platform-tests/css/css-contain/contain-paint-020.html [ ImageOnlyFailure ]
imported/w3c/web-platform-tests/css/css-contain/contain-paint-022.html [ ImageOnlyFailure ]
imported/w3c/web-platform-tests/css/css-contain/contain-paint-023.html [ ImageOnlyFailure ]
imported/w3c/web-platform-tests/css/css-contain/contain-paint-047.html [ ImageOnlyFailure ]
imported/w3c/web-platform-tests/css/css-contain/contain-paint-048.html [ ImageOnlyFailure ]
imported/w3c/web-platform-tests/css/css-contain/contain-paint-cell-001.html [ ImageOnlyFailure ]
imported/w3c/web-platform-tests/css/css-contain/contain-paint-cell-002.html [ ImageOnlyFailure ]
imported/w3c/web-platform-tests/css/css-contain/contain-paint-clip-001.html [ ImageOnlyFailure ]
imported/w3c/web-platform-tests/css/css-contain/contain-paint-clip-002.html [ ImageOnlyFailure ]
imported/w3c/web-platform-tests/css/css-contain/contain-paint-clip-006.html [ ImageOnlyFailure ]
imported/w3c/web-platform-tests/css/css-contain/contain-paint-clip-011.html [ ImageOnlyFailure ]
imported/w3c/web-platform-tests/css/css-contain/contain-paint-clip-012.html [ ImageOnlyFailure ]
imported/w3c/web-platform-tests/css/css-contain/contain-paint-clip-013.html [ ImageOnlyFailure ]
imported/w3c/web-platform-tests/css/css-contain/contain-paint-clip-014.html [ ImageOnlyFailure ]
imported/w3c/web-platform-tests/css/css-contain/contain-paint-clip-015.html [ ImageOnlyFailure ]
imported/w3c/web-platform-tests/css/css-contain/contain-paint-clip-016.html [ ImageOnlyFailure ]
imported/w3c/web-platform-tests/css/css-contain/contain-paint-clip-017.html [ ImageOnlyFailure ]
imported/w3c/web-platform-tests/css/css-contain/contain-paint-clip-018.html [ ImageOnlyFailure ]
imported/w3c/web-platform-tests/css/css-contain/contain-paint-clip-019.html [ ImageOnlyFailure ]
imported/w3c/web-platform-tests/css/css-contain/contain-paint-containing-block-absolute-001.html [ ImageOnlyFailure ]
imported/w3c/web-platform-tests/css/css-contain/contain-paint-containing-block-fixed-001.html [ ImageOnlyFailure ]
imported/w3c/web-platform-tests/css/css-contain/contain-paint-formatting-context-float-001.html [ ImageOnlyFailure ]
imported/w3c/web-platform-tests/css/css-contain/contain-paint-formatting-context-margin-001.html [ ImageOnlyFailure ]
imported/w3c/web-platform-tests/css/css-contain/contain-paint-ifc-011.html [ ImageOnlyFailure ]
imported/w3c/web-platform-tests/css/css-contain/contain-paint-independent-formatting-context-001.html [ ImageOnlyFailure ]
imported/w3c/web-platform-tests/css/css-contain/contain-paint-size-001.html [ ImageOnlyFailure ]
imported/w3c/web-platform-tests/css/css-contain/contain-paint-size-002.html [ ImageOnlyFailure ]
imported/w3c/web-platform-tests/css/css-contain/contain-paint-size-003.html [ ImageOnlyFailure ]
imported/w3c/web-platform-tests/css/css-contain/contain-paint-stacking-context-001a.html [ ImageOnlyFailure ]
imported/w3c/web-platform-tests/css/css-contain/contain-paint-table-001.html [ ImageOnlyFailure ]
imported/w3c/web-platform-tests/css/css-contain/contain-paint-table-002.html [ ImageOnlyFailure ]
imported/w3c/web-platform-tests/css/css-contain/contain-strict-001.html [ ImageOnlyFailure ]
imported/w3c/web-platform-tests/css/css-contain/contain-strict-002.html [ ImageOnlyFailure ]
imported/w3c/web-platform-tests/css/css-contain/contain-strict-011.html [ ImageOnlyFailure ]
imported/w3c/web-platform-tests/css/css-contain/content-visibility/content-visibility-032.html [ ImageOnlyFailure ]
imported/w3c/web-platform-tests/css/css-contain/content-visibility/content-visibility-033.sub.https.html [ ImageOnlyFailure ]
imported/w3c/web-platform-tests/css/css-contain/content-visibility/content-visibility-034.html [ ImageOnlyFailure ]
@@ -1,3 +1,14 @@
2021-11-10 Rob Buis <rbuis@igalia.com>

[css-contain] Support contain:paint
https://bugs.webkit.org/show_bug.cgi?id=224742

Reviewed by Alan Bujtas.

Adjust test expectation now that contain: strict is supported.

* web-platform-tests/css/css-flexbox/flex-item-contains-strict-expected.txt:

2021-11-10 Youenn Fablet <youenn@apple.com>

Update libwebrtc to M96
@@ -1,17 +1,13 @@
Stretched:

Column

Row

Column

Row
Flex-start:

Column

Row

Column

@@ -1,3 +1,71 @@
2021-11-10 Rob Buis <rbuis@igalia.com>

[css-contain] Support contain:paint
https://bugs.webkit.org/show_bug.cgi?id=224742

Reviewed by Alan Bujtas.

This patch implements paint containment as specified[1].

It adds shouldApplyPaintContainment to check whether the element applies for paint containment. Is so, then:
- an independent formatting context is established.
- an absolute positioning and fixed positioning containing block is established.
- a stacking context is created.
- implements clipping on the overflow clip edge.

This patch also adds effectiveOverflowX/effectiveOverflowY on RenderElement to take
the effect of paint containment on overflow-x/y into account.

[1] https://drafts.csswg.org/css-contain-2/#paint-containment

* page/FrameView.cpp:
(WebCore::FrameView::applyOverflowToViewport):
(WebCore::FrameView::applyPaginationToViewport):
(WebCore::FrameView::calculateScrollbarModesForLayout):
* rendering/GridTrackSizingAlgorithm.cpp:
(WebCore::GridTrackSizingAlgorithmStrategy::minSizeForChild const):
* rendering/RenderBox.cpp:
(WebCore::RenderBox::updateFromStyle):
(WebCore::RenderBox::constrainLogicalWidthInFragmentByMinMax const):
(WebCore::RenderBox::constrainLogicalHeightByMinMax const):
(WebCore::RenderBox::createsNewFormattingContext const):
(WebCore::RenderBox::addOverflowFromChild):
* rendering/RenderBoxModelObject.cpp:
(WebCore::RenderBoxModelObject::updateFromStyle):
* rendering/RenderElement.cpp:
(WebCore::includeNonFixedHeight):
(WebCore::RenderElement::effectiveOverflowX const):
(WebCore::RenderElement::effectiveOverflowY const):
* rendering/RenderElement.h:
(WebCore::RenderElement::effectiveOverflowInlineDirection const):
(WebCore::RenderElement::effectiveOverflowBlockDirection const):
(WebCore::RenderElement::canContainFixedPositionObjects const):
(WebCore::RenderElement::canContainAbsolutelyPositionedObjects const):
* rendering/RenderFlexibleBox.cpp:
(WebCore::RenderFlexibleBox::mainAxisOverflowForChild const):
(WebCore::RenderFlexibleBox::crossAxisOverflowForChild const):
* rendering/RenderFragmentContainer.cpp:
(WebCore::RenderFragmentContainer::overflowRectForFragmentedFlowPortion):
* rendering/RenderInline.h:
* rendering/RenderLayer.cpp:
(WebCore::canCreateStackingContext):
(WebCore::RenderLayer::shouldBeCSSStackingContext const):
(WebCore::RenderLayer::setAncestorChainHasSelfPaintingLayerDescendant):
(WebCore::RenderLayer::setAncestorChainHasVisibleDescendant):
(WebCore::RenderLayer::calculateClipRects const):
* rendering/RenderObject.cpp:
(WebCore::RenderObject::setPaintContainmentApplies):
(WebCore::shouldApplyPaintContainment):
* rendering/RenderObject.h:
(WebCore::RenderObject::paintContainmentApplies const):
* rendering/style/RenderStyle.h:
(WebCore::RenderStyle::overflowY const):
(WebCore::RenderStyle::containsPaint const):
(WebCore::RenderStyle::overflowInlineDirection const): Deleted.
(WebCore::RenderStyle::overflowBlockDirection const): Deleted.
* rendering/svg/RenderSVGRoot.cpp:
(WebCore::RenderSVGRoot::shouldApplyViewportClip const):

2021-11-10 Youenn Fablet <youenn@apple.com> and Victor M. Jaquez L. <vjaquez@igalia.com>

Update libwebrtc to M96
@@ -644,8 +644,8 @@ void FrameView::applyOverflowToViewport(const RenderElement& renderer, Scrollbar

bool overrideHidden = frame().isMainFrame() && ((frame().frameScaleFactor() > 1) || headerHeight() || footerHeight());

Overflow overflowX = renderer.style().overflowX();
Overflow overflowY = renderer.style().overflowY();
Overflow overflowX = renderer.effectiveOverflowX();
Overflow overflowY = renderer.effectiveOverflowY();

if (is<RenderSVGRoot>(renderer)) {
// FIXME: evaluate if we can allow overflow for these cases too.
@@ -709,12 +709,12 @@ void FrameView::applyPaginationToViewport()

auto* body = document->body();
if (body && body->renderer()) {
documentOrBodyRenderer = documentRenderer.style().overflowX() == Overflow::Visible && is<HTMLHtmlElement>(*documentElement) ?
documentOrBodyRenderer = documentRenderer.effectiveOverflowX() == Overflow::Visible && is<HTMLHtmlElement>(*documentElement) ?
body->renderer() : &documentRenderer;
}

Pagination pagination;
Overflow overflowY = documentOrBodyRenderer->style().overflowY();
Overflow overflowY = documentOrBodyRenderer->effectiveOverflowY();
if (overflowY == Overflow::PagedX || overflowY == Overflow::PagedY) {
pagination.mode = WebCore::paginationModeForRenderStyle(documentOrBodyRenderer->style());
GapLength columnGapLength = documentOrBodyRenderer->style().columnGap();
@@ -776,7 +776,7 @@ void FrameView::calculateScrollbarModesForLayout(ScrollbarMode& hMode, Scrollbar
if (is<HTMLBodyElement>(*bodyOrFrameset) && rootRenderer) {
// It's sufficient to just check the X overflow,
// since it's illegal to have visible in only one direction.
if (rootRenderer->style().overflowX() == Overflow::Visible && is<HTMLHtmlElement>(documentElement)) {
if (rootRenderer->effectiveOverflowX() == Overflow::Visible && is<HTMLHtmlElement>(documentElement)) {
auto* bodyRenderer = bodyOrFrameset->renderer();
if (bodyRenderer) {
applyOverflowToViewport(*bodyRenderer, hMode, vMode);
@@ -846,7 +846,7 @@ LayoutUnit GridTrackSizingAlgorithmStrategy::minSizeForChild(RenderBox& child) c
return minContentForChild(child);

const Length& childMinSize = isRowAxis ? child.style().logicalMinWidth() : child.style().logicalMinHeight();
bool overflowIsVisible = isRowAxis ? child.style().overflowInlineDirection() == Overflow::Visible : child.style().overflowBlockDirection() == Overflow::Visible;
bool overflowIsVisible = isRowAxis ? child.effectiveOverflowInlineDirection() == Overflow::Visible : child.effectiveOverflowBlockDirection() == Overflow::Visible;
LayoutUnit baselineShim = m_algorithm.baselineOffsetForChild(child, gridAxisForDirection(direction()));

if (childMinSize.isAuto() && overflowIsVisible) {
@@ -483,7 +483,7 @@ void RenderBox::updateFromStyle()
setFloating(!isOutOfFlowPositioned() && styleToUse.isFloating());

// We also handle <body> and <html>, whose overflow applies to the viewport.
if (!(styleToUse.overflowX() == Overflow::Visible && styleToUse.overflowY() == Overflow::Visible) && !isDocElementRenderer && isRenderBlock()) {
if (!(effectiveOverflowX() == Overflow::Visible && effectiveOverflowY() == Overflow::Visible) && !isDocElementRenderer && isRenderBlock()) {
bool boxHasNonVisibleOverflow = true;
if (isBody()) {
// Overflow on the body can propagate to the viewport under the following conditions.
@@ -492,7 +492,7 @@ void RenderBox::updateFromStyle()
// (3) The root element has visible overflow.
if (is<HTMLHtmlElement>(*document().documentElement())
&& document().body() == element()
&& document().documentElement()->renderer()->style().overflowX() == Overflow::Visible) {
&& document().documentElement()->renderer()->effectiveOverflowX() == Overflow::Visible) {
boxHasNonVisibleOverflow = false;
}
}
@@ -662,7 +662,7 @@ LayoutUnit RenderBox::constrainLogicalWidthInFragmentByMinMax(LayoutUnit logical
if (allowIntrinsic == AllowIntrinsic::No && styleToUse.logicalMinWidth().isIntrinsic())
return logicalWidth;
auto minLength = styleToUse.logicalMinWidth();
if (styleToUse.hasAspectRatio() && minLength.isAuto() && (styleToUse.logicalWidth().isAuto() || styleToUse.logicalWidth().isMinContent() || styleToUse.logicalWidth().isMaxContent()) && styleToUse.overflowInlineDirection() == Overflow::Visible) {
if (styleToUse.hasAspectRatio() && minLength.isAuto() && (styleToUse.logicalWidth().isAuto() || styleToUse.logicalWidth().isMinContent() || styleToUse.logicalWidth().isMaxContent()) && effectiveOverflowInlineDirection() == Overflow::Visible) {
// Make sure we actually used the aspect ratio.
if (shouldComputeLogicalWidthFromAspectRatio())
minLength = Length(LengthType::MinContent);
@@ -678,7 +678,7 @@ LayoutUnit RenderBox::constrainLogicalHeightByMinMax(LayoutUnit logicalHeight, s
logicalHeight = std::min(logicalHeight, maxH.value());
}
auto logicalMinHeight = styleToUse.logicalMinHeight();
if (logicalMinHeight.isAuto() && shouldComputeLogicalHeightFromAspectRatio() && intrinsicContentHeight && styleToUse.overflowBlockDirection() == Overflow::Visible) {
if (logicalMinHeight.isAuto() && shouldComputeLogicalHeightFromAspectRatio() && intrinsicContentHeight && effectiveOverflowBlockDirection() == Overflow::Visible) {
auto heightFromAspectRatio = blockSizeFromAspectRatio(horizontalBorderAndPaddingExtent(), verticalBorderAndPaddingExtent(), LayoutUnit(style().logicalAspectRatio()), style().boxSizingForAspectRatio(), logicalWidth()) - borderAndPaddingLogicalHeight();
if (firstChild())
heightFromAspectRatio = std::max(heightFromAspectRatio, *intrinsicContentHeight);
@@ -4848,7 +4848,7 @@ bool RenderBox::createsNewFormattingContext() const
{
return isInlineBlockOrInlineTable() || isFloatingOrOutOfFlowPositioned() || hasPotentiallyScrollableOverflow() || isFlexItemIncludingDeprecated()
|| isTableCell() || isTableCaption() || isFieldset() || isWritingModeRoot() || isDocumentElementRenderer() || isRenderFragmentedFlow()
|| style().containsLayout() || isGridItem() || style().specifiesColumns() || style().columnSpan() == ColumnSpan::All || style().display() == DisplayType::FlowRoot;
|| style().containsLayout() || paintContainmentApplies() || isGridItem() || style().specifiesColumns() || style().columnSpan() == ColumnSpan::All || style().display() == DisplayType::FlowRoot;
}

bool RenderBox::avoidsFloats() const
@@ -4916,6 +4916,8 @@ LayoutRect RenderBox::applyVisualEffectOverflow(const LayoutRect& borderBox) con

void RenderBox::addOverflowFromChild(const RenderBox* child, const LayoutSize& delta)
{
if (paintContainmentApplies())
return;
// Never allow flow threads to propagate overflow up to a parent.
if (child->isRenderFragmentedFlow())
return;
@@ -211,6 +211,7 @@ void RenderBoxModelObject::updateFromStyle()
setHorizontalWritingMode(styleToUse.isHorizontalWritingMode());
if (styleToUse.isFlippedBlocksWritingMode())
view().frameView().setHasFlippedBlockRenderers(true);
setPaintContainmentApplies(shouldApplyPaintContainment(*this));
}

static LayoutSize accumulateInFlowPositionOffsets(const RenderObject* child)
@@ -2320,7 +2320,7 @@ static RenderObject::BlockContentHeightType includeNonFixedHeight(const RenderOb
if (is<RenderBlock>(renderer)) {
// For fixed height styles, if the overflow size of the element spills out of the specified
// height, assume we can apply text auto-sizing.
if (style.overflowY() == Overflow::Visible
if (downcast<RenderBlock>(renderer).effectiveOverflowY() == Overflow::Visible
&& style.height().value() < downcast<RenderBlock>(renderer).layoutOverflowRect().maxY())
return RenderObject::OverflowHeight;
}
@@ -2410,4 +2410,20 @@ void RenderElement::setBackdropRenderer(RenderBlockFlow& renderer)
ensureRareData().backdropRenderer = renderer;
}

Overflow RenderElement::effectiveOverflowX() const
{
auto overflowX = style().overflowX();
if (paintContainmentApplies() && overflowX == Overflow::Visible)
return Overflow::Clip;
return overflowX;
}

Overflow RenderElement::effectiveOverflowY() const
{
auto overflowY = style().overflowY();
if (paintContainmentApplies() && overflowY == Overflow::Visible)
return Overflow::Clip;
return overflowY;
}

}

0 comments on commit 562f83a

Please sign in to comment.