Bug 1679931 Part 2 - Recompute float children's overflow area after moving them in vertical-rl writing-mode. r=layout-reviewers,jfkthame

Differential Revision: https://phabricator.services.mozilla.com/D98516
This commit is contained in:
Ting-Yu Lin 2020-12-07 23:31:37 +00:00
Родитель 49aa0d68f1
Коммит c065c51a1b
2 изменённых файлов: 49 добавлений и 0 удалений

Просмотреть файл

@ -1502,12 +1502,17 @@ void nsBlockFrame::Reflow(nsPresContext* aPresContext, ReflowOutput& aMetrics,
nsSize containerSize = aMetrics.PhysicalSize(); nsSize containerSize = aMetrics.PhysicalSize();
nscoord deltaX = containerSize.width - state.ContainerSize().width; nscoord deltaX = containerSize.width - state.ContainerSize().width;
if (deltaX != 0) { if (deltaX != 0) {
// We compute our lines and markers' overflow areas later in
// ComputeOverflowAreas(), so we don't need to adjust their overflow areas
// here.
const nsPoint physicalDelta(deltaX, 0); const nsPoint physicalDelta(deltaX, 0);
for (auto& line : Lines()) { for (auto& line : Lines()) {
UpdateLineContainerSize(&line, containerSize); UpdateLineContainerSize(&line, containerSize);
} }
fcBounds.Clear();
for (nsIFrame* f : mFloats) { for (nsIFrame* f : mFloats) {
f->MovePositionBy(physicalDelta); f->MovePositionBy(physicalDelta);
ConsiderChildOverflow(fcBounds, f);
} }
nsFrameList* markerList = GetOutsideMarkerList(); nsFrameList* markerList = GetOutsideMarkerList();
if (markerList) { if (markerList) {

Просмотреть файл

@ -0,0 +1,44 @@
<!DOCTYPE html>
<!-- Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ -->
<html>
<meta charset="utf-8">
<title>CSS Overflow Test: Scrollable overflow area of a multicol container in vertical-rl writing-mode</title>
<link rel="author" title="Ting-Yu Lin" href="mailto:tlin@mozilla.com">
<link rel="author" title="Mozilla" href="http://www.mozilla.org/">
<link rel="help" href="https://drafts.csswg.org/css-overflow-3/#scrollable">
<link rel="match" href="../reference/ref-filled-green-100px-square-only.html">
<meta name="assert" content="This test verifies the float element in a multicol container in vertical-rl writing-mode shouldn't contribute to its container'sscrollable overflow area.">
<style>
.scroll-container {
writing-mode: vertical-rl;
inline-size: 100px;
block-size: 100px;
overflow: auto;
}
.multicol {
block-size: 100px;
inline-size: 100px;
column-fill: auto;
column-count: 2;
column-gap: 0;
}
.float {
float: left;
inline-size: 50px;
block-size: 100px;
background: green;
}
</style>
<!--This test passes if the scroll-container has no scrollbar. -->
<p>Test passes if there is a filled green square.</p>
<div class="scroll-container">
<div class="multicol">
<div style="block-size: 100px; background: green;"></div>
<div class="float"></div>
</div>
</div>
</html>