mirror of
https://github.com/roytam1/UXP.git
synced 2026-05-26 13:58:49 +00:00
Issue #1619 - Add Vertical Writing Testcase
Ensures aspect ratio numerator and denominator aren't swapped in vertical writing modes. https://bugzilla.mozilla.org/show_bug.cgi?id=1548768
This commit is contained in:
@@ -5197,26 +5197,6 @@ nsFrame::ComputeSizeWithIntrinsicDimensions(nsRenderingContext* aRenderingConte
|
||||
if (hasIntrinsicISize) {
|
||||
tentISize = intrinsicISize;
|
||||
} else if (hasIntrinsicBSize && logicalRatio) {
|
||||
// (dholbert) <https://phabricator.services.mozilla.com
|
||||
// /D29244#change-5faEkbsohV7O>
|
||||
// This is wrong -- this ApplyTo call (and probably every ApplyTo call
|
||||
// in this function) would only be valid if we're in a horizontal
|
||||
// writing mode. It's not valid in a vertical writing mode. If this
|
||||
// doesn't break tests, that's a bit concerning, and I think it means
|
||||
// we're missing some test coverage. (That, or I'm misreading things.)
|
||||
//
|
||||
// aIntrinsicRatio is stored in terms of physical axes (width/height),
|
||||
// either of which could be I vs. B axis. So any sort of
|
||||
// aIntrinsicRatio.ApplyTo(someBSize) operation will be
|
||||
// potentially-bogus.
|
||||
//
|
||||
// You probably want to bring back a logicalRatio variable
|
||||
// (like the one we used to have here), but now with type AspectRatio.
|
||||
// It would be equal to either aIntrinsicRatio or
|
||||
// aIntrinsicRatio.Invert() depending on whether aWM is horizontal or
|
||||
// vertical. (And hopefully having logical in its name would be a
|
||||
// reminder that it's in terms of Inline/Block and can be used for
|
||||
// these sorts of ApplyTo(intrinsicBSize) operations.
|
||||
tentISize = logicalRatio.ApplyTo(intrinsicBSize);
|
||||
} else if (logicalRatio) {
|
||||
tentISize = aCBSize.ISize(aWM) - boxSizingToMarginEdgeISize; // XXX scrollbar?
|
||||
|
||||
+57
@@ -0,0 +1,57 @@
|
||||
<!doctype html>
|
||||
<title>Frame width and height attributes as they apply in a vertical writing mode</title>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<style>
|
||||
#horiz
|
||||
{
|
||||
writing-mode: horizontal-tb;
|
||||
display: inline-block;
|
||||
}
|
||||
#vert
|
||||
{
|
||||
writing-mode: vertical-rl;
|
||||
display: inline-block;
|
||||
}
|
||||
object
|
||||
{
|
||||
border: 1px solid red;
|
||||
margin: 5px;
|
||||
}
|
||||
</style>
|
||||
<div id="horiz">
|
||||
<object data="/images/green.png" width=300></object>
|
||||
<object data="/images/green.png" height=50></object>
|
||||
</div>
|
||||
<div id="vert">
|
||||
<object data="/images/green.png" width=300></object>
|
||||
<object data="/images/green.png" height=50></object>
|
||||
</div>
|
||||
<script>
|
||||
let t = async_test("Frame width and height attributes as they apply in a vertical writing mode");
|
||||
function assert_dimensions(obj, expectedX, expectedY) {
|
||||
assert_equals(getComputedStyle(obj).width, expectedX);
|
||||
assert_equals(getComputedStyle(obj).height, expectedY);
|
||||
}
|
||||
t.step(function() {
|
||||
var obj = document.createElement('object');
|
||||
obj.width = 133;
|
||||
obj.data = '/images/blue.png';
|
||||
document.getElementById('horiz').appendChild(obj);
|
||||
|
||||
obj = document.createElement('object');
|
||||
obj.width = 133;
|
||||
obj.data = '/images/blue.png';
|
||||
document.getElementById('vert').appendChild(obj);
|
||||
});
|
||||
|
||||
onload = t.step_func_done(function() {
|
||||
let objects = document.querySelectorAll("object");
|
||||
assert_dimensions(objects[0], '300px', '150px');
|
||||
assert_dimensions(objects[1], '100px', '50px');
|
||||
assert_dimensions(objects[2], '133px', '106px');
|
||||
assert_dimensions(objects[3], '300px', '150px');
|
||||
assert_dimensions(objects[4], '100px', '50px');
|
||||
assert_dimensions(objects[5], '133px', '106px');
|
||||
});
|
||||
</script>
|
||||
Reference in New Issue
Block a user