blob: 6a35a522b4af8933635637e95c1c8603d7db2869 [file] [edit]
<!DOCTYPE html>
<title>CSSOM View - convertQuadFromNode()</title>
<link rel="help" href="https://drafts.csswg.org/cssom-view/#the-geometryutils-interface">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/geometry-utils.js"></script>
<style>
html, body {
margin: 0;
}
#target {
position: absolute;
left: 15px;
top: 20px;
width: 280px;
height: 180px;
margin: 9px 13px 17px 21px;
border: solid;
border-width: 4px 6px 8px 10px;
padding: 3px 5px 7px 9px;
}
#source {
position: absolute;
left: 65px;
top: 50px;
width: 100px;
height: 50px;
margin: 12px 16px 20px 24px;
border: solid;
border-width: 2px 4px 6px 8px;
padding: 3px 5px 7px 9px;
transform: skewX(15deg) rotate(-8deg) translate(9px, 4px);
transform-origin: 25% 75%;
}
</style>
<div id="target">
<div id="source"></div>
</div>
<script>
const source = document.getElementById("source");
const target = document.getElementById("target");
const boxes = ["margin", "border", "padding", "content"];
for (const fromBox of boxes) {
for (const toBox of boxes) {
test(() => {
const size = box_size(source, fromBox);
const quad = new DOMQuad(
new DOMPoint(0, 0),
new DOMPoint(size.width, 0),
new DOMPoint(size.width, size.height),
new DOMPoint(0, size.height)
);
const actual = target.convertQuadFromNode(quad, source, {fromBox, toBox});
const expected = expected_quad_in_target_box(source, target, fromBox,
toBox);
assert_quad_approx_equals(actual, expected,
`${fromBox} quad to ${toBox} coordinates`);
}, `convertQuadFromNode() maps ${fromBox} quad to ${toBox} coordinates`);
}
}
test(() => {
const borderRect = local_box_rect(source, "border");
const quad = quad_from_rect(borderRect);
const converted = document.convertQuadFromNode(quad, source);
assert_quad_approx_equals(converted, source.getBoxQuads()[0],
"source border quad in document coordinates");
}, "Document.convertQuadFromNode() matches getBoxQuads()");
test(() => {
const borderRect = local_box_rect(source, "border");
const quad = quad_from_rect(borderRect);
const targetQuad = target.convertQuadFromNode(quad, source);
const roundTripped = source.convertQuadFromNode(targetQuad, target);
assert_quad_approx_equals(roundTripped, quad,
"quad after round-trip conversion");
}, "convertQuadFromNode() round-trips between two elements");
</script>