Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
- This WPT test may be referenced by the following Test IDs:
- /html/canvas/element/manual/draw-element-image/nested-drawable.tentative.html - WPT Dashboard Interop Dashboard
<!DOCTYPE html>
<html class="reftest-wait">
<title>drawElementImage with nested drawable</title>
<link rel="match" href="nested-drawable-ref.html">
<script src="/common/reftest-wait.js"></script>
<script src="/html/canvas/resources/wait-for-canvas-paint.js"></script>
<style>
#child {
width: 100px;
height: 200px;
background: green;
}
#grandchilda {
width: 50px;
height: 50px;
background: blue;
}
#grandchildb {
width: 50px;
height: 50px;
background: yellow;
}
#grandchildc {
width: 50px;
height: 50px;
background: purple;
}
#grandchildd {
position: relative;
width: 50px;
height: 50px;
background: orange;
}
#grandchilde {
width: 50px;
height: 50px;
background: cyan;
}
#grandchildf {
width: 50px;
height: 50px;
background: magenta;
}
#canvas {
background: #ccc;
}
</style>
<canvas id="canvas" width="300" height="200" content=drawable>
<div id="child" drawable>
<div id="grandchilda" drawable></div>
<div id="grandchildb"></div>
<div id="grandchildc" drawable></div>
<div id="grandchildd">
<div style="opacity: 0.5">
<div id="grandchilde" drawable></div>
</div>
</div>
<div style="overflow: hidden; width: 0; height: 0;">
<div id="grandchildf" drawable></div>
</div>
</div>
</canvas>
<script>
onload = async () => {
await waitForCanvasPaint(canvas);
// Draw the 100x200 green #child at the origin. This should not include the
// drawable grandchildren, but should include #grandchildb and #grandchildd.
canvas.getContext('2d').drawElementImage(child, 0, 0);
// Draw the 50x50 blue #grandchilda at 100,0.
canvas.getContext('2d').drawElementImage(grandchilda, 100, 0);
// Draw the 50x50 purple #grandchildc at 200,0.
canvas.getContext('2d').drawElementImage(grandchildc, 200, 0);
// Draw the 50x50 cyan #grandchilde at 100,100; the non-drawable ancestor's
// opacity should be ignored.
canvas.getContext('2d').drawElementImage(grandchilde, 100, 100);
// Draw the 50x50 magenta #grandchildf at 200,100; the ancestor clip
// should be ignored.
canvas.getContext('2d').drawElementImage(grandchildf, 200, 100);
takeScreenshot();
};
</script>
</html>