Bug 1990786: Don't transform empty overflow. a=RyanVM
Original Revision: https://phabricator.services.mozilla.com/D266907 Differential Revision: https://phabricator.services.mozilla.com/D267818
This commit is contained in:
committed by
rvandermeulen@mozilla.com
parent
1d31c84e92
commit
19f835d232
@@ -10932,7 +10932,12 @@ bool nsIFrame::FinishAndStoreOverflow(OverflowAreas& aOverflowAreas,
|
|||||||
TransformReferenceBox refBox(this);
|
TransformReferenceBox refBox(this);
|
||||||
for (const auto otype : AllOverflowTypes()) {
|
for (const auto otype : AllOverflowTypes()) {
|
||||||
nsRect& o = aOverflowAreas.Overflow(otype);
|
nsRect& o = aOverflowAreas.Overflow(otype);
|
||||||
o = nsDisplayTransform::TransformRect(o, this, refBox);
|
// If the overflow is empty, it can still have a non-zero length in one axis.
|
||||||
|
// Transforming such axis-bound rect can cause the resulting rect to be non-empty,
|
||||||
|
// e.g. by rotating the rect.
|
||||||
|
if (!o.IsEmpty()) {
|
||||||
|
o = nsDisplayTransform::TransformRect(o, this, refBox);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If we're the root of the 3d context, then we want to include the
|
/* If we're the root of the 3d context, then we want to include the
|
||||||
|
|||||||
@@ -0,0 +1,45 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html class="reftest-wait">
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>CSS Overflow: Scrollable Overflow Transform Zero Area Overflow</title>
|
||||||
|
<link rel="author" title="David Shin" href="mailto:dshin@mozilla.com">
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-overflow-3/#scrollable" />
|
||||||
|
<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1990786" />
|
||||||
|
<link rel="match" href="../reference/ref-filled-green-100px-square.xht">
|
||||||
|
<style>
|
||||||
|
.transformed {
|
||||||
|
height: 0;
|
||||||
|
width: 0;
|
||||||
|
transform: rotate(89deg);
|
||||||
|
text-indent: 250px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.transformed::after {
|
||||||
|
text-indent: 0;
|
||||||
|
content: "";
|
||||||
|
}
|
||||||
|
|
||||||
|
.outer {
|
||||||
|
width: 100px;
|
||||||
|
height: 100px;
|
||||||
|
overflow: hidden;
|
||||||
|
background: red;
|
||||||
|
}
|
||||||
|
|
||||||
|
.good {
|
||||||
|
width: 200px;
|
||||||
|
height: 200px;
|
||||||
|
background: green;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
|
||||||
|
<div id=dut class=outer>
|
||||||
|
<div class=good></div>
|
||||||
|
<div class=transformed></div>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
dut.scrollTo(0, dut.scrollHeight)
|
||||||
|
document.documentElement.classList.remove('reftest-wait');
|
||||||
|
</script>
|
||||||
|
</html>
|
||||||
Reference in New Issue
Block a user